From: sources-request@mirror.tmc.com Submitted by: amdahl!chongo (Landon Curt Noll) Mod.sources: Volume 9, Issue 20 Archive-name: old.bad.code [ There's been lots of bad code posted to the net in the past; time to get some of it into the archives. :-) --r$ ] International Obfuscated C Code Contest Winners for 1984, 1985, 1986 This is a shell archive. Remove anything before this line, then unpack it by saving it in a file and typing "sh file". SEE THE README FILE FOR DETAILS ABOUT THESE SOURCES --------cut--------here--------- echo x - README cat > "README" << '//E*O*F README//' This shar file contains the winning entries of the International Obfuscated C Code Contest for the years 1984 thru 1986. Each contest starts near March 15. The official start consists of the posting of new contest rules in: comp.lang.c comp.unix.wizards For those people who do not read the above mentioned groups, a short note is also posted to mod.announce stating where the new rules have been posted. Rules may also be obtained by sending Email to (after March 15th): judge@nce stating where the new rules have been posted. Rules may also be obtained by sending Email to (after March 15th): judge@amdahl.com -or- {decwrl,sun,seismo,hplabs}!amdahl!judge The winners below are given to serve as examples. It should be noted that contest rules change from year to year, so some the previous winning entries would be disqualified under some rules. Since some obfuscation ideas get old (such as #define-ing something to death), some winning might be eliminated in the first judging round of another year. All this can be summed up in the phrase: "read the new rules before you submit an entry". NOTE: You are free to distribute/use these programs as long they are not used for profit, and as long author's name stays attached to the source code. Enjoy chongo /\cc/\ //E*O*F README// echo x - 1984 cat > "1984" << '//E*O*F 1984//' honorable mention: ------------------------------------------------------------------------------ int i;main(){for(;i["]>1) ;for(h= 0;h*h<= g;++h); --h;c=( (h+=g>h *(h+1)) -1)>>1; while(d <=g){ ++O;for (f=0;f< O&&d<=g ;++f)a[ b<<5|c] =d++,b+ =e;for( f=0;f Second place award: --------------------------------------------------------------------------- #defi 25; cmd 36; ...> Second place award: --------------------------------------------------------------------------- #define x = #define double(a,b) int #define char k['a'] #define union static struct extern int floor; double (x1, y1) b, char x {sizeof( double(%s,%D)(*)()) ,}; struct tag{int x0,*xO;} *main(i, dup, signal) { { for(signal=0;*k * x * __FILE__ *i;) do { (printf(&*"'\",x); /*\n\\", (*((double(tag,u)(*)())&floor))(i))); goto _0; _O: while (!(char < xO));/*} ; } */}}} ------------------------------------------------------------------------------- By: Dave Decot hplabs!hpda!hpdsd!decot First place award goes to: ------------------------------------------------------------------------ /* Portable between VAX11 && PDP11 */ short main[] = { 277, 04735, -4129, 25, 0, 477, 1019, 0xbef, 0, 12800, -113, 21119, 0x52d7, -1006, -7151, 0, 0x4bc, 020004, 14880, 10541, 2056, 04010, 4548, 3044, -6716, 0x9, 4407, 6, 5568, 1, -30460, 0, 0x9, 5570, 512, -30419, 0x7e82, 0760, 6, 0, 4, 02400, 15, 0, 4, 1280, 4, 0, 4, 0, 0, 0, 0x8, 0, 4, 0, ',', 0, 12, 0, 4, 0, '#', 0, 020, 0, 4, 0, 30, 0, 026, 0, 0x6176, 120, 25712, 'p', 072163, 'r', 29303, 29801, 'e' }; ------------------------------------------------------------------------------ Sjoerd Mullender Robbert van Renesse Both @ Vrije Universiteit, Amsterdam, the Netherlands. ..!decvax!mcvax!vu44!{sjoerd,cogito} //E*O*F 1984// echo x - 1985 cat > "1985" << '//E*O*F 1985//' Since people often request the previous year's winners at the start of the contest, I include the 1985 winners below. Please keep in mind that the rules have chanmged between 1985 and 1986. ------------------------------------------------------------------------ The following programs were judged good (bad? wierd?) enough to win awards. This year, rather than trying to rank the programs in order of obfuscatedness, we gave a single award in each of 4 categories and a grand prize. ________________________________________________________________________ 1. The most obscure program: (submitted by Lennart Augustsson ) #define p struct c #define q struct b #define h a->a #define i a->b #define e i->c #define o a=(*b->a)(b->b,b->c) #define s return a;}q* #define n (d,b)p*b;{q*a;p*c; #define z(t)(t*)malloc(sizeof(t)) q{int a;p{q*(*a)();int b;p*c;}*b;};q*u n a=z(q);h=d;i=z(p);i->a=u;i->b=d+1;s v n c=b;do o,b=i;while(!(h%d));i=c;i->a=v;i->b=d;e=b;s w n o;c=i;i=b;i->a=w;e=z(p);e->a=v;e->b=h;e->c=c;s t n for(;;)o,main(-h),b=i;}main(b){p*a;if(b>0)a=z(p),h=w,a->c=z(p),a->c->a=u,a->c->b=2,t(0,a);putchar(b?main(b/2),-b%2+'0':10);} ________________________________________________________________________ 2. The worst abuse of the C preprocessor: (submitted by Col. G. L. Sicherman ) #define C_C_(_)~' '&_ #define _C_C(_)('\b'b'\b'>=C_C>'\t'b'\n') #define C_C _|_ #define b * #define C /b/ #define V _C_C( main(C,V) char **V; /* C program. (If you don't * understand it look it */ up.) (In the C Manual) { char _,__; while (read(0,&__,1) & write((_=(_=C_C_(__),C)), _C_,1)) _=C-V+subr(&V); } subr(C) char *C; { C="Lint says "argument Manual isn't used." What's that mean?"; while (write((read(C_C('"'-'/*"'/*"*/))?__:__-_+ '\b'b'\b'|((_-52)%('\b'b'\b'+C_C_('\t'b'\n'))+1),1),&_,1)); } [ This program confused the C preprocessor so badly that it left some comments in the preprocessed version. Also, lint DID complain that "argument Manual isn't used". ] ________________________________________________________________________ 3. The strangest appearing program: (submitted by Ed Lycklama ) #define o define #o ___o write #o ooo (unsigned) #o o_o_ 1 #o _o_ char #o _oo goto #o _oo_ read #o o_o for #o o_ main #o o__ if #o oo_ 0 #o _o(_,__,___)(void)___o(_,__,ooo(___)) #o __o (o_o_<<((o_o_<<(o_o_< ) main(v,c)char**c;{for(v[c++]="Hello, world!\n)";(!!c)[*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c));**c=!c)write(!!*c,*c,!!**c);} ________________________________________________________________________ 5. The grand prize (most well-rounded in confusion): (submitted by Carl Shapiro ) #define P(X)j=write(1,X,1) #define C 39 int M[5000]={2},*u=M,N[5000],R=22,a[4],l[]={0,-1,C-1,-1},m[]={1,-C,-1,C},*b=N, *d=N,c,e,f,g,i,j,k,s;main(){for(M[i=C*R-1]=24;f|d>=b;){c=M[g=i];i=e;for(s=f=0; s<4;s++)if((k=m[s]+g)>=0&&k=16!=M[k]>=16)) a[f++]=s;if(f){f=M[e=m[s=a[rand()/(1+2147483647/f)]]+g];j=jb++?b[-1]:e;}P(" ");for(s=C;--s; P("_"))P(" ");for(;P("\n"),R--;P("|"))for(e=C;e--;P("_ "+(*u++/8)%2)) P("| "+(*u/4)%2);} [As submitted, this program was 3 lines (2 of defines and 1 of code). To make news/mail/etc. happy we split the last line into 7. Join them back without the newlines to get the original version] ---------------------------------------------------------------------- Congratulations to the winners (and anyone else who wasted their time creating such wierd programs). For your own enjoyment, you can figure out what these programs do. Or if this is too hard, compile and run them! All of these compiled and ran on the vax. Lint was even happy with most of the entries. //E*O*F 1985// echo x - 1986 cat > "1986" << '//E*O*F 1986//' 1986 International Obfuscated C Code Contest Winners We recommend that you first try to understand the program from just reading the source. If you are still confused try sending the source through the C Preprocessor (/lib/cpp). If you are still confused, we suggest you read the judges comments and run each program. Last, if you are still confused then you are not alone! =============================================================================== Best layout: Eric Marshall System Development Corporation, a Burroughs Company P.O. Box 517 Paoli, PA. 19301 [Ed: some compilers have problems with this, see Judges comments below] sdcrdcf!burdvax!eric {sjuvax,ihnp4,akgua,cadre}!psuvax1!burdvax!eric ------------------------------------------------------------------------------- extern int errno ;char grrr ;main( r, argv, argc ) int argc , r ; char *argv[];{int P( ); #define x int i, j,cc[4];printf(" choo choo\n" ) ; x ;if (P( ! i ) | cc[ ! j ] & P(j )>2 ? j : i ){* argv[i++ +!-i] ; for (i= 0;; i++ ); _exit(argv[argc- 2 / cc[1*argc]|-1<<4 ] ) ;printf("%d",P(""));}} P ( a ) char a ; { a ; while( a > " B " /* - by E ricM arsh all- */); } =============================================================================== =============================================================================== Worst abuse of the C preprocessor: Jim Hague University of Kent at Canterbury Canterbury, Kent UK ..mcvax!ukc!jmh ------------------------------------------------------------------------------- #define DIT ( #define DAH ) #define __DAH ++ #define DITDAH * #define DAHDIT for #define DIT_DAH malloc #define DAH_DIT gets #define _DAHDIT char _DAHDIT _DAH_[]="ETIANMSURWDKGOHVFaLaPJBXCYZQb54a3d2f16g7c8a90l?e'b.s;i,d:" ;main DIT DAH{_DAHDIT DITDAH _DIT,DITDAH DAH_,DITDAH DIT_, DITDAH _DIT_,DITDAH DIT_DAH DIT DAH,DITDAH DAH_DIT DIT DAH;DAHDIT DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT __DAH;_DIT==DAH_DIT DIT _DIT DAH;__DIT DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH DAH_;__DIT DIT DITDAH _DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT DIT' 'DAH,DAH_ __DAH DAH DAHDIT DIT DITDAH DIT_=2,_DIT_=_DAH_; DITDAH _DIT_&&DIT DITDAH _DIT_!=DIT DITDAH DAH_>='a'? DITDAH DAH_&223:DITDAH DAH_ DAH DAH; DIT DITDAH DIT_ DAH __DAH,_DIT_ __DAH DAH DITDAH DIT_+= DIT DITDAH _DIT_>='a'? DITDAH _DIT_-'a':0 DAH;}_DAH DIT DIT_ DAH{ __DIT DIT DIT_>3?_DAH DIT DIT_>>1 DAH:'\0'DAH;return DIT_&1?'-':'.';}__DIT DIT DIT_ DAH _DAHDIT DIT_;{DIT void DAH write DIT 1,&DIT_,1 DAH;} =============================================================================== =============================================================================== Best one liner: Jan Stein Chalmers Computer Society Gothenburg Sweden ..!mcvax!enea!chalmers!gustaf!cd-jan [The single line has been split to avoid any problems with E-mailers] ------------------------------------------------------------------------------- typedef char*z;O;o;_=33303285;main(b,Z)z Z;{b=(b>=0||(main(b+1,Z+1), *Z=O%(o=(_%25))+'0',O/=o,_/=25))&&(b<1||(O=time(&b)%0250600, main(~5,*(z*)Z),write(1,*(z*)Z,9)));} =============================================================================== =============================================================================== Most adaptable program: Jack Applin Hewlett-Packard Ft. Collins Colorado USA hplabs!hpfcdc!jack ------------------------------------------------------------------------------- cat =13 /*/ >/dev/null 2>&1; echo "Hello, world!"; exit * * This program works under cc, f77, and /bin/sh. * */; main() { write( cat-~-cat /*,'( */ ,"Hello, world!" , cat); putchar(~-~-~-cat); } /* ,)') end */ =============================================================================== =============================================================================== Most useful obfuscation: Walter Bright decwrl!sun!fluke!uw-beaver!entropy!dataio!bright ------------------------------------------------------------------------------- #include #define O1O printf #define OlO putchar #define O10 exit #define Ol0 strlen #define QLQ fopen #define OlQ fgetc #define O1Q abs #define QO0 for typedef char lOL; lOL*QI[] = {"Use:\012\011dump file\012","Unable to open file '\x25s'\012", "\012"," ",""}; main(I,Il) lOL*Il[]; { FILE *L; unsigned lO; int Q,OL[' '^'0'],llO = EOF, O=1,l=0,lll=O+O+O+l,OQ=056; lOL*llL="%2x "; (I != 1<<1&&(O1O(QI[0]),O10(1011-1010))), ((L = QLQ(Il[O],"r"))==0&&(O1O(QI[O],Il[O]),O10(O))); lO = I-(O<=' '&&l<='\~'; } =============================================================================== =============================================================================== Best simple task performed in a complex way: Bruce Holloway Digital Research, Inc. Monterey, CA USA (ucbvax!hplabs!amdahl!drivax!holloway) ------------------------------------------------------------------------------- #include "stdio.h" #define e 3 #define g (e/e) #define h ((g+e)/2) #define f (e-g-h) #define j (e*e-g) #define k (j-h) #define l(x) tab2[x]/h #define m(n,a) ((n&(a))==(a)) long tab1[]={ 989L,5L,26L,0L,88319L,123L,0L,9367L }; int tab2[]={ 4,6,10,14,22,26,34,38,46,58,62,74,82,86 }; main(m1,s) char *s; { int a,b,c,d,o[k],n=(int)s; if(m1==1){ char b[2*j+f-g]; main(l(h+e)+h+e,b); printf(b); } else switch(m1-=h){ case f: a=(b=(c=(d=g)<=e)for(b=g<c,q(z),u->b=z->b*10, w=u->c=f(),w->a=1,w->c=z-> c;}t*k;g(u)t*u;{t*z,*v,*p, *x;z=u->c,q(z),u->b=z->b,v =z->c,z->a=2,x=z->c=f(),x ->a=3,x->b=2,p=x->c=f(),p ->c=f(),p->c->a=1,p->c->c= v;}int i;h(u)t*u;{t*z,*v,* w;int c,e;z=u->c,v=z->c,q( v),c=u->b,e=v->b,u->b=z->b ,z->a=3,z->b=c+1,e+9>=c&&( q(z),e=z->b,u->b+=e/c,w=f( ),w->b=e%c,w->c=z->c,u->c= w);}int(*y[4])()={r,m,g,h}; char *sbrk();main(){t*e,*p,*o; o=f(),o->c=o,o->b=1,e=f(), e->a=2,p=e->c=f(),p->b=2, p->c=o,q(e),e=e->c,(void)write (1,"2.",2);for(;;e=e->c){q(e), e->b=write(1,&e->b["0123456789"], 1);}}t*f(){return i||(i=1000, k=(t*)sbrk(i*sizeof(t))),k+--i; }q(p)t*p;{(*y[p->a])(p);} =============================================================================== =============================================================================== Most illegible code: Michael H. Pawka Naval Ocean Systems Center San Diego, Ca 92152 DDN - PAWKA@NOSC-TECR.ARPA ------------------------------------------------------------------------------- #include "stdio.h" #define xyxx char #define xyyxx putchar #define xyyyxx while #define xxyyyx int #define xxxyyx main #define xyxyxy if #define xyyxyy '\n' xyxx *xyx [] = { "]I^x[I]k\\I^o[IZ~\\IZ~[I^|[I^l[I^j[I^}[I^n[I]m\\I]h", "]IZx\\IZx[IZk\\IZk[IZo_IZ~\\IZ~[IZ|_IZl_IZj\\IZj]IZ}]IZn_IZm\\IZm_IZh", "]IZx\\IZx[I^k[I\\o]IZ~\\IZ~\\I]|[IZl_I^j]IZ}]I^n[IZm\\IZm_IZh", "]IZx\\IZx[IZk\\IZk[IZo_IZ~\\IZ~_IZ|[IZl_IZj\\IZj]IZ}]IZn_IZm\\IZm]IZh", "]I^x[I]k\\IZo_I^~[I^|[I^l[IZj\\IZj]IZ}]I^n[I]m^IZh",'\0'};/*xyyxyxyxxxyxxxyy*/ xyxx *xyyx; xxyyyx xyyyx,xyyyyx,xyyyyyx=0x59,xyyyyyyx=0x29,/*yxxyxyyyxxyyyxyy*/ xxyx=0x68;xxxyyx(){xyyyyx=0;xyyyxx(xyx[xyyyyx]){xyyx=xyx[xyyyyx++];/*xyyyxxyx*/ xyyyxx(*xyyx){xyyyx= *xyyx++-xyyyyyx;xyyyxx(xyyyx--)xyyxx(*xyyx-xyyyyyyx);/*x*/ xyxyxy(*xyyx==xxyx)xyyxx(xyyxyy);*xyyx++;}}}/*xyxyxyyyyxxyxxxyyyxyyyxyxxyyy*/ =============================================================================== =============================================================================== The grand prize (most well-rounded in confusion): Larry Wall System Development Corporation Santa Monica California US of A [ed: modified to run on Sys V, see comments below] {allegra,burdvax,cbosgd,hplabs,ihnp4,sdcsvax}!sdcrdcf!lwall ------------------------------------------------------------------------------- #define _c(C)_ (C)&('|'+3):c_()(C)>>('\n'-3) __; /**/ #define C char* #define keyboard ",,B3-u;.(&*5., /(b*(1\036!a%\031m,,,,,\r\n" #define main(o,oo)oo(o){ #define _ ;case C #define c_(cc)c cc= #define C_(sand)_O(sand)witch o=keyboard; #define __ ;break; C ccc( cc) C cc; { C cccc= cc;int #ifndef lint #define keyboard "dijs QH.soav Vdtnsaoh DmfpaksoQz;kkt oa, -dijs" #endif c; main(;c_(=(*cc);*cc++)c,for); #define _O(s)s main(0xb+(c>>5),C_(s)) _'\v' :__ _'\f': main(c,C_(s)); _c(8098)_c(6055)_c(14779)_c(10682) #define O_(O)_O(O)stem(ccc( _c(15276)_c(11196)_c(15150) #define _C ;return