Internationaler Wettbewerb für verschleierte C-Codes - International Obfuscated C Code Contest

Internationaler Wettbewerb für verschleierte C-Codes
IOCCC.png
Das Logo des IOCCC
Status Aktiv
Genre Codierwettbewerb
Beginnt 26. Dezember 2018 ( 2018-12-26 )
Endet 15. März 2019 ( 2019-03-15 )
Frequenz Jährlich
aktive Jahre 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015, 2018-heute
Eingeweiht 1984 ( 1984 )
Gründer Landon Curt Noll , Larry Bassel
Webseite www.ioccc.org

Der International Obfuscated C Code Contest (kurz IOCCC ) ist ein Computerprogrammierwettbewerb für den am kreativsten verschleierten C- Code . Es findet jährlich statt und wird als "die syntaktische Undurchsichtigkeit [Cs] feiernd" beschrieben. Der Gewinnercode für den 27. Wettbewerb im Jahr 2020 wurde im Juli 2020 veröffentlicht. Frühere Wettbewerbe fanden in den Jahren 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015 und 2018–2020 statt.

Die Einsendungen werden anonym von einer Jury bewertet. Der Bewertungsprozess ist in den Wettbewerbsrichtlinien dokumentiert und besteht aus Ausscheidungsrunden. Traditionell werden keine Angaben über die Gesamtzahl der Einsendungen für jeden Wettbewerb gemacht. Die Gewinnerbeiträge werden mit einer Kategorie wie "Worst Abuse of the C Preprocessor " oder "Most Erratic Behavior" ausgezeichnet und dann auf der offiziellen IOCCC-Website bekannt gegeben. Der Wettbewerb besagt, dass die Ankündigung auf der IOCCC-Website die Belohnung für den Gewinn ist.

Geschichte

Das IOCCC wurde 1984 von Landon Curt Noll und Larry Bassel gegründet, als sie bei der Genix-Portierungsgruppe von National Semiconductor beschäftigt waren. Die Idee für den Wettbewerb entstand, nachdem sie Notizen über schlecht geschriebenen Code verglichen hatten, den sie reparieren mussten, insbesondere die Bourne-Shell , die Makros verwendet, um die ALGOL 68- Syntax zu emulieren , und eine fehlerhafte Version von finger für BSD. Der Wettbewerb selbst war Gegenstand einer Quizfrage im Computer Bowl 1993. Nach einer fünfjährigen Pause ab 2006 kehrte der Wettbewerb 2011 zurück.

Im Vergleich zu anderen Programmierwettbewerben wird der IOCCC von Michael Swaine , dem Herausgeber des Dr. Dobb's Journal, als "nicht ganz so ernst" beschrieben .

Regeln

Jedes Jahr werden die Regeln des Wettbewerbs auf der IOCCC-Website veröffentlicht. Alle Materialien werden unter der Creative Commons-Lizenz BY-SA 3.0 Unported veröffentlicht. Die Regeln variieren von Jahr zu Jahr und werden mit einer Reihe von Richtlinien veröffentlicht, die versuchen, den Geist der Regeln zu vermitteln.

Das Hacken der Wettbewerbsregeln hat Tradition. — Landon Curt Noll, 2011

Die Regeln sind oft absichtlich mit Schlupflöchern geschrieben, die die Teilnehmer finden und missbrauchen sollten. Anmeldungen, die Schlupflöcher ausnutzen, können zu einer Anpassung der Regeln für den Wettbewerb des Folgejahres führen.

Verschleierung eingesetzt

Einträge beschäftigen oft seltsame oder ungewöhnliche Tricks, wie der C - Präprozessor verwenden , Dinge zu tun es nicht (in einigen Fällen zu tun , wurde entwickelt , „spektakulär“, so Dr. Dobbs , mit einem Eintrag eine 11-Bit - Erstellung ALU in dem C - Präprozessor ) oder die Vermeidung häufig verwendeter Konstrukte in der Programmiersprache C zugunsten viel obskurerer Möglichkeiten, dasselbe zu erreichen.

Zu den Beiträgen gehörten Quellcode, der so formatiert ist, dass er Bildern, Text usw. ähnelt, nach der Art der ASCII-Kunst , Präprozessor-Neudefinitionen, um Code schwerer lesbar zu machen, und selbstmodifizierender Code . In mehreren Jahren wurde ein Eintrag eingereicht, der eine Neudefinition einiger Regeln für das nächste Jahr erforderte. Dies gilt als hohe Ehre. Ein Beispiel ist das kürzeste selbstreproduzierende Programm der Welt . Der Eintrag war ein Programm, das seinen eigenen Quellcode ausgeben sollte und das null Bytes Quellcode hatte. Als das Programm ausgeführt wurde, gab es null Bytes aus, was seinem Quellcode entspricht.

In dem Bemühen, die Verschleierung auf die Spitze zu treiben, haben die Teilnehmer Programme entwickelt, die die Grenzen von C-Standards umgehen oder zu Konstrukten führen, die selten verwendete Codepfadkombinationen in Compilern auslösen. Infolgedessen werden einige der früheren Einträge möglicherweise nicht direkt in einem modernen Compiler kompiliert, und einige können zu Abstürzen führen.

Beispiele

Innerhalb der Codegrößenbeschränkung von nur wenigen Kilobytes haben die Teilnehmer komplizierte Dinge geschafft – ein Gewinner von 2004 stellte ein Betriebssystem heraus.

Toledo Nanoschach

Toledo Nanochess ist eine Schachengine, die vom mexikanischen Oscar Toledo Gutiérrez, einem fünfmaligen Gewinner des IOCCC, entwickelt wurde. Gemäß den IOCCC-Regeln ist sie 1255 Zeichen lang. Der Autor behauptet, dass es das kleinste in C geschriebene Schachprogramm der Welt ist.

Der Quellcode für Toledo Nanochess und andere Engines ist verfügbar. Da Toledo Nanochess auf Toledos Gewinnbeitrag vom 18. IOCCC (Best Game) basiert, ist es stark verschleiert .

Am 2. Februar 2014 veröffentlichte der Autor das Buch Toledo Nanochess: Der kommentierte Quellcode , das den vollständig kommentierten Quellcode enthält.

Mit Stand vom 7. Februar 2010 scheint es eine von nur zwei Schach-Engines zu sein, die in weniger als 2 Kilobyte C geschrieben sind und in der Lage sind, alle legalen Schachzüge zu spielen, zusammen mit Micro-Max des niederländischen Physikers HG Muller. Im Jahr 2014 wurde die 1-Kilobyte-Grenze von Super Micro Chess – einem Derivat von Micro-Max – mit insgesamt 760 Zeichen (Leerzeichen und Zeilenumbrüche eingeschlossen) durchbrochen. Es gibt auch eine kleinere Version von Toledos Engine, die Toledo Picochess , die aus 944 nicht leeren Zeichen besteht.

Quellcode-Auszug

B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){int t,o,L,E,d,O=e,N=-M*M,K
=78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v 0,0)>M;do{_ o=I[
p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$  "]:42;do{r=I[p+=C[l]-64]_!w|p
==w){g=q|p+a-S?0:I+S _!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){_ m=!(r-2&7))P G[1]=O,
K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L
+=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+
!(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O
[I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B
-O|i-n|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m?
*m=*g,*g=0:g?*g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;}
n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z&
!r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G
++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_
x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(*G=F))i=*G^8^y;}else v u,5);v u,
1);}}

Pi

Unten ist ein Eintrag von 1988, der pi berechnet, indem er seine eigene Fläche betrachtet :

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

(Dieser Eintrag wurde in K&R C geschrieben ; er funktioniert in ANSI C ohne einige Änderungen nicht richtig.)

Flugsimulator

Ein weiteres Beispiel ist der folgende Flugsimulator, der Gewinner des IOCCC 1998, wie er in Calculated Bets: Computers, Gambling, and Mathematical Modeling to Win (2001) aufgelistet und beschrieben ist und unten gezeigt wird:

#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); } }
Pittsburgh-Szenerie des Flugsimulators

Dieses Programm benötigt die folgende Befehlszeile auf einem Linux-System, um kompiliert zu werden:

cc banks.c -o banks -DIT=XK_Page_Up -DDT=XK_Page_Down \
	-DUP=XK_Up -DDN=XK_Down -DLT=XK_Left -DRT=XK_Right \
	-DCS=XK_Return -Ddt=0.02 -lm -lX11 -L/usr/X11R6/lib

Um die Binärdatei ( banks) ausführen zu können, muss diese .scper stdinEingabe mit einer Szeneriedatei versorgt werden:

 cat pittsburgh.sc | ./banks

Akari

Unten ist ein Eintrag aus dem Jahr 2011, der ein ASCII-Bild von Don, Yang herunterskaliert:

                                       /*
                                      +
                                     +
                                    +
                                    +
                                    [         >i>n[t
                                     */   #include<stdio.h>
                        /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;
                     */int/**/main(int/**/n,char**m){FILE*p,*q;int        A,k,a,r,i/*
                   #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%"   "d\n%d\40%d"/**/
                 "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**"
          "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*="
       "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?"
      "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/**
     */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"
     ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[
     i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]  !='\0'))?fopen(m[1],y+298):stdin;
      /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]    =<2<5<64;}-]-(m+;yry[rm*])/[*
       */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{     }[*/:fopen(m[2],d+14);if(!p||/*
       "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++"  <)<      ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)
    return+printf("Can "  "not\x20open\40%s\40"    ""       "for\40%sing\n",m[!p?1:2],!p?/*
  o=82]5<<+(+3+1+&.(+  m  +-+1.)<)<|<|.6>4>-+(>    m-        &-1.9-2-)-|-|.28>-w-?-m.:>([28+
 */"read":"writ");for  (   a=k=u= 0;y[u];  u=2    +u){y[k++   ]=y[u];}if((a=fread(b,1,1024/*
,mY/R*Y"R*/,p/*U*/)/*          R*/ )>/*U{  */   2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
*/sscanf(b,d,&k,& A,&           i,  &r)&&        !   (k-6&&k -5)&&r==255){u=A;if(n>3){/*
]&<1<6<?<m.-+1>3> +:+ .1>3+++     .   -m-)      -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
u++;i++;}fprintf   (q,    d,k,           u      >>1,i>>1,r);u  = k-5?8:4;k=3;}else
  /*]>*/{(u)=/*{   p> >u  >t>-]s                >++(.yryr*/+(    n+14>17)?8/4:8*5/
     4;}for(r=i=0  ;  ;){u*=6;u+=                (n>3?1:0);if    (y[u]&01)fputc(/*
      <g-e<t.c>h.a r  -(-).)8+<1.                 >;+i.(<)<     <)+{+i.f>([180*/1*
      (r),q);if(y[u   ]&16)k=A;if                               (y[u]&2)k--;if(i/*
      ("^w^NAMORI; {   I*/==a/*"                               )*/){/**/i=a=(u)*11
       &255;if(1&&0>=     (a=                                 fread(b,1,1024,p))&&
        ")]i>(w)-;} {                                         /i-f-(-m--M1-0.)<{"
         [ 8]==59/* */                                       )break;i=0;}r=b[i++]
            ;u+=(/**>>                                     *..</<<<)<[[;]**/+8&*
            (y+u))?(10-              r?4:2):(y[u]         &4)?(k?2:4):2;u=y[u/*
             49;7i\(w)/;}             y}ru\=*ri[        ,mc]o;n}trientuu ren (
             */]-(int)'`';}             fclose(          p);k= +fclose( q);
              /*] <*.na/m*o{ri{                       d;^w^;}  }^_^}}
               "   */   return  k-                -1+   /*\'   '-`*/
                     (   -/*}/   */0x01        );       {;{    }}
                            ;           /*^w^*/        ;}

Wenn das Programm mit seiner eigenen Quelle als Eingabe ausgeführt wird, ist das Ergebnis:

[root@host ~]# ./akari akari.c 
                   
                  
                       int
            *w,m,_namori=('n');
         #include<stdio.h>/*;hrd"%  dnd4%"*/
     /**/int(y),u,r[128*2/*{y}icuhya*rr*rya=
   */];void/**/i(){putchar(u);}int/**/main(/*
  "(n"l)?M5{YlcpvdluvKct[j skao(tve"t"oYRYR"
   */int(w),char**n){for(m  =256;--m;r[m]/*
   "<*]y+u>r>u+y-u-r+i+" )   ;>m.a.i+n>()/q*/
 =25<(31&( m -1))||64-(  m    &192)||2>w?m:(2+
m/*"*,/U//     R/)/U *  & /Y/0/U/=P &=/"*/)\
&16?m-13 : 13+     m)   ;u=+10 ;for(;(m=/*
 *>/()/{ p u t-s        +(yy*+  n1>7?/:*/
   getchar ())+1         ;i()   ){if(10/*
   "wNMR;{ I/=/"               )/{*/==u*1
    )i();                      if(m-10){
      u=/*>                  *./<)[;*/8*
      4;i();       }u=r[    m];}return(
       * *n/*{i            ;w; }_}
          ( -*/ *00    )    ;  }
[root@host ~]# ./akari akari.c > ./akari.small
[root@host ~]# ./akari ./akari.small 
         
      wm_aoi(n)
  /*ity,,[2*/{}char*y=
 (")M{lpduKtjsa(v""YY"
 "*yuruyuri") ;main(/*
/",U/  R)U*  Y0U= ="/\
*/){puts    (y+ 17/*
 "NR{I="       ){/=*
   =*         */);/*
   **/{      ;;}}
[root@host ~]# 
[root@host ~]# ./akari ./akari.small > ./akari.smaller
[root@host ~]# ./akari ./akari.smaller
   main
(){puts("Y"
"U RU YU "\
"RI"   )/*
 */   ;}
[root@host ~]#

Siehe auch

Hinweise und Referenzen

  1. ^ Palmer, Geoff (1. November 2004). "Jenseits der Befehlszeile" . PC-Welt Neuseeland . Archiviert vom Original am 10. Februar 2013 . Abgerufen 2013-04-07 .
  2. ^ "Vorherige IOCCC-Gewinner" . IOCCC. 2014. Archiviert vom Original am 2013-12-23 . Abgerufen 2014-01-08 .
  3. ^ a b c "Leitlinien 2015" (Klartext) . IOCCC. 2015 . Abgerufen 2015-11-20 .
  4. ^ "Häufig gestellte Fragen" . IOCCC . Abgerufen 2011-11-12 .
  5. ^ "Top-Execs können nicht richtig berechnen" . San Jose Mercury News , Kalifornien. 15. Mai 1993. p. 1A. Über Newsbank . (Abonnement erforderlich)
  6. ^ a b Jackson, Joab (15. November 2011). "Verschleierte Code-Wettbewerbsrückgaben" . PC-Welt . Abgerufen 2013-04-07 .
  7. ^ Swaine, Michael (1. Mai 2008). "Es muss einen Wettbewerb geben" . Dr. Dobbs Tagebuch . Abgerufen 2013-04-07 .
  8. ^ IOCCC-Homepage, Fußzeile und in jeder hint.txt-Datei
  9. ^ Spinellis, Diomidis (5. Oktober 2006). "Code-Finessing" . Dr. Dobbs Tagebuch . Abgerufen 2013-04-07 .
  10. ^ IOCCC 2004 – Bester Missbrauch von CPP IOCCC. Abgerufen 2013-04-08.
  11. ^ "smr.hint" (Klartext) . IOCCC. 1994 . Abgerufen 2006-09-16 .
  12. ^ "gavin.hint3" (Klartext) . IOCCC. 2004 . Abgerufen 2007-03-01 .
  13. ^ Toledo Nanochess und Toledo Picochess
  14. ^ Wer hat den 18. IOCCC gewonnen?
  15. ^ Nanochess teilweise enthüllte Version
  16. ^ Toledo Gutiérrez, Oscar (2014). Toledo Nanochess: Der kommentierte Quellcode . Lulu . ISBN 978-1-304-86437-6.
  17. ^ http://smmax.sourceforge.net/
  18. ^ Super Micro FIDE 760
  19. ^ "westley.c" , 5. Internationaler Wettbewerb umverschleiertenC-Code 1988, archiviert 2013-10-22 an der Wayback Machine ). IOCCC.
  20. ^ Kompilieren Sie mit gcc mit der folgenden Befehlszeile:gcc -traditional-cpp -o r r.codergcc -E r.c | sed 's/- -/--/g' > r2.c ; gcc -o r2 r2.c(Die Quelldatei istr.c)
  21. ^ a b c IOCCC-Flugsimulator . aerojockey.com. Abgerufen 2013-04-08.
  22. ^ Skiena, Steven (2001). Berechnete Wetten: Computer, Glücksspiel und mathematische Modellierung, um zu gewinnen . Die Mathematische Vereinigung von Amerika. S.  152 , 153. ISBN 978-0521009621.
  23. ^ "Index von /2011/akari" . www.iocc.org . Abgerufen 2020-09-18 .

Externe Links