國際C語言混亂代碼大賽 (The International Obfuscated C Code Contest)
因為需要閱讀一小段PERL寫的程式碼,找資料當中,發現PERL有舉辦『PERL難以閱讀程式碼大賽』。心裡第一個想到的是C語言也應該會有吧,找了一下,果然C語言也有這一類的比賽
“國際C語言混亂代碼大賽(IOCCC, The International Obfuscated C Code Contest)是一項國際編程賽事,從1984年開始,每年舉辦一次(1997年、1999年、2002年、2003年和2006年例外)。目的是寫出最有創意的最讓人難以理解的C語言代碼。”
WIKI
國際C語言混亂代碼大賽年度網頁:
http://www.ioccc.org/years.html
範例:
cdua/12th International Obfuscated C Code Contest
把這個網頁分享給友人看過後,大家開始亂翻IOCCC官網上的作品,因為能上官網的都是得獎作品。官網上的作品大都以固定的格式發佈,基本格式就是:
Makefile
程式碼(*.c)
作者提示(*.hint)
例如:
anonymous
‧Makefile
‧anonymous.c 程式碼
‧anonymous.hint 作者提示
最普遍看到的混亂技巧就是用程式碼排圖案,也被稱為ASCII ART,WIKI就有兩個範例,一個是算圓周率的程式把程式碼排成圓形,另一個就是飛行模擬器城是把程式排成飛機圖案
另外,有些混亂技巧並非顯而易見,需要靠『作者提示』比較容易看懂,因為有時候程式碼是藏在你想不到的地方 :P。例如:TY發現的biggar (1987),打開biggar.c只看到
就沒了,乍看之下這個東西怎麼可能編譯的過,後來不經意看到他的biggar.hint 寫著:
“cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" -DP="main(){X}"\ -DR="read(0,&c,1)" -DT="c!=015" -DW="while(C)I" -DX="char c;W" markb.c”
加上編譯時的參數,答案就很明顯了,真的是很惡搞,令人會心一笑
以下是一些節錄自國際C語言混亂代碼大賽 (The International Obfuscated C Code Contest)網頁的比賽作品
▼gavare (2004)
Makefile
gavare.c
gavare.hint
▼vik2 (2004)
Makefile
vik2.c
vik2.hint
▼kev (2001)
Makefile
kev.c
kev.hint
▼tomtorfs (1998)
Makefile
tomtorfs.c
tomtorfs.hint
▼dalbec (1996)
Makefile
dalbec.c
dalbec.hint
▼biggar (1987)
Makefile
biggar.c
biggar.hint
▼arachnid (2004)
Makefile
arachnid.c
arachnid.hint
arachnid.orig.c
arachnid.info 自定迷宮地圖
最後一個是迷宮程式,乍看之下,認為它只是把程式碼排成迷宮,印一些字串而已。友人NEO很熱誠地去編譯並且執行,發現它居然是一個迷宮遊戲!而且還可以透過參數送給迷宮程式新的迷宮地圖(arachnid.info),邊走邊畫,走到邊緣就換頁,功能完整!
編譯與執行 (NEO提供)
1. 用vi瀏覽程式碼
2. 編譯
3. 執行並送入迷宮地圖(arachnid.info)
某IOCCC得獎者去求職..
『主管您好,這是我寫過的CODE』(遞~)
(程式碼裡面都是飛機、大象、愛心、涼宮春日...)
0 意見:
張貼留言