Odpovídáte na názor k článku Kouzlo minimalismu potřetí: vývoj her a dem pro osmibitová Atari. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.
Existuje takova pekna uloha z rossetacode co zjistuje zda dany retezec je pangram a nebo neni. Tzn. zda obsahuje vsechny pismena abecedy.
Je to jednoducha uloha, ale uz pocet osob se nevleze do jedineho auta.
#include <stdio.h>
int is_pangram(const char *s)
{
const char *alpha = ""
"abcdefghjiklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char ch, wasused[26] = {0};
int total = 0;
while ((ch = *s++) != '\0') {
const char *p;
int idx;
if ((p = strchr(alpha, ch)) == NULL)
continue;
idx = (p - alpha) % 26;
total += !wasused[idx];
wasused[idx] = 1;
if (total == 26)
return 1;
}
return 0;
}
int main(void)
{
int i;
const char *tests[] = {
"The quick brown fox jumps over the lazy dog.",
"The qu1ck brown fox jumps over the lazy d0g."
};
for (i = 0; i < 2; i++)
printf("\"%s\" is %sa pangram\n",
tests[i], is_pangram(tests[i])?"":"not ");
return 0;
}
ja to pojal jako benchmark tak ze udelam 32 bitove binarni pole
#include <stdio.h>
int pangram(const char * str)
{
str--;
unsigned char c;
unsigned long int alphabet = 0;
while (c = *++str) {
c |= 32; // uppercase
c -= 'a';
if ( c<26 ) alphabet |= (long unsigned int) 1 << c;
}
return alphabet==0x3FFFFFF;
}
int main()
{
char *str = "The five boxing wizards jump quickly.";
unsigned int i;
for (i = 10000; i > 0; i--)
pangram(str);
printf("%d\n", pangram(str));
return 0;
}
podle vzoru
: pangram? ( addr len -- ? )
0 -rot bounds do
i c@ 32 or [char] a -
dup 0 26 within if
1 swap lshift or
else drop then
loop
1 26 lshift 1- = ;
s" The five boxing wizards jump quickly." pangram? . \ -1
Tohle funguje jen pokud ma forth 32 bitove a vetsi slova.
pseudo forth 16bit kod:
: pangram ( addr -- ? )
1-
0.
BEGIN
ROT 1+ -ROT 2OVER NIP C@ 0 C<> WHILE 2OVER NIP C@
32 OR [CHAR] a -
DUP 26. WITHIN IF
DBITSET ( d index -- d )
ELSE DROP THEN
REPEAT
67108863. D= NIP ;
A kdyz to zkompilujes z88dk nebo forthem, tak C je 6x pomalejsi.
Docela by me zajimalo i jak si vede C prekladac pro 6502. Z80 to trvalo 2m 51.61s a ten jeho kod uplne zkolaboval a jak ten kod pro sebe rozkouskoval na male casti a ty prevadel do asm tak je to kolikrat ze neco spocita a uklada na "stack" a pak to hned zase vraci do stejnych registru a pouzije znova...