fbpx
维基百科

国际C语言混乱代码大赛

國際C語言混亂程式碼大賽(IOCCC, The International Obfuscated C Code Contest)是一項國際程式設計賽事。從1984年開始,该賽事每年舉辦一次(1997年、1999年、2002年、2003年和2006年例外)[1]。该賽事的目的是寫出最有創意和最讓人難以理解的C語言程式碼。

国际C语言混乱代码大赛
狀態活跃
類型程序设计赛事
时间2017年12月29日 (2017-12-29)-2018年3月15日 (2018-03-15)
举办频率每年
已舉辦年數1984–1996, 1998, 2000, 2001, 2004–2006, 2011-今
網站https://www.ioccc.org

参赛作品從線上提交开始,需要經過好幾回合的審核,以混亂程度和創造性评判代碼。通過最後一輪審核的作品會歸入特別的一類以示嘉獎,例如「最濫用C预處理器」或者「最古怪的行為」,並且發表在官方IOCCC網站。獲勝作品公告於IOCCC網站,以此作為獎賞。

歷史

IOCCC是由藍登·克特·諾爾(Landon Curt Noll)與拉里·貝索(Larry Bassel)在1984年受雇於國家半導體(National Semiconductor)的Genix程式移植事業群時開始的。比賽的點子來自于他們倆比較彼此修正的某些寫得很爛的程式碼筆記[2]

規則

每年比賽開始前,IOCCC的比賽規則會張貼在其網站上。規則每年不同,並且會附上一組指導方針,表達規則的精神。

這些規則通常有意地带有著精巧的漏洞,讓參賽者有所鼓勵去發現並濫用。比賽結果就是「軟體開發過程的諷刺體」。作品佔某些規則裡頭的漏洞之便者(不管它是否通過最後一輪審核)會造成下年度比賽規則的調整(雖然常常其他微妙的漏洞又會被裁判故意放水)。

被使用過的混亂規則

出于該賽事的本質,作品通常运用奇怪或者不尋常的語法竅門,如利用C预處理器去做不合设计本意的事、或者避免C程式語言正常使用的建構式,以用更曖昧難解的方式來達到同樣效果。舉例來說,下面是2004年得獎作品裡的引言:

  • 為了讓事情簡單點,得避免经过C预處理器以及其他刁鑽的敘述如「if」、「for」、「do」、「while」、「switch」、以及「goto」[3]
  • 人們還是不太確定這是否是个個有用的程式,不過這是IOCCC首見的核裂變反應[4]
  • 為何不用程式來把另一段程式藏在程式中?這在當下看起來一定相當合理[5]
  • 該程式在C预處理器裡實現了11位元的算數邏輯單元[6]
  • 人們找到自我递归超過650萬次的用来計算從1到1024間質數的程式[6]

許多卓著的貢獻包括:

  • 將程式碼排成圖形或文字,如同ASCII藝術
  • 使用預處理器讓代碼難以閱讀。
  • 自我修改代碼
  • 最大限度濫用規則。許多年來,某些參賽作品如此公然謬用規則導致IOCCC需要於下年度重新定義某些規則。不容置疑的這是一種高度榮譽。一個範例是世界最短的自我繁殖程式。該作品是為零位元長度的程式,如果執行列印零位元到螢幕上(這需要某具有創造力的對makefile應用才能讓它執行正確)[7]

该競賽有著自然而然在C語言標準規範邊際遊走的程式設計本質,或者觸發極少用到的編譯器編譯後代碼路徑。這導致許多過去的作品可能無法直接通過當代編譯器,並且某些可能甚至造成程式崩潰。

範例

在程式碼限定於區區幾千位元組條件下,參賽者得想盡辦法做複雜的事——例如某2004年大賽得獎者代碼實際上是個作業系統[8]

計算圓周率

下面是1988年參賽作品:透過自己佔的面積來計算圓周率[9],該作品是以K&R C寫成;代碼得做些小修改才能在ANSI C下執行[10]

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

飛行模擬器

另一個範例是下面這個靈巧的飛行模擬器,為1998年IOCCC得獎作品[11]

 #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); } } 

參見

參考資料

  1. ^ . [2007-12-15]. (原始内容存档于2013-10-22). 
  2. ^ 存档副本. [2008-10-19]. (原始内容于2006-08-11). 
  3. ^ IOCCC 2004 - Best Calculated Risk. [2007-12-15]. (原始内容于2007-09-27). 
  4. ^ IOCCC 2004 - Best abuse of the Periodic table. [2007-12-15]. (原始内容于2007-11-16). 
  5. ^ IOCCC 2004 - Best abuse of Indentation. [2007-12-15]. (原始内容于2007-11-16). 
  6. ^ 6.0 6.1 IOCCC 2004 - Best Abuse of CPP. [2007-12-15]. (原始内容于2007-11-16). 
  7. ^ smr.hint (純文字). IOCCC. 1994 [2006-09-16]. (原始内容于2006-09-09). 
  8. ^ gavin.hint (純文字). IOCCC. 2004 [2007-03-13]. (原始内容于2007-04-17). 
  9. ^ . [2007-12-15]. (原始内容存档于2013-10-22). 
  10. ^ 使用gcc情況下,以下面命令行進行編譯:gcc -traditional-cpp -o r r.c或者gcc -E r.c | sed 's/- -/--/g' > r2.c ; gcc -o r2 r2.c(原始碼檔案是r.c)
  11. ^ IOCCC Flight Simulator. [2007-12-15]. (原始内容于2007-12-16). 

外部連結

    国际c语言混乱代码大赛, 此條目翻譯品質不佳, 2014年6月14日, 翻譯者可能不熟悉中文或原文語言, 也可能使用了機器翻譯, 請協助翻譯本條目或重新編寫, 并注意避免翻译腔的问题, 明顯拙劣的翻譯請改掛, href, template, html, class, redirect, title, template, href, wikipedia, html, class, redirect, title, wikipedia, 提交刪除, 國際C語言混亂程式碼大賽, ioccc, international,. 此條目翻譯品質不佳 2014年6月14日 翻譯者可能不熟悉中文或原文語言 也可能使用了機器翻譯 請協助翻譯本條目或重新編寫 并注意避免翻译腔的问题 明顯拙劣的翻譯請改掛 a href Template D html class mw redirect title Template D d a a href Wikipedia CSD html G13 class mw redirect title Wikipedia CSD G13 a 提交刪除 國際C語言混亂程式碼大賽 IOCCC The International Obfuscated C Code Contest 是一項國際程式設計賽事 從1984年開始 该賽事每年舉辦一次 1997年 1999年 2002年 2003年和2006年例外 1 该賽事的目的是寫出最有創意和最讓人難以理解的C語言程式碼 国际C语言混乱代码大赛狀態活跃類型程序设计赛事时间2017年12月29日 2017 12 29 2018年3月15日 2018 03 15 举办频率每年已舉辦年數1984 1996 1998 2000 2001 2004 2006 2011 今網站https www ioccc org参赛作品從線上提交开始 需要經過好幾回合的審核 以混亂程度和創造性评判代碼 通過最後一輪審核的作品會歸入特別的一類以示嘉獎 例如 最濫用C预處理器 或者 最古怪的行為 並且發表在官方IOCCC網站 獲勝作品公告於IOCCC網站 以此作為獎賞 目录 1 歷史 2 規則 3 被使用過的混亂規則 4 範例 4 1 計算圓周率 4 2 飛行模擬器 5 參見 6 參考資料 7 外部連結歷史 编辑IOCCC是由藍登 克特 諾爾 Landon Curt Noll 與拉里 貝索 Larry Bassel 在1984年受雇於國家半導體 National Semiconductor 的Genix程式移植事業群時開始的 比賽的點子來自于他們倆比較彼此修正的某些寫得很爛的程式碼筆記 2 規則 编辑每年比賽開始前 IOCCC的比賽規則會張貼在其網站上 規則每年不同 並且會附上一組指導方針 表達規則的精神 這些規則通常有意地带有著精巧的漏洞 讓參賽者有所鼓勵去發現並濫用 比賽結果就是 軟體開發過程的諷刺體 作品佔某些規則裡頭的漏洞之便者 不管它是否通過最後一輪審核 會造成下年度比賽規則的調整 雖然常常其他微妙的漏洞又會被裁判故意放水 被使用過的混亂規則 编辑出于該賽事的本質 作品通常运用奇怪或者不尋常的語法竅門 如利用C预處理器去做不合设计本意的事 或者避免C程式語言正常使用的建構式 以用更曖昧難解的方式來達到同樣效果 舉例來說 下面是2004年得獎作品裡的引言 為了讓事情簡單點 得避免经过C预處理器以及其他刁鑽的敘述如 if for do while switch 以及 goto 3 人們還是不太確定這是否是个個有用的程式 不過這是IOCCC首見的核裂變反應 4 為何不用程式來把另一段程式藏在程式中 這在當下看起來一定相當合理 5 該程式在C预處理器裡實現了11位元的算數邏輯單元 6 人們找到自我递归超過650萬次的用来計算從1到1024間質數的程式 6 許多卓著的貢獻包括 將程式碼排成圖形或文字 如同ASCII藝術 使用預處理器讓代碼難以閱讀 自我修改代碼 最大限度濫用規則 許多年來 某些參賽作品如此公然謬用規則導致IOCCC需要於下年度重新定義某些規則 不容置疑的這是一種高度榮譽 一個範例是世界最短的自我繁殖程式 該作品是為零位元長度的程式 如果執行列印零位元到螢幕上 這需要某具有創造力的對makefile應用才能讓它執行正確 7 该競賽有著自然而然在C語言標準規範邊際遊走的程式設計本質 或者觸發極少用到的編譯器編譯後代碼路徑 這導致許多過去的作品可能無法直接通過當代編譯器 並且某些可能甚至造成程式崩潰 範例 编辑在程式碼限定於區區幾千位元組條件下 參賽者得想盡辦法做複雜的事 例如某2004年大賽得獎者代碼實際上是個作業系統 8 計算圓周率 编辑 下面是1988年參賽作品 透過自己佔的面積來計算圓周率 9 該作品是以K amp R C寫成 代碼得做些小修改才能在ANSI C下執行 10 define F lt 00 F OO int F 00 OO 00 main F OO printf 1 3f n 4 F OO OO F OO 飛行模擬器 编辑 另一個範例是下面這個靈巧的飛行模擬器 為1998年IOCCC得獎作品 11 include lt math h gt include lt sys time h gt include lt X11 Xlib h gt include lt X11 keysym h gt 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 lt 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 lt fabs W T r I E D P fabs D t D Z T a E gt K N 1e4 else q W K 4E2 2e2 C 2E2 4e2 K D N 1E4 amp amp 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 amp z N XLookupKeysym amp z xkey 0 IT N LT UP N amp E amp J amp u amp h DN N N DT N RT amp u amp W amp h amp 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 amp G v W F T 63 m I 086 m E 19 D 25 11 u 107e2 D cos o E sin o 參見 编辑混亂Perl代碼大賽 卑劣C代碼大賽 深奥的编程语言參考資料 编辑 国际C语言混乱代码大赛年度網頁 2007 12 15 原始内容存档于2013 10 22 存档副本 2008 10 19 原始内容存档于2006 08 11 IOCCC 2004 Best Calculated Risk 2007 12 15 原始内容存档于2007 09 27 IOCCC 2004 Best abuse of the Periodic table 2007 12 15 原始内容存档于2007 11 16 IOCCC 2004 Best abuse of Indentation 2007 12 15 原始内容存档于2007 11 16 6 0 6 1 IOCCC 2004 Best Abuse of CPP 2007 12 15 原始内容存档于2007 11 16 smr hint 純文字 IOCCC 1994 2006 09 16 原始内容存档于2006 09 09 gavin hint 純文字 IOCCC 2004 2007 03 13 原始内容存档于2007 04 17 5th International Obfuscated C Code Contest 1988 westley c 2007 12 15 原始内容存档于2013 10 22 使用gcc情況下 以下面命令行進行編譯 gcc traditional cpp o r r c或者gcc E r c sed s g gt r2 c gcc o r2 r2 c 原始碼檔案是r c IOCCC Flight Simulator 2007 12 15 原始内容存档于2007 12 16 外部連結 编辑IOCCC網站 取自 https zh wikipedia org w index php title 国际C语言混乱代码大赛 amp oldid 73334833, 维基百科,wiki,书籍,书籍,图书馆,

    文章

    ,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。