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