leer wikipedia con nuevo diseño

Concurso internacional de código C ofuscado


El Concurso Internacional de Código C ofuscado (abreviado IOCCC ) es un concurso de programación de computadoras para el código C más creativamente ofuscado . Celebrada anualmente, se describe como "celebrar la opacidad sintáctica de [C]". [1] El código ganador del 27º concurso, celebrado en 2020, se publicó en julio de 2020. [2] Los concursos anteriores se llevaron a cabo en los años 1984-1996, 1998, 2000, 2001, 2004-2006, 2011-2015 y 2018 –2020.

Concurso internacional de código C ofuscado
IOCCC.png
El logo del IOCCC
EstadoActivo
GéneroConcurso de codificación
Comienza26 de diciembre de 2018 ( 26/12/2018 )
Termina15 de marzo de 2019 ( 15/03/2019 )
FrecuenciaAnualmente
Años activos1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015, 2018-presente
Inaugurado1984 ( 1984 )
FundadoresLandon Curt Noll y Larry Bassel
Sitio webwww.ioccc.org

Los trabajos son evaluados de forma anónima por un panel de jueces. El proceso de evaluación está documentado en las directrices de la competición [3] y consta de rondas eliminatorias. Por tradición, no se proporciona información sobre el número total de inscripciones para cada competencia. Los trabajos ganadores reciben una categoría, como "Peor abuso del preprocesador C " o "Comportamiento más errático", y luego se anuncian en el sitio web oficial de IOCCC. El concurso establece que ser anunciado en el sitio web de IOCCC es la recompensa por ganar.

Historia

El IOCCC fue fundado por Landon Curt Noll y Larry Bassel en 1984 mientras trabajaban en el grupo de portabilidad Genix de National Semiconductor. La idea del concurso surgió después de que compararon notas entre sí sobre un código mal escrito que tenían que arreglar, en particular el shell Bourne , que usaba macros para emular la sintaxis de ALGOL 68 , y una versión defectuosa de finger para BSD. [4] El concurso en sí fue el tema de una pregunta en el Computer Bowl de 1993. [5] Después de una pausa de cinco años a partir de 2006, el concurso regresó en 2011. [6]

Comparado con otros concursos de programación, el IOCCC es descrito como "no tan serio" por Michael Swaine , editor del Dr. Dobb's Journal . [7]

Reglas

Cada año, las reglas del concurso se publican en el sitio web del IOCCC. Todo el material se publica bajo la licencia Creative Commons BY-SA 3.0 Unported. [8] Las reglas varían de un año a otro y se publican con un conjunto de pautas que intentan transmitir el espíritu de las reglas.

"Hackear las reglas del concurso es una tradición". Landon Curt Noll, 2011. [6]

Las reglas a menudo se escriben deliberadamente con lagunas que se anima a los concursantes a encontrar y abusar. [ cita requerida ] Las entradas que aprovechan las lagunas pueden provocar que se ajusten las reglas del concurso del año siguiente. [ cita requerida ]

Ofuscaciones empleadas

Las entradas a menudo emplean trucos extraños o inusuales, como usar el preprocesador de C para hacer cosas para las que no fue diseñado (en algunos casos "espectacularmente", según el Dr. Dobbs , [9] con una entrada que crea una ALU de 11 bits en el preprocesador de C [10] ), o evitar construcciones de uso común en el lenguaje de programación C en favor de formas mucho más oscuras de lograr lo mismo.

Las contribuciones han incluido código fuente formateado para parecerse a imágenes, texto, etc., a la manera del arte ASCII , redefiniciones del preprocesador para hacer que el código sea más difícil de leer y código auto-modificable . En varios años, se presentó una entrada que requería una nueva definición de algunas de las reglas para el próximo año. [ cita requerida ] Esto se considera un gran honor. Un ejemplo es el programa de autorreproducción más corto del mundo . La entrada era un programa diseñado para generar su propio código fuente y que tenía cero bytes de código fuente. Cuando el programa se ejecutó, imprimió cero bytes, equivalente a su código fuente. [11]

En el esfuerzo por llevar la ofuscación a sus extremos, los concursantes han producido programas que bordean los límites de los estándares C, o dan como resultado construcciones que desencadenan combinaciones de rutas de código raramente utilizadas en compiladores. Como resultado, es posible que varias de las entradas anteriores no se compilen directamente en un compilador moderno y algunas pueden causar bloqueos.

Ejemplos de

Dentro del límite de tamaño del código de solo unos pocos kilobytes, los concursantes han logrado hacer cosas complicadas: un ganador de 2004 resultó un sistema operativo. [12]

Toledo Nanochess

Toledo Nanochess es un motor de ajedrez desarrollado por el mexicano Oscar Toledo Gutiérrez, cinco veces ganador del IOCCC. De acuerdo con las reglas de IOCCC, tiene 1255 caracteres. El autor afirma que es el programa de ajedrez más pequeño del mundo escrito en C.

El código fuente de Toledo Nanochess y otros motores está disponible. [13] Debido a que Toledo Nanochess se basa en la entrada ganadora de Toledo del 18º IOCCC (Mejor juego [14] ), está muy ofuscado . [15]

El 2 de febrero de 2014, el autor publicó el libro Toledo Nanochess: El código fuente comentado , que contiene el código fuente completamente comentado. [dieciséis]

Al 7 de febrero de 2010, parece ser uno de los dos únicos motores de ajedrez escritos en menos de 2 kilobytes de C que son capaces de ejecutar movimientos de ajedrez completamente legales, junto con Micro-Max del físico holandés HG Muller. En 2014, la barrera de 1 kilobyte se rompió con Super Micro Chess [17] , un derivado de Micro-Max, con un total de 760 caracteres (espacios y nuevas líneas incluidas). [18] También hay una versión más pequeña del motor de Toledo, el Toledo Picochess , que consta de 944 caracteres que no están en blanco.

Extracto del código fuente

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 ; y ^ = 8 ; G ++ ; d = w || s && s > = h && v  0 , 0 ) > M ; hacer { _  o = I [ p = O ]) { q = o & z ^ y  _  q < 7 ) { A = q - & 2 ? 8 : 4 ; C = o -9 & z ? q [ "&. $" ] : 42 ; hacer { r = I [ p + = C [ l ] -64 ] _ ! w | p == w ) { g = q | p + a - S ? 0 : ¡ I + S  _ ! r & ( q | A < 3 || g ) || ( r + 1 & z ^ y ) > 9 && q | A > 2 ) { _  m =! ( r -2 y 7 )) P  G [ 1 ] = O , K ; J = n = o & z ; E = I [ p - a ] & z ; t = q | E -7 ? n :( n + = 2 , 6 ^ y ); 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 | d ) { 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 ) _ ! ( h || s -1 | segundo - O | yo - norte | p - segundo | L <- M )) P  y ^ = 8 , u = J ; J = q -1 | A < 7 || m ||! s | d | r | o < z || v  0 , 0 ) > M ; O [ I ] = o ; p [ I ] = r ; m ? * m = * g , * g = 0 : g ? * g = 9 ^ y : 0 ;} _  L > N ) { * G = O  _  s > 1 ) { _  h && c - L < 0 ) P  L  _ ! h ) yo = 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 || ( p = O , q | A > 2 | o > z & ! r && ++ C * - A ));}}} Z ++ O > 98 ? O = 20 : e - O ); P  N + M * M && N > - K + 1924 | d ? N : 0 ;} principal () { Z ++ B < 121 ) * G ++ = B / x % x < 2 | B % x < 2 ? 7 : B / x y 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 ; b = F ; b + = ( x - F ) * x ; Z  x - ( * G = F )) i = * G ^ 8 ^ y ;} si no  v  u , 5 ); v  u , 1 );}}

Pi

A continuación se muestra una entrada de 1988 que calcula pi observando su propia área : [19]

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

(Esta entrada fue escrita en K&R C ; no funciona correctamente en ANSI C sin algunos cambios. [20] )

Simulador de vuelo

Otro ejemplo es el siguiente simulador de vuelo, el ganador del IOCCC de 1998, [21] como se enumera y describe en Calculated Bets: Computers, Gambling, and Mathematical Modeling to Win (2001) [22] y se muestra a continuación:

#include  #include  #include  #include   doble  L  , o  , P  , _ = dt , T , Z , D = 1 , re ,  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 ;  Ventana  z ;  char  f [ 52 ]  ;  GC  k ;  main () {  Pantalla * e =  XOpenDisplay (  0 );  z = RootWindow ( e , 0 );  para  ( 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 );  para ( XMapWindow ( e , z );  ;  T = pecado ( 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 ;  para  ( 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 ;  si ( 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 ;  más {  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 ;  yo + = ( B  * l - M * r  - X * Z ) * _ ;  para (;  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 + = ( Yo = M /  l , l * H  + Yo * 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 * ( 0.45 -14 / l *  X - un * 130 - J *  0,14 ) * _ / 125e2 + F * _ * v ;  P = ( T * ( 47  * I - m *  52 + E * 94  * D - t * .38 + u * .21 * E )  / 1e2 + W *  179 * v ) / 2312 ;  seleccionar ( p = 0 , 0 , 0 , 0 , y G );  v - = (  W * F - T * ( .63 * m - I * .086 + m * E * 19 - D * 25 -.11 * u  ) / 107e2 ) * _ ;  D = cos ( o );  E = sin ( o );  }  }
Paisaje de Pittsburgh del simulador de vuelo

Este programa necesita la siguiente línea de comando en un sistema Linux para ser compilado: [21]

cc bancos.c -o bancos -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

Para ejecutar el archivo binario ( banks) se debe proporcionar un .scarchivo de escenario a través de la stdinentrada: [21]

cat pittsburgh.sc | ./bancos

Akari

A continuación se muestra una entrada de 2011 que reduce la resolución de una imagen ascii de Don, Yang: [23]

 / *  +  +  +  +  [> i> n [t  * /  # include < stdio . h >  / * 2w0,1m2,] _  r> i> => (['0n1'0) 1;  * / int / ** / main ( int / ** / n , char ** m ) { ARCHIVO * p , * q ; int  A , k , a , r , i / *  #uinndcelfu_dset  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 " yuruyurwiyuriyurara'rariayuruyuriyuriyu > rarararayuruy9uriyu3riyurar_aBrMaPrOaWy ^? "  "*] / f]`; hvroai / **  * / " i + k [> + b + i> ++ b ++> l [rb " ; int / ** / u ; para ( 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 \ " yogYURUYURI" [  i ] ^ y [ i * 2 + 1 ] ^ 4 ; / *! * / p = ( n > 1 && ( m [ 1 ] [ 0 ] - '-' || m [ 1 ] [ 1 ]  ! = '\ 0' )) ? Fopen ( m [ 1 ], y + 298 ) : stdin ;  / * y / riynrt ~ (^ w ^)],] c + h + a + r + * + * [n>) + {> f + o  * / q = ( n < 3 | |! ( m [ 2 ] [ 0 ] - '-' || m [ 2 ] [ 1 ])) ? stdout  / *] {} [* / : fopen ( m [ 2 ], re + 14 ); si ( ! p || / *  "] << * -]> y ++> u >> + r> + u +++ y> - u --- r> ++ i +++" <) <; [> - m- .> a -.- i. ++ n.> [(w) * / ! q / ** / )  return + printf ( "Can"  "not \ x20 open \ 40 % s \ 40 "  ""  "para \ 40 % canta \ n " , m [ ! P ? 1 : 2 ] ,! P ? / *  O = 82] 5 << + (+ 3 + 1 + &. (+ M + - + 1.) <) < | <| .6> 4> - + (> m- & -1.9-2 -) - | - | .28> -w -? - m.:>([28+ * / "read" : "write" ); para  (  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 ; si ( n > 3 ) { / * ] & <1 <6  3> +: + .1> 3 +++. -m-) - ;. u + = ++. 1 <0 <<; f u ++ ; i ++ ;} fprintf  ( q ,  d , k ,  u  >> 1 , i >> 1 , r ); u  =  k -5 ? 8 : 4 ; k = 3 ;} más  / *]> * / {( u ) = / * {p>> u> t> -] s> ++ (. año * / + (  n + 14 > 17 ) ? 8 / 4 : 8 * 5 /  4 ;} para ( r = i = 0  ;  ;) { u * = 6 ; u + =  ( n > 3 ? 1 : 0 ); si  ( y [ u ] & 01 ) fputc ( / *   ha r - (-).) 8+ <1.>; + i. (<) <<) + {+ if> ([180 * / 1 *  ( r ), q ); if ( y [ u  ] & 16 ) k = A ; if  ( y [ u ] & 2 ) k - ; 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 / * * /  ) break ; i = 0 ;} r = b [ i ++ ]  ; u + = ( / ** >> * .. + 8 & *  ( y + u )) ? ( 10 -  r ? 4 : 2 ) : ( y [ u ]  y 4 ) ? ( k ? 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 ^ * /  ;}

Si ejecuta el programa utilizando su propia fuente como entrada, obtendrá:

[ root @ host  ~ ] #  . / akari  akari . C    int  * w , m , _namori = ( 'n' );  #include  / *; 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 ) { para ( m  = 256 ; - m ; r [ m ] / *  "<*] y + u> r> u + yu-r + i +");> mai + n> () / q * /  = 25 < ( 31 & (  m  -1 )) || 64 - (  m  & 192 ) || 2 > w ? m :( 2 + m / * "*, / U // R /) / U * & / Y / 0 / U / = P & = / "* / ) \ & 16 ? M -13  :  13 +  m )  ; u = + 10  ; para (; ( m = / * *> / () / {pu ts + (yy * + n1> 7? /: * /  getchar  ()) + 1  ; i ()  ) { if ( 10 / *  "wNMR; {I / = /") / {* / == u * 1  ) i ();  if ( m -10 ) {  u = / *> *. / <) [; * / 8 *  4 ; i ();  } u = r [  m ];} return (  *  * n / * {i; w;} _}  (- * /  * 00  )  ;  } [ root @ host  ~ ] #  . / akari  akari . c  >  . / akari . small [ root @ host  ~ ] #  . / akari  . / akari . pequeño   wm_aoi ( n )  / * ity ,, [2 * / {} char * y =  ( ") M {lpduKtjsa (v" "YY"  "* yuruyuri" )  ; principal ( / * / ", U / R) U * Y0U = =" / \ * / ) { pone  ( y +  17 / * "NR {I =") {/ = *  = * * / ); / *  ** / {  ;;}} [ root @ host  ~ ] #  [ root @ host  ~ ] #  . / akari  . / akari . pequeño  >  . / akari . más pequeño [ root @ host  ~ ] #  . / akari  . / akari . menor  principal () { put ( "Y" "U RU YU" \ "RI"  ) / * * /  ;} [ root @ host  ~ ] #

Ver también

  • Concurso de Perl ofuscado
  • Concurso C encubierto
  • Lenguaje de programación esotérico

notas y referencias

  1. ^ Palmer, Geoff (1 de noviembre de 2004). "Más allá de la línea de comando" . Revista PC World de Nueva Zelanda . Archivado desde el original el 10 de febrero de 2013 . Consultado el 7 de abril de 2013 .
  2. ^ "Ganadores anteriores del IOCCC" . IOCCC. 2014. Archivado desde el original el 23 de diciembre de 2013 . Consultado el 8 de enero de 2014 .
  3. ^ "Directrices de 2015" (texto sin formato) . IOCCC. 2015 . Consultado el 20 de noviembre de 2015 .
  4. ^ "Preguntas frecuentes" . IOCCC . Consultado el 12 de noviembre de 2011 .
  5. ^ "Los altos ejecutivos no calculan correctamente" . San José Mercury News , California. 15 de mayo de 1993. Pág. 1A. A través de Newsbank . (requiere suscripción)
  6. ^ a b Jackson, Joab (15 de noviembre de 2011). "Devoluciones del concurso de código ofuscado" . PCWorld . Consultado el 7 de abril de 2013 .
  7. ^ Swaine, Michael (1 de mayo de 2008). "Debe haber competencia" . Diario del Dr. Dobb . Consultado el 7 de abril de 2013 .
  8. ^ Página de inicio de IOCCC, pie de página y en cada archivo hint.txt
  9. ^ Spinellis, Diomidis (5 de octubre de 2006). "Code Finessing" . Diario del Dr. Dobb . Consultado el 7 de abril de 2013 .
  10. ^ IOCCC 2004 - Mejor abuso de CPP IOCCC. Consultado el 8 de abril de 2013.
  11. ^ "smr.hint" (texto sin formato) . IOCCC. 1994 . Consultado el 16 de septiembre de 2006 .
  12. ^ "gavin.hint3" (texto sin formato) . IOCCC. 2004 . Consultado el 1 de marzo de 2007 .
  13. ^ Toledo Nanochess y Toledo Picochess
  14. ^ Quién ganó el 18º IOCCC
  15. ^ Versión de Nanochess parcialmente desenfocada
  16. ^ Toledo Gutiérrez, Oscar (2014). Toledo Nanochess: El código fuente comentado . Lulu . ISBN 978-1-304-86437-6.
  17. ^ http://smmax.sourceforge.net/
  18. ^ Super Micro FIDE 760
  19. ^ 5to Concurso Internacional de Código C ofuscado 1988 Archivado el22 de octubre de 2013en la Wayback Machine (westley.c). IOCCC.
  20. ^ usando gcc, compile con la siguiente línea de comando:gcc -traditional-cpp -o r r.cogcc -E r.c | sed 's/- -/--/g' > r2.c ; gcc -o r2 r2.c(El archivo fuente esr.c) [ ¿investigación original? ]
  21. ^ a b c IOCCC Flight Simulator . aerojockey.com. Consultado el 8 de abril de 2013.
  22. ^ Skiena, Steven (2001). Apuestas calculadas: computadoras, juegos de azar y modelos matemáticos para ganar . La Asociación Matemática de América. págs.  152 , 153. ISBN 978-0521009621.
  23. ^ "Índice de / 2011 / akari" . www.ioccc.org . Consultado el 18 de septiembre de 2020 .

enlaces externos

  • Página web oficial

This page is based on a Wikipedia article Text is available under the CC BY-SA 4.0 license; additional terms may apply. Images, videos and audio are available under their respective licenses.


  • Terms of Use
  • Privacy Policy