مسابقه بین‌المللی کدنویسی مبهم به زبان سی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

مسابقه بین‌المللی کدنویسی مبهم به زبان سی (به انگلیسی: 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

منابع[ویرایش]

  1. "Summary of IOCCC Winners" (plain text). IOCCC. 2011. Retrieved 2011-11-12. 
  2. Palmer, Geoff (November 1, 2004). "Beyond the command line". PC World Magazine New Zealand. Retrieved 2013-04-07. 
  3. "Previous IOCCC Winners". IOCCC. 2011. Retrieved 2011-11-12. 
  4. "2001 Rules" (plain text). IOCCC. 2001. Retrieved 2011-11-12. 
  5. "2004 Rules" (plain text). IOCCC. 2004. Retrieved 2011-11-12. 
  6. "2011 Guidelines" (plain text). IOCCC. 2011. Retrieved 2011-11-12. 
  7. 5th International Obfuscated C Code Contest 1988 (westley.c). IOCCC.
  • مشارکت‌کنندگان ویکی‌پدیا، «International Obfuscated C Code Contest»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۳۰ آذر ۱۳۹۲).