The International Obfuscated C Code Contest

Vegard Øye

////};)//main(////tang ,gnat////,ABBA~,0-0(avnz;)0-0,tang,raeN
,ABBA(niam&&)))2-]–tang-[kri – =raeN(&&0<)/
clerk/,noon,raeN){(!tang&&
noon≠-1&&(gnat&2)&&((raeN&&( getchar(noon+0)))||(1-raeN&&(trgpune(noon
)))))||tang&&znva(////tang ,tang,tang/|///((||)))0(enupgrt=raeN
(&&tang!(||)))0(rahcteg=raeN( &&1==tang((&&1-^)gnat=raeN(;;;)tang,gnat
,ABBA,0(avnz;)gnat:46+]552&)191+gnat([kri?0>]652%)191+gnat([kri=gnat
(&&)1-^gnat(&&)1& ABBA(!;)raeN,tang,gnat,ABBA(avnz&&0>ABBA{)raeN
,/
/);}znva(////tang,gnat,ABBA////(niam;}1-,78-,611-,321
-,321-,001-,64-,43-,801-,001-,301-,321-,511-,53-,54,44,34,24
,14,04,93,83,73,63,53,43,33,85,75,65,55,45,35,25,15,05,94,84
,74,64,0,0,0,0,0,0,/
/){ABBA=‘N’==65;(ABBA&&(gnat=trgpune
(0)))||(!ABBA&&(gnat=getchar(0-0)));(–tang&1)&&(gnat=‘n’⇐
gnat&&gnat⇐‘z’||‘a’⇐gnat&&gnat⇐‘m’||‘N’⇐gnat&&gnat⇐‘Z’
||‘A’⇐gnat&&gnat⇐‘M’?(((gnat&/
///31////,21,11,01,9,8
,7,6,5,4,3,2,1,62,52,42,/
/)+12)%26)+(gnat&////32////,
22,12,02,91,81,71,61,51,41{=]652[kri};)/
pry/)+65:gnat);main
(///*/tang^tang////,/* /,~///-/tang,gnat,ABBA-
0////(niam&&ABBA||))))tang( rahcteg&&1-1≤enrA(||))tang(
enupgrt&&1==enrA((&&)2&gnat(&& )1-^tang(&&ABBA!(;)85- =tang
(&&)‘a’=gnat(&&)1-==gnat(&&)4 ==ABBA(&&tang!;))))0(enupgrt=
gnat(&&)tang!((||)))0(rahcteg =gnat(&&tang((&&ABBA;;)1-‘A’=!
‘Z’=tang(&&ABBA{)enrA/
/);gnat ^-1&&znva(tang+1,gnat,1+gnat);
main(ABBA&2/
//
\/,tang,gnat ,ABBA////(avnz//);}///**/

Det ovenstående programmet, westley.c, er Brian Westley sitt vinnerbidrag til The International Obfuscated C Code Contest året 1989. Hvis det kjøres uten argumenter, kopierer det teksten man skriver inn. Hvis det kjøres med ett argument, utfører det ROT13-kryptering på teksten: Hver bokstav fra A til Z byttes ut med den som er 13 plasser frem. (ROT13 av «Hello world», for eksempel, er «Uryyb jbeyq». Utfører man ROT13 to ganger, ender man opp med utgangspunktet, så ROT13 av «Uryyb jbeyq» er «Hello world».) Kjøres det med to argumenter, «reverserer» det teksten, og kjøres det med tre, gjør det begge deler. (Se wesley.hint for mer informasjon.)

Det spesielle med programmet er imidlertid at kildekoden kan ROT13-krypteres, «reverseres» eller begge deler, og vil fortsatt kompilere. Hver nye «versjon» av programmet man får på denne måten, anvender en egen algoritme. Og siden programmets oppgave nettopp er å utføre ROT13-kryptering og «reversering», kan de ulike «versjonene» produseres ved å bruke programmet på seg selv:

westley < westley.c > ver0.c
westley 1  < westley.c > ver1.c
westley 1  2  < westley.c > ver2.c
westley 1  2  3  < westley.c > ver3.c

Sånn. Nå skal jeg gå og legge hodet mitt i bløt.