Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Международный запутанных C Code Contest (сокращенно IOCCC ) является компьютерным программированием конкурса на наиболее творчески запутанном C код . Он проводится ежегодно и описывается как «празднование синтаксической непрозрачности [C]». [1] Код победителя 27-го конкурса, проводившегося в 2020 году, был опубликован в июле 2020 года. [2] Предыдущие конкурсы проводились в 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015 и 2018 годах. –2020.

Работы анонимно оцениваются судейской коллегией. Процесс судейства задокументирован в руководстве по соревнованиям [3] и состоит из отборочных раундов. По традиции, информация об общем количестве заявок на каждый конкурс не разглашается. Победившие работы награждаются такой категорией, как «Наихудшее злоупотребление препроцессором C » или «Наиболее нестабильное поведение», а затем объявляются на официальном сайте IOCCC. В конкурсе говорится, что объявление на сайте IOCCC является наградой за победу.

История [ править ]

IOCCC был основан Лэндоном Куртом Ноллом и Ларри Басселем в 1984 году, когда он работал в группе портирования Genix компании National Semiconductor. Идея конкурса возникла после того, как они сравнили друг с другом заметки о каком-то плохо написанном коде, который им пришлось исправить, в частности, об оболочке Bourne , которая использовала макросы для эмуляции синтаксиса ALGOL 68 , и ошибочной версии finger для BSD. [4] Сам конкурс был темой викторины Computer Bowl 1993 года. [5] После пятилетнего перерыва, начавшегося в 2006 году, конкурс вернулся в 2011 году. [6]

По сравнению с другими соревнованиями по программированию, Майкл Суэйн , редактор журнала доктора Добба, охарактеризовал IOCCC как «не все так серьезно» . [7]

Правила [ править ]

Ежегодно правила конкурса публикуются на сайте IOCCC. Все материалы опубликованы под лицензией Creative Commons BY-SA 3.0 Unported. [8] Правила меняются из года в год и публикуются вместе с набором руководящих принципов, которые пытаются передать дух правил.

«Взломать правила конкурса - традиция». Лэндон Курт Нолл, 2011. [6]

Правила часто намеренно написаны с лазейками, которые участники поощряют находить и злоупотреблять. [ необходима цитата ] Заявки, в которых используются лазейки, могут привести к корректировке правил конкурса следующего года. [ необходима цитата ]

Используемые обфускации [ править ]

В записях часто используются странные или необычные приемы, такие как использование препроцессора C для выполнения вещей, для которых он не предназначен, или отказ от часто используемых конструкций в языке программирования C в пользу гораздо более неясных способов достижения того же результата. Два победителя конкурса составили список простых чисел с помощью C препроцессор «эффектно», по словам д - ра Доббс . [9] Вот некоторые цитаты победителей 2004 года:

Для простоты я избегал препроцессора C и сложных операторов, таких как «if», «for», «do», «while», «switch» и «goto». [10]

Мы все еще не уверены, полезна ли эта программа, но это первое деление атома, которое мы видели в IOCCC. [11]

Почему бы не использовать программу, чтобы скрыть другую программу в программе? В то время это должно было казаться разумным. [12]

Программа реализует 11-битный ALU в C препроцессора . [13]

Я обнаружил, что при вычислении простых чисел до 1024 программа включает себя более 6,8 миллионов раз. [13]

Вклады включают исходный код, отформатированный так, чтобы он напоминал изображения, текст и т. Д., По образцу искусства ASCII , переопределения препроцессора, чтобы код было труднее читать, и самомодифицирующийся код . Через несколько лет была представлена ​​запись, в которой требовалось новое определение некоторых правил на следующий год. [ необходима цитата ] Это считается большой честью. Примером может служить самая короткая самовоспроизводящаяся программа в мире . Запись представляла собой программу, предназначенную для вывода собственного исходного кода и имевшую нулевые байты исходного кода. Когда программа запускалась, она распечатывала нулевые байты, что эквивалентно ее исходному коду. [14]

Стремясь довести обфускацию до крайности, участники создали программы, которые обходят границы стандартов C или приводят к конструкциям, которые запускают редко используемые комбинации кодовых путей в компиляторах. В результате некоторые из прошлых записей могут не скомпилироваться непосредственно в современном компиляторе, а некоторые могут вызвать сбои.

Примеры [ править ]

При ограничении размера кода всего в несколько килобайт конкурсантам удавалось делать сложные вещи - победителем 2004 года оказалась операционная система. [15]

Толедо Наночесс [ править ]

Toledo Nanochess - это шахматный движок, разработанный мексиканцем Оскаром Толедо Гутьерресом, пятикратным победителем IOCCC. В соответствии с правилами IOCCC, он составляет 1255 символов. Автор утверждает, что это самая маленькая шахматная программа в мире, написанная на C.

Исходный код для Toledo Nanochess и других движков доступен. [16] Поскольку Toledo Nanochess основан на победившей Толедо записи на 18-м IOCCC (Лучшая игра [17] ), он сильно запутан . [18]

2 февраля 2014 года автор опубликовал книгу Toledo Nanochess: The commentated source code , которая содержит полностью прокомментированный исходный код. [19]

По состоянию на 7 февраля 2010 года это один из двух шахматных движков, написанных на языке C менее чем на 2 килобайта и способных выполнять полные разрешенные шахматные ходы, наряду с Micro-Max, созданным голландским физиком Х. Г. Мюллером. В 2014 году барьер в 1 килобайт был преодолен с помощью Super Micro Chess [20] - производной от Micro-Max - всего 760 символов (включая пробелы и символы новой строки). [21] Существует также уменьшенная версия движка Толедо , Toledo Picochess , состоящая из 944 непустых символов.

Отрывок из исходного кода

B , i , y , u , b , I [ 411 ], * G = I , x = 10 , z = 15 , M = 1e4 ; X ( w , c , h , e , S , s ) { int  t , o , L , E , d , O = e ,N = - M * M , K = 78 - h << x , p , * g , n , * m , A , q , r , C , J , a = y ? - x : x ; у ^ = 8 ; G ++ ; d = w || s && s > = h && v 0 , 0 ) > М ; сделать { _  o = I [ p = O ]) { q = o & z ^ y  _  q < 7 ) { A = q - & 2 ? 8 : 4 ; C = o -9 & z ? q [ "&. $" ] : 42 ; сделать { r = I [p + = C [ 1 ] -64 ] _ ! w | p == w ) { g = q | р + а - S ? 0 : I + S  _ ! r & ( q | A < 3 || g ) || ( r + 1 & z ^ y ) > 9 && q | А> 2 ) { _  m =! ( г -2 и 7 )) P  G [ 1 ] = O , K ; J = n = o & z ; E = I [ p - a ] & z ; t = q | Е- 7 ? п :( п + = 2 , 6 ^ у ); Z  n<= t ) { L = r ? l [ r & 7 ] * 9-189 - h - q : 0  _  s ) L + = ( 1 - q ? l [ p / x + 5 ] - l [ O / x + 5 ] + l [ p % x + 6 ] * - ~! Q -l [ O % x + 6 ] + o / 16 * 8 : !! m * 9 ) + ( q ? 0 :! ( I [ p -1 ] ^ n ) + ! ( I [ p + 1 ] ^ n ) + l [ n & 7 ] * 9-386 + !! g * 99 +( A < 2 )) +! ( E ^ y ^ 9 ) _  s > h || 1 < s & s == h && L > z | г ) { p [ I ] = n , O [ I ] = m ? * g = * m , * m = 0 : g ? * g = 0: 0 ; L - = X ( s > h | d ? 0 : p , L - N , h + 1 , G [ 1 ], J = q | A > 1 ? 0 : p , s ) _ ! ( ч || с -1 | B - O | i - n | p -б | L <- M )) P  y ^ = 8 , u = J ; J = q -1 | A < 7 || м ||! s | d | г | о < z || v  0 , 0 ) > М ; O [ I ] = o ; p [ I ] = r ; м ?* m = * g , * g = 0 : g ? * g = 9 ^ y : 0 ;} _  L > N ) { * G = O  _  s > 1 ) { _  h && c - L < 0 ) P  L  _ ! з ) i = n , B = O , b = p;} N = L ;} n + = J || ( g = I + p , m = p < O ? g -3 : g + 2 , * m < z | m [ O - p ] || I [ p + = p - O ]);}}}} Z ! r & q > 2 || ( р =O , q | A > 2 | o > z & ! r && ++ C * - A ));}}} Z ++ O > 98 ? О = 20 : е - О ); П  Н + М * M && N > - K + 1924 | г ? N : 0 ;} main () { Z ++ B < 121) * G ++ = B / x % x < 2 | B % x < 2 ? 7 : Ч / х и 4 ? 0 : * l ++ & 31 ; Z  B = 19 ) { Z  B ++ < 99 ) putchar ( B % x ? L [ B [ I ] | 16 ] : x )_ x - ( B = F )) { i = I [ B + = ( x - F ) * x ] & z ; б = F ; б + = ( х - F ) * х ; Z  x - ( * G = F )) i = * G ^ 8 ^ y ;} иначе  v  u ,5 ); v  u , 1 );}}

Пи [ править ]

Ниже приводится запись 1988 года, в которой число Пи рассчитывается исходя из собственной площади : [22]

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

(Эта запись была написана на K&R C ; она некорректно работает в ANSI C без некоторых изменений. [23] )

Симулятор полета [ править ]

Другим примером является следующий имитатор полета, победитель IOCCC 1998 г. [24], как указано и описано в « Расчетные ставки: компьютеры, азартные игры и математическое моделирование на победу» (2001) [25] и показано ниже:

#include  <math.h>#include  <sys / time.h>#include  <X11 / Xlib.h>#include  <X11 / keysym.h> двойной  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 ;  Окно  z ;  char  f [ 52 ]  ;  GC k ;  main () {  Показать * е =  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 );  для ( XMapWindow ( e , z )  ;;  T =sin ( O )) {  struct  timeval  G = {  0 , dt * 1e6 } ;  К =  cos ( j );  N = 1e4 ;  M + =  H * _ ;  Z = D * K ;  F + = _ * P ;  г = Е * К ;  W = cos (  O );  т = К* Вт ;  Н = К * Т ;  O + = D * _ * F /  K + d / K * E * _ ;  B = грех ( j );  а = В * Т * D - Е * W ;  XClearWindow ( e , z );  т = Т * Е +  Д * В* Вт ;  j + = d * _ * D - _ * F * E ;  P = W * E * B - T * D ;  для  ( o + = ( I = D * W + E * T * B , E * d / K  * B + v + B / K * F* D ) * _ ;  р < у ;  ) {  T = p [ s ] + i ;  E = c - p [ w ];  D = n [ p ] - L ;  К = Д * м - В * Т - Н * Е ;  если ( p  [ n ] + w [  p] + p [ s ] ==  0 | K  < фабс ( W = T * r - I * E  + D * P )  | fabs ( D = t  * D + Z  * T - a  * E ) >  K ) N = 1e4 ;  иначе {  q = W / K  * 4E2+ 2e2 ;  С =  2Е2 + 4е2 /  К  * D ;  N -1E4 &&  XDrawLine ( e  , z , k , N  , U , q , C );  N = q ;  U = C ;  }  ++ p ;  }  L + = _ *  ( X * t  + P * M + m* л );  Т = Х * Х +  1 * 1 + М  * М ;  XDrawString ( e , z , k  , 20 , 380 , f , 17 );  D = v / l * 15 ;  я + = ( В  * л - М * г  - Х * Z ) * _ ;  за(;  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 / л ;  c + = ( I = M /  l , l * H  + I * M + a * X ) * _ ;  H  = А* r + v * X - F * l + (  E = 0,1 + X * 4,9 / l , t  = T * m / 32 - I * T / 24  ) / S ;  К = F * M + (  h *  1e4 / l - ( T +  E * 5 * T* E ) / 3e2  ) / S - X * d - B * A ;  а = 2,63  / л * д ;  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 * ( 0,45 -14 / l *  X - a * 130 - Дж *  0,14) * _ / 125e2 + F * _ * v ;  P = ( T * ( 47  * I - m *  52 + E * 94  * D - t * 0,38 + u * 0,21 * E )  / 1e2 + W *  179 * v ) / 2312 ;  выберите ( p = 0, 0 , 0 , 0 , & G );  v - = (  W * F - T * ( 0,63 * m - I * .086 + m * E * 19 - D * 25 -, 11 * u  ) / 107e2 ) * _ ;  D = cos ( o );  Е = грех ( о ); }  }
Питтсбургский пейзаж из симулятора полета

Для компиляции этой программы требуется следующая командная строка в системе Linux: [24]

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

Чтобы запустить двоичный файл ( banks), он должен быть снабжен .scфайлом senery через stdinввод: [24]

кот pittsburgh.sc | ./банки

Акари [ править ]

Ниже приведена запись 2011 года, в которой выполняется субдискретизация изображения ascii Дона, Янга: [26]

 / *  +  +  +  +  [> i> n [t  * /  # include < stdio . h >  / * 2w0,1m2,] _ <n + a m + o> r> i> => (['0n1'0) 1;  * / int / ** / main ( int / ** / n , char ** m ) { ФАЙЛ * p , * q ; int  A, k , a , r , i / *  #uinndcelfu_dset <rsitcdti_oa.nhs> i / _ * / ; char * d = "P%"  "d \ n % d \ 40 % d" / ** /  " \ n % d \ n \ 00 wb +" , b [ 1024 ], y [] = "yuriyurarararayuruyuri * daijiken ** akkari ~ n ** "  " / y * u * k / riin <ty (uyr) g, aur, arr [a1r2a82 * y2 * / u * r {uyu} riOcyurhiyua ** rrar + * arayra * = "  " yuruyurwiyuriyurara'rariayuruyuriyuriyu > рарарараюруй9урию3риюрар_аБрМаПроаВы ^? " "*] / f]`; hvroai <dp / f * i * s / <ii (f) a {tpguat <cahfaurh (+ uf) a; f} vivn + tf / g * `* w / jmaa + i` ni (" / **  * / " i + k [> + b + i> ++ b ++> l [rb » ; int / ** / u ; for ( i = 0 ; i < 101 ; i ++ ) y [ i * 2 ] ^ = "~ hktrvg ~ dmG * eoa +% squ # l2"  ": (wn \" 1l)) v? wM353 {/ Y; lgcGp`vedllwudvOK`cct ​​~ [| ju {stkjalor (stwvne \ " gt \ " йогЮРУЮРИ"[  я ] ^ у [ я *2 + 1 ] ^ 4 ; / *! * / p = ( n > 1 && ( m [ 1 ] [ 0 ] - '-' || m [ 1 ] [ 1 ]  ! = '\ 0' )) ? fopen ( m [ 1 ], y + 298 ) : стандартный ввод ;  / * y / riynrt ~ (^ w ^)],] c + h + a + r + * + * [n>) + {> f + o <r <(- m] = <2 <5 <64;} -] - (m +; yry [rm *]) / [*  * / q = (п < 3 ||! ( м [ 2 ] [ 0 ] - '-' || м [ 2 ] [ 1 ])) ? stdout  / *] {} [* / : fopen ( m [ 2 ], d + 14 ); if ( ! p || / *  "] << * -]> y ++> u >> + r> + u +++ y> - u --- r> ++ i +++" <) <; [> - m -.> a -.- i. ++ n.> [(w) * / ! q / ** / )  return + printf ( "Можно" "нет\ x20 open \ 40 % s \ 40 "  " "  " for \ 40 % sing \ n " , m [ ! p ? 1 : 2 ] ,! p ? / *  o = 82] 5 << + (+ 3 + 1 + &. (+ m + - + 1.) <) <| <| .6> 4> - + (> m- & -1.9-2 -) - | - | .28> -w -? - m. :> ([28+ * / "читать" : "писать" ); for  (  a = k = u =  0 ; y [ u ]; u = 2  + u ) {y [ k ++  ] = y [ u ];} if (( a = fread ( b , 1 , 1024 / * , mY / R * Y "R * / , p / * U * / ) / * R * /  ) > / * U {* /  2 &&  b / * Y * / [ 0 ] / * U * / == 'P'  && 4 == / * "y * r / y) r \} * / sscanf ( b , d , & k ,&  A , &  i ,  & r ) &&  !  ( k -6 && k  -5 ) && r == 255 ) { u = A ; if ( n > 3 ) { / * ] & <1 <6 <? <m .- + 1> 3> +: + .1> 3 +++. -m-) - ;. u + = ++. 1 <0 <<; f <o <r <(.; <([m (=) / 8 * / u ++ ; i ++ ;} fprintf  ( q ,  d , k ,  u  >>1 ,i >> 1 , r ); и  =  к -5 ? 8 : 4 ; к = 3 ;} еще  / *]> * / {( у ) = / * {р>> и> т> -] S> ++ (yryr * /. + (  п + 14 > 17 ) ? 8 / 4 : 8 * 5 /  4 ;} для ( г = я = 0  ;  ;) { U * =6 ; u + =  ( n > 3 ? 1 : 0 ); if  ( y [ u ] & 01 ) fputc ( / *  <ge <tc> ha r - (-).) 8+ <1. >; + i. (<) <<) + {+ if> ([180 * / 1 *  ( r ), q ); если ( y [ u  ] & 16 ) k = A ; если  ( y [ u ] & 2) к - ; if ( i / *  ("^ w ^ NAMORI; {I * / == a / *") * / ) { / ** / i = a = ( u ) * 11  & 255 ; if ( 1 && 0 > =  ( a =  fread ( b , 1 , 1024 , p )) &&  ")] i> (w) -;} {/ if - (- m - M1-0.) <{"  [  8 ]== 59 / * * /  ) перерыв ; я = 0 ;} г = Ь [ я ++ ]  ; u + = ( / ** >> * .. </ <<<) <[[;] ** / + 8 & *  ( y + u )) ? ( 10 -  r ? 4 : 2 ) : ( y [ u ]  & 4 ) ? ( к ? 2 : 4) : 2 ; u = y [ u / *  49; 7i \ (w) /;} y} ru \ = * ri [, mc] o; n} trientuu ren (  * / ] - ( int ) '' ' ;}  fclose (  p ); k =  + fclose (  q );  / *] <*. na / m * o {ri {d; ^ w ^;}} ^ _ ^}}  "* /  return  k -  -1 +  / * \ ' '-` * /  (  - / *} / * / 0x01  );  {; {  }}  ; / * ^ w ^ * /  ;}

Если вы запустите программу, используя ее собственный источник в качестве входных данных, вы получите:

[ root @ host  ~ ] #  . / акари  акари . c    int  * w , m , _namori = ( 'п' );  #include <stdio.h> / *; hrd "% dnd4%" * / / ** / int ( y ), u , r [ 128 * 2 / * {y} icuhya * rr * rya =  * / ]; void / ** / i () { putchar ( u );} int / ** / main ( / *  "(n" l)? M5 {YlcpvdluvKct [j skao (tve "t" oYRYR "  * / int ( w ) , char ** n ) { for ( m  = 256 ; - m ; r [ m ] / * "<*] y + u> r> u + yu-r + i +");> mai + n> () / q * /  = 25 < ( 31 & (  m  -1 )) || 64 - (  м  & 192 ) || 2 > ш ? m :( 2 + m / * "*, / U // R /) / U * & / Y / 0 / U / = P & = /" * / ) \ & 16 ? м- 13  :  13 +  м )  ; u = + 10  ; для (; ( m = / **> / () / {пу ts + (yy * + n1> 7? /: * /  getchar  ()) + 1  ; i ()  ) { if ( 10 / *  "wNMR; {I / = /") / {* / == u * 1  ) i ();  если ( m -10 ) {  u = / *> *. / <) [; * / 8 *  4 ; я ();  } u = r [  m ];} return (  *  * n / * {i; w;} _}  (- * / * 00  )  ;  } [ root @ host  ~ ] #  . / акари  акари . c  >  . / акари . small [ root @ host  ~ ] #  . / акари  . / акари . маленький   wm_aoi ( n )  / * ity ,, [2 * / {} char * y =  ( ") M {lpduKtjsa (v" "YY"  "* yuruyuri" )  ; main ( / * / ", U / R) U * Y0U = =" / \ * / ) { добавляет  ( y +  17 / * "NR {I =") {/ = *  = * * / ); / *  ** / {  ;;}} [ root @ host  ~ ] #  [ root @ host  ~ ] #  . / Акари . / акари . маленький  >  . / акари . меньше [ root @ host  ~ ] #  . / акари  . / акари . меньше  main () { put ( "Y" "U RU YU" \ "RI"  ) / * * /  ;} [ root @ host  ~ ] #

См. Также [ править ]

  • Запутанный конкурс Perl
  • Закулисный конкурс Си
  • Эзотерический язык программирования

Примечания и ссылки [ править ]

  1. Палмер, Джефф (1 ноября 2004 г.). «За пределами командной строки» . Журнал PC World Новая Зеландия . Архивировано из оригинального 10 февраля 2013 года . Проверено 7 апреля 2013 .
  2. ^ «Предыдущие победители IOCCC» . IOCCC. 2014. Архивировано из оригинала на 2013-12-23 . Проверено 8 января 2014 .
  3. ^ «Рекомендации 2015 г.» (простой текст) . IOCCC. 2015 . Проверено 20 ноября 2015 .
  4. ^ "FAQ" . IOCCC . Проверено 12 ноября 2011 .
  5. ^ «Top Execs не могут правильно вычислить» . Сан-Хосе Меркьюри Ньюс , Калифорния. 15 мая 1993 г. Стр. 1А. Через Newsbank . (требуется подписка)
  6. ^ a b Джексон, Иоав (15 ноября 2011 г.). «Возврат в рамках конкурса скрытого кода» . PCWorld . Проверено 7 апреля 2013 .
  7. ^ Суэйн, Майкл (1 мая 2008). «Должен быть конкурс» . Журнал доктора Добба . Проверено 7 апреля 2013 .
  8. ^ Домашняя страница IOCCC, нижний колонтитул и в каждом файле hint.txt
  9. Spinellis, Diomidis (5 октября 2006 г.). «Уловка кода» . Журнал доктора Добба . Проверено 7 апреля 2013 .
  10. ^ IOCCC 2004 - Лучший расчетный риск . IOCCC. Проверено 8 апреля 2013.
  11. ^ IOCCC 2004 - Лучшее злоупотребление периодической таблицей . IOCCC. Проверено 8 апреля 2013.
  12. ^ IOCCC 2004 - Лучшее злоупотребление отступом . IOCCC. Проверено 8 апреля 2013.
  13. ^ a b IOCCC 2004 - Лучшее злоупотребление CPP IOCCC. Проверено 8 апреля 2013.
  14. ^ "smr.hint" (простой текст) . IOCCC. 1994 . Проверено 16 сентября 2006 .
  15. ^ "gavin.hint3" (простой текст) . IOCCC. 2004 . Проверено 1 марта 2007 .
  16. ^ Толедо Наночесс и Толедо Пикошесс
  17. ^ Кто выиграл 18-й IOCCC
  18. ^ Nanochess частично деобфусцированная версия
  19. ^ Толедо Гутьеррес, Оскар (2014). Толедо Наночесс: прокомментированный исходный код . Лулу . ISBN 978-1-304-86437-6.
  20. ^ http://smmax.sourceforge.net/
  21. ^ Супер Микро ФИДЕ 760
  22. ^ 5th International Obfuscated C Code Contest 1988 Архивировано 22 октября 2013 г. на Wayback Machine (westley.c). IOCCC.
  23. ^ используя gcc, скомпилируйте с помощью следующей командной строки:gcc -traditional-cpp -o r r.cилиgcc -E r.c | sed 's/- -/--/g' > r2.c ; gcc -o r2 r2.c(исходный файлr.c) [ оригинальное исследование? ]
  24. ^ a b c Имитатор полета IOCCC . aerojockey.com. Проверено 8 апреля 2013.
  25. ^ Skiena, Стивен (2001). Расчетные ставки: компьютеры, азартные игры и математическое моделирование на победу . Математическая ассоциация Америки. С.  152 , 153. ISBN 978-0521009621.
  26. ^ "Указатель / 2011 / акари" . www.ioccc.org . Проверено 18 сентября 2020 .

Внешние ссылки [ править ]

  • Официальный веб-сайт