Internationaler Wettbewerb um verschleierte C-Codes

Die International Obfuscated C Code Contest (in Französisch  : "International Competition C - Code dunkel") ist ein Wettbewerb der Programmierung seit jährlich statt 1984 ( mit Ausnahme von 1997, 1999, 2002 und 2003). Jedes Jahr gibt es mehrere Gewinnerbeiträge, und jedes Jahr fällt sie in eine Kategorie wie "Größter Missbrauch von Präprozessor C" oder "Inkonsistentestes Verhalten".

Ursprung

Die IOCCC wurden von Landon Curt Noll  (in) und Larry Bassel ins Leben gerufen . Sie sprachen über den abscheulichen Code, den sie in ihrer täglichen Arbeit beibehalten mussten. Sie beschlossen, einen Wettbewerb für den schlechtesten C-Code zu organisieren. Auf dem erlaubten Platz von nur wenigen Kilobyte schaffen es die Teilnehmer, komplizierte Dinge zu tun: Der Gewinner des Jahres 2004 stellte sich als Betriebssystem heraus.

Zitate

Einige Zitate der Gewinner und der Jury von 2004 sind:

Beispiele

Ein Beispieleintrag ist:

#define _ -F<00||--F-OO--; int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO() { _-_-_-_ _-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_ _-_-_-_ }

Dieses Programm berechnet pi, indem es auf seine eigene Oberfläche schaut. Ein genauerer Wert kann mit einem größeren Programm erhalten werden (dieser Eintrag wurde in C K & R geschrieben  ; so wie er ist, wird er nicht nach ANSI C kompiliert).

Ein weiteres Beispiel ist ein sehr geschickter Flugsimulator, der 1998 den IOCCC gewann:

#include <math.h> #include <sys/time.h> #include <X11/Xlib.h> #include <X11/keysym.h> double L ,o ,P ,_=dt,T,Z,D=1,d, s[999],E,h= 8,I, J,K,w[999],M,m,O ,n[999],j=33e-3,i= 1E3,r,t, u,v ,W,S= 74.5,l=221,X=7.26, a,B,A=32.2,c, F,H; int N,q, C, y,p,U; Window z; char f[52] ; GC k; main(){ Display*e= XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0)) ; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400, 0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6} ; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B= sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E *T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s ]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K *D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M; XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){ XEvent z; XNextEvent(e ,&z); ++*((N=XLookupKeysym (&z.xkey,0))-IT? N-LT? UP-N?& E:& J:& u: &h); --*( DN -N? N-DT ?N== RT?&u: & W:&h:&J ); } m=15*F/l; c+=(I=M/ l,l*H +I*M+a*X)*_; H =A*r+v*X-F*l+( E=.1+X*4.9/l,t =T*m/32-I*T/24 )/S; K=F*M+( h* 1e4/l-(T+ E*5*T*E)/3e2 )/S-X*d-B*A; a=2.63 /l*d; X+=( d*l-T/S *(.19*E +a *.64+J/1e3 )-M* v +A* Z)*_; l += K *_; W=d; sprintf(f, "%5d %3d" "%7d",p =l /1.7,(C=9E3+ O*57.3)%0550,(int)i); d+=T*(.45-14/l* X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47 *I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W* 179*v)/2312; select(p=0,0,0,0,&G); v-=( W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u )/107e2)*_; D=cos(o); E=sin(o); } }

Aspekte berücksichtigt

Einige bemerkenswerte Aspekte der Vorspeisen sind:

  • Die Form der Auflistung, die wie Bilder, Text usw. aussehen kann. ;;
  • Neudefinitionen des Präprozessors , um das Lesen des Codes zu erschweren;
  • Der Code ändert sich selbst  ;
  • Schlimmster Regelmissbrauch: Bei mehreren Gelegenheiten wurde ein Eintrag eingereicht, der so offensichtlich absurd war, dass er in den kommenden Jahren zu einer Neudefinition der Regeln führte. Es ist eine sehr große Ehre. Ein Beispiel ist das kleinste Programm, das sich selbst anzeigt. Die Eingabe war ein Programm mit der Größe Null, das beim Start null Bytes auf dem Bildschirm anzeigte (was eine kreative Verwendung des Makefiles erfordert , um fair zu sein).

Einige der vorherigen Einträge verursachen Compiler-Abstürze (insbesondere in Visual Studio ).

Anmerkungen und Referenzen

Anmerkungen

  1. Wenn Sie GCC verwenden , kompilieren Sie mit der folgenden Befehlszeile: gcc -E r.c | sed 's/- -/--/g' > r2.c ; gcc -o r2 r2.c(wenn die Quelldatei aufgerufen wird r.c).

Verweise

  1. http://www.ioccc.org/years.html#2004_burley
  2. http://www.ioccc.org/2004/burley.hint
  3. http://www.ioccc.org/years.html#2004_jdalbec
  4. http://www.ioccc.org/2004/jdalbec.hint
  5. http://www.ioccc.org/years.html#2004_vik2
  6. http://www.ioccc.org/2004/vik2.hint
  7. http://www.de.ioccc.org/years.html#1988_westley
  8. http://www.de.ioccc.org/1988/westley.c
  9. IOCCC-Flugsimulator .
  10. http://www.ioccc.org/years.html#1994_smr

Anhänge

Zum Thema passende Artikel

Externe Links