برای تأییدپذیری کامل این مقاله به منابع بیشتری نیاز است. |
مسابقه بینالمللی کدنویسی مبهم به زبان سی (به انگلیسی: International Obfuscated C Code Contest) یا به اختصار IOCCC یک مسابقه برنامهنویسی رایانه است که در آن هدف نوشتن خلاقانهترین کد به زبان سی و به شکلی مبهم و نامفهوم است. این مسابقه از سال ۱۹۸۴ تا ۱۹۹۶ به شکل سالانه برگزار شد و پس از آن هم در سالهای ۱۹۹۸، ۲۰۰۰، ۲۰۰۱، ۲۰۰۴، ۲۰۰۵، ۲۰۰۶، ۲۰۱۱، و ۲۰۱۲ برگزار شد.[۱] این مسابقه به صورت «جشنواره ابهام سینتکسی سی» تشریح شده است.[۲] برنده هجدهمین دوره و نوزدهمین دوره که در سال ۲۰۰۵ و ۲۰۰۶ برگزار شده بودند، در سال ۲۰۱۱ اعلام شد.[۳] تا قبل از سال ۲۰۰۴، کدهای نامزد در مسابقه به وسیله ایمیل ارسال میشدند،[۴] در سال ۲۰۰۴ که هفدهمین دوره مسابقات برگزار شد، کدها از طریق یک رابط مبتنی بر وب فرستاده شدند.[۵] نامزدها به شکل ناشناس توسط یک هیئت داوری بررسی میشوند. فرایند داوری در رهنمودهای مسابقه [۶]مستندسازی شده است و از دور حذفی تشکیل میشود. مرسوم است که هیچ اطلاعاتی در مورد تعداد شرکتکنندگان در مسابقه منتشر نشود. برندهها در چندین دسته مختلف اعلام میشوند، همانند «بهترین سوءاستفاده از پیشپردازنده سی» یا «نامنظمترین رفتار» یا همچنین «جالبترین خروجی» و سپس برندهها در وبسایت رسمی مسابقه اعلام میشوند.
کد زیر یکی از کدهای شرکتکننده در سال ۱۹۸۸ بود. این کد با نگاه کردن به مساحت خودش، عدد پی را محاسبه میکند.[۷]
#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
برای کامپایل کد بالا، باید دستور زیر اجرا شود:
gcc -traditional-cpp -o r r.c or gcc -E r.c | sed 's/- -/--/g' > r2.c ; gcc -o r2 r2.c
مثال پیش رو یک شبیهساز پرواز است که برنده سال ۱۹۹۸ بود.
#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); } }
برنامه بالا باید با دستور زیر کامپایل شود:
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