diff --git a/1992/albert/.gitignore b/1992/albert/.gitignore index aa262d580..f2de7f594 100644 --- a/1992/albert/.gitignore +++ b/1992/albert/.gitignore @@ -1,3 +1,4 @@ albert +albert.alt albert.orig prog.orig diff --git a/1992/albert/README.md b/1992/albert/README.md index 5890774c4..bf790cd69 100644 --- a/1992/albert/README.md +++ b/1992/albert/README.md @@ -42,8 +42,8 @@ Both albert and albert.orig loop without printing anything, although the first factor is 101 and is usually found in an instant. ``` -The [albert.c](albert.c) file is the fixed file, whereas the -[albert.alt.c](albert.alt.c) is the file before applying Leo Broukhis' fix. +The [albert.alt.c](albert.c) file is the fixed file, whereas the +[albert.c](albert.c) is the file before applying Leo Broukhis' fix. To compile this alternate version: @@ -65,8 +65,8 @@ a long. The Obfuscated version of the Horst algorithm. -This program will factor unlimited length numbers and print the\ -factors in ascending order. Numbers of one digit (e.g. 8)\ +This program will factor unlimited length numbers and print the +factors in ascending order. Numbers of one digit (e.g. 8) are rejected without notice. It quits as soon as there is at most one factor left, but that factor will not diff --git a/1992/albert/albert.alt.c b/1992/albert/albert.alt.c index 489f27cdf..d40c72c2b 100644 --- a/1992/albert/albert.alt.c +++ b/1992/albert/albert.alt.c @@ -1,152 +1,34 @@ #include -#include -#include -#include -#define new(PP) (PP *) malloc(sizeof(PP)) -typedef struct q { - jmp_buf ppp; - long qq; - struct q *P; - struct q *p; -} -PP; -PP *P; -int aaaaaa=2; -int aaaaaaa=1; - -long qqq; - - -aaAaaa(aa,aaa) -char *aa; -char *aaa; +main(argc,argv) +int argc; +char **argv; { - char aaaa = 0; - if ((((( aaa ))))) - { - aaaa = *aa; - *aa=0; - aa+=strlen(aa+1); - P =new(PP); - P->P=P; - P->p=P; - } + long arg[100]; + int i,j; + int base = 10; + int start = 0; + int end= strlen(argv[1]); - if ((((( !setjmp(P->ppp) ))))) + + for (i=0;i 2 ) { - if ((((( !isdigit(*aa) ))))) - longjmp(P->ppp,aaaaaaa); - else { - P->p->P = new(PP); - P->p->P->P = P; - P->p->P->p = P->p; - P->p = P->p->P; + while ( arg[end-1] == 0 ) { + printf("%d\n",base); + end--; + } + while ( arg[start] == 0 ) start +=1; + base += 1; - P->qq = *aa--; - P = P->p; - aaAaaa(aa,0); + for (i=start+1;istart;j--) + if ( (arg[j]-=arg[j-1])<0 ) + { + arg[j]+=base; + arg[j-1] -= 1; + } } - } else { - if ( !aaaa&&!*aa ) - longjmp(P->p->ppp,aaaaaaa); - - if ((((( (P->qq=aaaa)<10 &&! - (isdigit(aaaa)) ||! - (isdigit(*aa) ||! - *aa )))))) - { - fprintf(stderr,"Usage %c%s \n", - (aaa[0]?7:aaaa),aaa+!aaa[0]); - exit(1); - } - } } - - -ppPppp(pp,ppp) -PP **pp, *ppp; -{ - int aa; - if ((((( !(aa=setjmp(ppp->ppp))||aa==aaaaaa ))))) - { - if ((((( *pp==ppp ))))) - { - ppp = (*pp)->p; - - if ( qqq<47 ) return; - if ( ppp->qq!=48 ) return; - - while ( ppp->qq==48 ) - { - printf("%ld\n",qqq-45); - *pp = ppp; - ppp = ppp->p; - } - qqq -= 1; - longjmp(ppp->ppp,aaaaaaa); - } else { - PP *p; - - ppPppp(pp,ppp->p); - for (p=ppp;p!=*pp;p=p->p) - { - int qq=4; - if ((((( qqq<47 && - (qq=0,p->qq+=p->p->qq-96)>=48-qqq || - qqq>46 && - (p->qq-=p->p->qq)<0 ))))) - { - p->qq += qqq+qq; - if ( p->p==P && qqq<=46 ) - { - P->p->P = new(PP); - P->p->P->P = P; - P->p->P->p = P->p; - *pp = P = P->p = P->p->P; - P->qq = 48; - } - - p->p->qq+=qq==0; - p->p->qq-=qq!=0; - } - else - { - p->qq += 48; - } - } - if ( ppp->P==P ) longjmp(ppp->ppp,aaaaaaa); - } - } - else - { - qqq += 1; - - while (48==P->qq ) - { - P->P->p = P->p; - P = P->p->P = P->P; - - } - - if (ppp!=ppp->p->p ) - longjmp(ppp->ppp,aaaaaa); - else - { - printf("At most one remains\n"); - exit(0); - } - } -} - - -main(aaa,aaaa) -int aaa; -char **aaaa; -{ - aaAaaa(aaa==aaaaaaa?aaaa[0]:aaaa[1],aaaa[0]); - qqq = 39; - ppPppp(&P,P->p); -} - - diff --git a/1992/albert/albert.c b/1992/albert/albert.c index d40c72c2b..6ae0de6de 100644 --- a/1992/albert/albert.c +++ b/1992/albert/albert.c @@ -1,34 +1,152 @@ #include +#include +#include +#include +#define new(PP) (PP *) malloc(sizeof(PP)) +typedef struct q { + jmp_buf ppp; + long qq; + struct q *P; + struct q *p; +} +PP; -main(argc,argv) -int argc; -char **argv; +PP *P; +int aaaaaa=2; +int aaaaaaa=1; + +long qqq; + + +aaAaaa(aa,aaa) +char *aa; +char *aaa; { - long arg[100]; - int i,j; - int base = 10; - int start = 0; - int end= strlen(argv[1]); + char aaaa = 0; + if ((((( aaa ))))) + { + aaaa = *aa; + *aa=0; + aa+=strlen(aa+1); + P =new(PP); + P->P=P; + P->p=P; + } - - for (i=0;i 2 ) + if ((((( !setjmp(P->ppp) ))))) { - while ( arg[end-1] == 0 ) { - printf("%d\n",base); - end--; - } - while ( arg[start] == 0 ) start +=1; - base += 1; + if ((((( !isdigit(*aa) ))))) + longjmp(P->ppp,aaaaaaa); + else { + P->p->P = new(PP); + P->p->P->P = P; + P->p->P->p = P->p; + P->p = P->p->P; - for (i=start+1;istart;j--) - if ( (arg[j]-=arg[j-1])<0 ) - { - arg[j]+=base; - arg[j-1] -= 1; - } + P->qq = *aa--; + P = P->p; + aaAaaa(aa,0); } + } else { + if ( !aaaa&&!*aa ) + longjmp(P->p->ppp,aaaaaaa); + + if ((((( (P->qq=aaaa)<10 &&! + (isdigit(aaaa)) ||! + (isdigit(*aa) ||! + *aa )))))) + { + fprintf(stderr,"Usage %c%s \n", + (aaa[0]?7:aaaa),aaa+!aaa[0]); + exit(1); + } + } } + + +void ppPppp(pp,ppp) +PP **pp, *ppp; +{ + int aa; + if ((((( !(aa=setjmp(ppp->ppp))||aa==aaaaaa ))))) + { + if ((((( *pp==ppp ))))) + { + ppp = (*pp)->p; + + if ( qqq<47 ) return; + if ( ppp->qq!=48 ) return; + + while ( ppp->qq==48 ) + { + printf("%ld\n",qqq-45); + *pp = ppp; + ppp = ppp->p; + } + qqq -= 1; + longjmp(ppp->ppp,aaaaaaa); + } else { + PP *p; + + ppPppp(pp,ppp->p); + for (p=ppp;p!=*pp;p=p->p) + { + int qq=4; + if ((((( qqq<47 && + (qq=0,p->qq+=p->p->qq-96)>=48-qqq || + qqq>46 && + (p->qq-=p->p->qq)<0 ))))) + { + p->qq += qqq+qq; + if ( p->p==P && qqq<=46 ) + { + P->p->P = new(PP); + P->p->P->P = P; + P->p->P->p = P->p; + *pp = P = P->p = P->p->P; + P->qq = 48; + } + + p->p->qq+=qq==0; + p->p->qq-=qq!=0; + } + else + { + p->qq += 48; + } + } + if ( ppp->P==P ) longjmp(ppp->ppp,aaaaaaa); + } + } + else + { + qqq += 1; + + while (48==P->qq ) + { + P->P->p = P->p; + P = P->p->P = P->P; + + } + + if (ppp!=ppp->p->p ) + longjmp(ppp->ppp,aaaaaa); + else + { + printf("At most one remains\n"); + exit(0); + } + } +} + + +main(aaa,aaaa) +int aaa; +char **aaaa; +{ + aaAaaa(aaa==aaaaaaa?aaaa[0]:aaaa[1],aaaa[0]); + qqq = 39; + ppPppp(&P,P->p); +} + + diff --git a/thanks-for-fixes.md b/thanks-for-fixes.md index 9b69fdd52..c01076ad3 100644 --- a/thanks-for-fixes.md +++ b/thanks-for-fixes.md @@ -1331,6 +1331,15 @@ This is a complex change due to the way the program and Makefile generate additional tools. +## [1992/albert](1992/albert/albert.c) ([README.md](1992/albert/README.md])) + +Cody fixed this to compile with modern systems. Note that in 1996 a bug fix was +applied to the code, provided as the alt code as that version is not obfuscated. +Thus Cody's fixed applies to the original entry. The problems were that +`malloc.h` is not the correct header file now and a non-void (implicit int) +function returning without a value. The function was changed to return void. + + ## [1992/buzzard.1](1992/buzzard.1/buzzard.1.c) ([README.md](1992/buzzard.1/README.md)) Cody added a check for the right number of args, exiting 1 if not enough (2)