El Concurso Internacional de Código C Ofuscado (abreviado IOCCC ) es un concurso de programación informática para código escrito en C que sea el más creativamente ofuscado y se celebra anualmente (cuando es posible). Se describe como una "celebración de la opacidad sintáctica de C". [ 1 ] El código ganador del 28.º concurso, celebrado en 2025/26, fue anunciado [ 2 ] por transmisión en vivo el 6 de junio de 2026 [ 3 ] .
Las inscripciones son evaluadas de forma anónima por los jueces actuales, Leonid A. Broukhis y Landon Curt Noll . El proceso de evaluación está documentado en las preguntas frecuentes del concurso [ 4 ] y consta de rondas eliminatorias. Por tradición, no se proporciona información sobre el número total de inscripciones para cada concurso. Las inscripciones ganadoras reciben un premio en una categoría, como "Peor abuso del preprocesador de C " o "Comportamiento más errático", y luego se anuncian en el sitio web oficial de IOCCC. El concurso indica que ser anunciado en el sitio web de IOCCC es la recompensa por ganar (además del derecho a presumir).
Las ediciones anteriores del concurso se celebraron en los años 1984-1996, 1998, 2000, 2001, 2004-2006, 2011-2015, 2018-2020 y 2024-2025.
Historia
El IOCCC fue creado 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 intercambiaran notas sobre código mal escrito que tuvieron que corregir, en particular el Bourne shell , que usaba macros para emular la sintaxis de ALGOL 68 , y una versión defectuosa de finger para BSD. [ 5 ] El concurso en sí fue el tema de una pregunta en el Computer Bowl de 1993. [ 6 ] Después de una pausa de cinco años a partir de 2006, el concurso regresó en 2011. [ 7 ]
En comparación con otros concursos de programación, el IOCCC es descrito como "no tan serio" por Michael Swaine , editor de Dr. Dobb's Journal . [ 8 ]
En el libro de Don Libes [ 9 ] dice:
...sin duda te obligarán a ampliar tu perspectiva al estudiarlos. Y hay que admitir que algunos son simplemente descabellados y solo sirven para reírse y burlarse de ellos.
Normas
Las Reglas [ 10 ] varían anualmente y se publican junto con un conjunto de Directrices [ 11 ] que buscan brindar mayor claridad sobre las mismas. Se publican en el sitio web de IOCCC. Además, todo el material, incluyendo las obras ganadoras, se publica bajo la licencia Creative Commons BY-SA 4.0 Internacional. [ 12 ]
Modificar las reglas del concurso es toda una tradición.
Las reglas suelen estar redactadas deliberadamente con lagunas que se anima a los concursantes a encontrar y aprovechar. [ 11 ] Las participaciones que se aprovechan de estas lagunas pueden provocar que se modifiquen las reglas del concurso del año siguiente. [ 11 ]
La más significativa de las Reglas es la Regla 2a y 2b (originalmente Regla 1), límites de tamaño de fuente brutos y netos. Durante la vida del concurso, la Regla 2 ha evolucionado [ 13 ] para acomodar aumentos sutiles en los límites de tamaño de fuente. El concurso de 1984 comenzó con un tamaño de fuente máximo de 512 bytes, que aumentó varias veces más a 1536 bytes en 1991. En 1992, la Regla 2 se dividió para distinguir entre tamaño total máximo y tamaño máximo ignorando espacios en blanco y puntos y comas bajo ciertas condiciones. En los primeros días, para hacer el mejor uso del espacio permitido, se eliminaban los espacios en blanco, lo que a menudo resultaba en un bloque de texto compacto, lo que hacía que los humanos lo leyeran, pero tenía poca utilidad una vez que se pasaba por una utilidad de "pretty print" de C, que los jueces hacían como parte de su proceso. En 1992, los jueces creyeron que esa forma de ofuscación ya había agotado su efectividad [ 14 ] y quisieron animar a la gente a explorar otras formas de formatear el código, como una imagen ASCII con la temática de la entrada, o simplemente un código fuente C con sangría más tradicional. Alrededor de 2012/2013, la herramienta iocccsize(1) [ 15 ] fue adoptada por el concurso y modificada para ayudar tanto a los concursantes como a los jueces a aplicar el algoritmo de conteo de la Regla 2b.
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 [ a ] 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 asemejarse a imágenes, texto, etc., al estilo del arte ASCII , redefiniciones de preprocesadores para dificultar la lectura del código y código automodificable . En varios años se presentó una entrada que requirió una nueva definición de algunas de las reglas para el año siguiente, lo que se consideró un gran honor. Un ejemplo es el programa autorreproducible 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 ejecutaba, imprimía cero bytes, equivalentes a su código fuente. [ 18 ]
En su afán por llevar la ofuscación al extremo, los participantes han creado programas que rozan los límites de los estándares de C o que generan construcciones que activan combinaciones de rutas de código poco comunes en los compiladores. Como resultado, es posible que varias de las propuestas anteriores no se compilen directamente en un compilador moderno , y algunas incluso podrían provocar fallos del sistema.
Durante el período comprendido entre 2020 y 2024 (la Gran Fusión de Bifurcaciones [ 19 ] ), muchos de los ganadores se actualizaron para compiladores modernos, por ejemplo, convirtiendo la sintaxis de K&R C a al menos C89, excepto cuando hacerlo hubiera roto la ofuscación (las versiones originales aún están disponibles para su consulta). Así pues, con 2024, debería ser posible ejecutar todas las entradas. El sitio web documenta e invita a los programadores de C a corregir aquellos ganadores que aún presenten problemas pendientes. [ 20 ] [ 21 ]
Ejemplos
Dentro del límite de tamaño de código de tan solo unos pocos kilobytes, los concursantes han logrado hacer cosas complicadas; un ganador de 2004 creó un sistema operativo . [ 22 ]
Los compiladores modernos, gracias a la experiencia adquirida con las participaciones en concursos, advierten a los usuarios sobre el código fuente problemático. Es posible que deba desactivar las advertencias para compilar las participaciones en concursos.
Nanoajedrez de Toledo
Toledo Nanochess es un motor de ajedrez creado por el desarrollador de software mexicano Oscar Toledo Gutiérrez, cinco veces ganador del IOCCC. De acuerdo con las reglas del IOCCC, el original tiene 1963 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. [ 23 ] Debido a que Toledo Nanochess se basa en la entrada ganadora de Toledo en IOCCC18, [ 24 ] está fuertemente ofuscado . [ 25 ]
El 2 de febrero de 2014, el autor publicó el libro Toledo Nanochess: The commented source code , que contiene el código fuente completamente comentado. [ 26 ]
A fecha de 7 de febrero de 2010, parece ser uno de los dos únicos motores de ajedrez escritos en menos de 2 kilobytes de C capaces de ejecutar movimientos de ajedrez legales completos, junto con Micro-Max del físico neerlandés HG Muller. En 2014, Super Micro Chess [ 27 ] , una variante de Micro-Max, rompió la barrera del kilobyte con un total de 760 caracteres (incluidos espacios y saltos de línea) [ 28 ] . También existe una versión más pequeña del motor de Toledo, Toledo Picochess , que consta de 944 caracteres no en blanco.
typedef char ** C ; #define F getchar()) #define H(z)*n++=z; #include <setjmp.h> #define v pain(0,0,0 #define Z while( #define _ if( #define o(d) (u[l]=0,l[d]=6^e,q=1e4>v,0),l[d]=0,u[l]=e^6,q) #define I(H,n) { _ r=l[x=H],!r|(r^e)<-1){ _ j=u[l],-7==r|6==r\ ){ n; e=~e; return 1e5- f; } u[l]=0,t=j+1,i=j-1; _!i&89<x)i\ =j,t=6; _-1==t&30>x)t=j,i=-7; Z++i<t){ b=S; d=0; S&=63; \ a=((j^e)!=1?6!=(j^e)?O[32+x/10]-O[u/10+32]-q:(S|=6!=j?8\ :1,2==ux)*9+9*(xu==2):(d=1==j?xu:ux)/8+!(!((xu)%\ 10)|r)*99+(j==1?90<x:29>x)*(9*O[28+i]-288))+O[r+28\ ]*9-288+O[x%10+33]-fO[33+u%10]; x[l]=i; S|=(21=\ =u|21==x)*2+(u==28|28==x)*4+(91==u|x==91)*16+32\ *(u==98|x==98)+(20==d)*64*x; a-=k>f?pain(a,f+1\ ,M,k):0; _ i==c&u==h&!f&N&a>-1e4&x==y)longjm\ p(z,1); S=b; _!N|f&&(a>M||!f&a==M&&1&rand()\ )){ _!f){ _ k){ c=i; h=u; y=x; } } else _ \ La <N){ n; e=~e; u[l]=j; x[l]=r; return\ a; } M=a; } } x[l]=r; u[l]=j; n; } } typedef int G ; C kk ; char J [ 78 ], O [ ] = "HRQAMS#-smaqrh[UTZYTU[|TBA(" "$#(ABT|ba`gg`ab8>GK[_`fFDZXEYR" "L \t ####" "##B#A#@#G#F#E#D#K \t\3 Zlv#tjm" " \3 J#tjm \3 Pwb" "ofnbwf \3 Joofdbo \3 )&`&`.&`&`" "#+&g* \t " ; G y , c , h , e , S , * s , l [ 149 ]; jmp_buf z ; G main ( G L , C fa , C Na ){ return pain ( L , fa , Na , kk );} G pain ( G L , C fa , C Na ,C ka ){ G f = fa ; G N = Na ; GRAMO k = ka ; GRAMOu = 99 , p , q , r , j , i , x , t , a , b , d , M = -1e9 ; char * n ; if ( * l ){ e =~ e ; Z u > 21 ){ q = l [ -- u ] ^ e ; _ !-- q ){ _ ! l [ p = e ? u -10 : u + 10 ]){ I ( p ,) _ e ? u > 80 & ! l [ p -= 10 ] : u < 39 &! l [ p += 10 ]) I ( p ,)} _ l [ p = e ? u -11 : 9 + u ] ) I ( p ,) else _ u -1 == S >> 6 ){ l [ u -1 ] = 0 ; I ( p , l [ u -1 ] = -2 ^ e ); } _ l [ p = e ? u -9 : 11 + u ]) I ( p ,) else _ S >> 6 == 1 + u ){ l [ 1 + u ] = 0 ; I ( p , l [ 1 + u ] = e ^ -2); } } _ !-- q ){ n = O + 41 ; Z ++ n < 50 + O ) I ( u + 80 -* n , )} _ 0 < q & 4 > q ){ n = q == 2 ? 53 + O : O + 49 ; Z ++ n < O + ( q != 1 ) * 4 + 54 ){ p = u ; hacer I ( p -=* n -80 ,) Z ! p [ l ]); } } _ 4 == q ){ n = 49 + O ; Z ++ n < O + 58 ) I ( u -* n + 80 ,) _ e &! ( S & 24 ) |! e &! ( S & 3 ) && k && ! l [ u -2 ] &! l [ u -1 ] &! l [ u -3 ] && o ( u ) & o ( u -1 )){ l [ u -1 ] = 4 ^ e ; l [ u -4 ] = 0 ; yo ( u -2 , l [ u -1 ] = 0 ; l [ u -4 ] = e ^ 4 ); } _e & ! (S & 40 ) |! e &! ( S & 5 ) && k &&! l [ u + 1 ] &! l [ 2 + u ] && o ( u ) & o ( 1 + u )){ l [ u + 1 ] = e ^ 4 ; l [ 3 + u ] = 0 ; I ( u + 2 , l [ 1 + u ] = 0 ; l [ u + 3 ] = 4 ^ e ); } } } e =~ e ; return M ; } Z h < 130 ){ l [ h ] =- ( 21 > h | 98 < h | 2 > ( h + 1 ) % 10 ); O [ h ++ ] ^= 3 ; } n = O + 14 ; s = 20 + l ; Z ++ s < 29 + l ){ 10 [ s ] = 1 ; 70 [ s ] =~ ( * s = * n ++ -+ 84 ); 60 [ s ] = -2 ; } Z n = J ){ puts ( 58 + O ); u = 19 ; Z ++ u < 100 ){ H ( 32 )_ ! ( u % 10 )) H ( 32 ) H ( O [ 7 + l [ u ]]) _ ( 9 + u ) % 10 > 7 ){ H ( 58 - u / 10 ) H ( 32 ) _ u & 1 ) puts ( n = J ); } } puts ( O + 58 ); _ -1e4 > v , 1 )){ e =~ e ; puts ( O + ( v , 0 ) > 1e4 ? e ? 90 : 82 : 96 )); break ; } _ 1 < L & e ) { d = v , 2 + L ); printf ( O + 114 , h % 10 + 64 , 58 - h / 10 , y % 10 + 64 , 58 - y / 10 , d ); } else { putchar ( 62 ) ; h = ( 95 & F -44 ; c = l [ h += ( 56 - F * 10 ]; y = ( 95 & F -44 ; y += ( 56 - F * 10 ; Z 10 != ( u = ( 95 & F )){ c = 5 ; Z --c > 1 && u != c [ O ]); c = e ^ c -7 ; } } _ ! setjmp ( z )){ v + 1 , 1 ); puts ( 106 + O ); } } Z 10 != F ; }Pi
A continuación se muestra una entrada de 1988 que calcula Pi observando su propia área . [ 29 ] Esto fue escrito en el K&R C original .
Nota: La línea de preprocesador original enviada en 1988 era #define _ -F<00||--F-OO--;, que explotaba un error en el preprocesador K&R, corregido antes de ANSI C89.

#define _ F-->00||F-OO--; entero F = 00 , OO = 00 ; principal (){ F_OO (); printf ( "%1.3f \n " , 4. *- F / OO / OO );} F_OO () { _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ -_ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ }Simulador de vuelo
Otro ejemplo es un simulador de vuelo que utiliza X Windows, ganador del IOCCC de 1998, [ 30 ] como se enumera y describe en Calculated Bets: Computers, Gambling, and Mathematical Modeling to Win (2001) [ 31 ] y se muestra a continuación:
#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 ; Ventana 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 ; 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 ; 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 ; seleccionar ( 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 ); } }Akari
A continuación se muestra una entrada de 2011 que reduce la resolución de imágenes PGM , PPM y arte ASCII (de Akari de YuruYuri ) por Don, Yang: [ 32 ]
/* + + + + [ >i>n[t */ # include < stdio . h > /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1; */ int /**/ main ( int /**/ n , char ** m ){ FILE * 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>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?" "*]/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 \" yogYURUYURI" [ i ] ^ y [ i * 2 + 1 ] ^ 4 ; /*!*/ p = ( n > 1 && ( m [ 1 ][ 0 ] - '-' || m [ 1 ][ 1 ] != '\0')) ? fopen ( m [ 1 ], y + 298 ) : entrada estándar ; /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m] =<2<5<64;}-]-(m+;yry[rm*])/[* */ q = ( n < 3 ||! ( m [ 2 ][ 0 ] - '-' || m [ 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 ( " No se puede " " \x20 abrir \40 %s \40 " "" "para \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+ */ "leer" : "escribir" ); para ( a = k = u = 0 ; y [ u ]; u = 2 + u ){ y [ k ++ ] = y [ u ];} si (( 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 ); u = k -5 ? 8 : 4 ; k = 3 ;} else /*]>*/ {( u ) = /*{ p> >u >t>-]s >++(.yryr*/ + ( n + 14 > 17 ) ? 8 / 4 : 8 * 5 / 4 ;} for ( r = i = 0 ; ;){ u *= 6 ; u += ( n > 3 ? 1 : 0 ); if ( y [ u ] & 01 ) fputc ( /* <ge<tc>ha r -(-).)8+<1. >;+i.(<)< <)+{+si>([180*/ 1 * ( r ),q ); si ( y [ u ] & 16 ) k = A ; si ( y [ u ] & 2 ) k -- ; si ( i /* ("^w^NAMORI; { I*/ == a /*" )*/ ){ /**/ i = a = ( u ) * 11 & 255 ; si ( 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 ] & 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 el programa se ejecuta utilizando su propio código fuente como entrada, el resultado es:
$ . / akari akari . c int * w , m , _namori = ( 'n' ); #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 - ( m & 192 ) || 2 > w ? m : ( 2 + m /*"*,/U// R/)/U * & /Y/0/U/=P &=/"*/ ) \ & 16 ? m -13 : 13 + m ) ; u =+ 10 ; for (;( 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 ) ; } $ ./ akari akari . c > . / akari . pequeño $ . / 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=" ){/=* =* */ ); /* **/ { ;;}} $ $ . / akari . / akari . pequeño > . / akari . más pequeño $ . / akari . / akari . main más pequeño (){ puts ( "Y" "U RU YU " \ "RI" ) /* */ ;} $Véase también
Notas
- ↑ En algunos casos "espectacularmente", según el Dr. Dobbs , [ 16 ] con una entrada que crea una ALU de 11 bitsen el preprocesador C [ 17 ]
Referencias
- ↑ Palmer, Geoff (1 de noviembre de 2004). "Más allá de la línea de comandos" . PC World New Zealand . Fairfax Media, Fairfax New Zealand Limited. Archivado del original el 10 de febrero de 2013. Consultado el 7 de abril de 2013 .
- ↑ "Anunciados los ganadores del 'Concurso Internacional de Código C Ofuscado' de 2026"" . Slashdot . Consultado el 07-06-2026 .
- ^ Landon Curt Noll, Leonid A. Broukhis, David McInnis (6 de junio de 2026). Presentación de premios IOCCC y revelación del código fuente (2h57m20) .
- ↑ "Proceso de evaluación" . IOCCC.org . Concurso internacional de código C ofuscado . Consultado el 27 de agosto de 2025 .
- ↑ "Cómo empezó" . IOCCC.org . Concurso Internacional de Código C Ofuscado . Consultado el 27 de agosto de 2025 .
- ↑ "Los altos ejecutivos no hacen bien los cálculos" . San Jose Mercury News . California. 15 de mayo de 1993. pág. 1A. Archivado del original el 8 de agosto de 2014. Recuperado el 8 de agosto de 2025 a través de Newsbank .
- 1 2 Jackson, Joab (15 de noviembre de 2011). "Regresa el concurso de código ofuscado" . PC World . Recuperado el 1 de mayo de 2023 .
- ↑ Swaine, Michael (1 de mayo de 2008). "Debe haber competencia" . Dr. Dobb's Journal . Recuperado el 27 de agosto de 2025 .
- ↑ Libes, Don (1993). «Prefacio». Obfuscated C And Other Mysteries . Wiley. págs. ix– x. ISBN 0-471-57805-3.
- ↑ "Reglas" . IOCCC.org . Concurso Internacional de Código C Ofuscado.
- 1 2 3 "Directrices" . IOCCC.org . Concurso Internacional de Código C Ofuscado.
- ↑ "Se utiliza la licencia IOCCC" . IOCCC.org . Concurso Internacional de Código C Ofuscado.
- ↑ "Regla 2 Eras" . IOCCC.org . Concurso Internacional de Código C Ofuscado.
- ↑ "Directrices del IOCCC de 1992" . IOCCC.org . Concurso Internacional de Código C Ofuscado.
- ↑ "iocccsize" . GitHub.com . Anthony C Howe.
- ^ Spinellis, Diomidis (5 de octubre de 2006). "Perfeccionamiento de código" . Diario del Dr. Dobb . Consultado el 1 de mayo de 2023 .
- ↑ "2004/vik2 Mejor abuso de CPP" . IOCCC.org . Concurso internacional de código C ofuscado . Consultado el 12 de septiembre de 2025 .
- ↑ "1994/smr El peor abuso de las reglas" (texto plano) . IOCCC.org . Concurso Internacional de Código C Ofuscado. 1994. Consultado el 10 de septiembre de 2025 .
- ↑ "Great Fork Merge" (texto plano) . IOCCC.org . Concurso Internacional de Código C Ofuscado. 2024. Consultado el 10 de septiembre de 2025 .
- ↑ "IOCCC no compila ni se ejecuta" (texto plano) . IOCCC.org . Concurso Internacional de Código C Ofuscado. 2024. Consultado el 10 de septiembre de 2025 .
- ↑ "Lista de problemas de IOCCC" (texto plano) . IOCCC.org . Concurso Internacional de Código C Ofuscado. 2024. Consultado el 10 de septiembre de 2025 .
- ↑ "2004/gavin Best of Show" (texto plano) . IOCCC.org . Concurso Internacional de Código C Ofuscado. 2004. Consultado el 10 de septiembre de 2025 .
- ↑ "Toledo Nanochess y Toledo Picochess" . nanochess.org .
- ↑ "2005/toledo Mejor Juego" . IOCCC.org . Concurso Internacional de Código C Ofuscado . Consultado el 12 de septiembre de 2025 .
- ↑ "Versión parcialmente desofuscada de Nanochess" . GitHub . Consultado el 1 de mayo de 2023 .
- ↑ Toledo Gutiérrez, Oscar (2014). Toledo Nanochess: El código fuente comentado . Lulu . ISBN 978-1-304-86437-6.
- ↑ "Super Micro Chess Engine - Página principal - Código fuente en C extremadamente compacto y tamaño de programa ejecutable" . smmax.sourceforge.net .
- ↑ "Super Micro FIDE 760" . sourceforge.net .
- ↑ "1988/westley" . IOCCC.org . Concurso Internacional de Código C Ofuscado. 1988. Consultado el 12 de septiembre de 2025 .
- ↑ Blog de Carl Banks: Simulador de vuelo IOCCC . blog.aerojockey.com. Consultado el 1 de mayo de 2023.
- ↑ Skiena, Steven (2001). Apuestas calculadas: Computadoras, juegos de azar y modelado matemático para ganar . The Mathematical Association of America. págs. 152–153 . ISBN 978-0521009621. Consultado el 12 de septiembre de 2025 .
- ↑ "2011/akari Best of Show - Most Shrinkable" . IOCCC.org . Concurso Internacional de Código C Ofuscado . Consultado el 12 de septiembre de 2025 .
Enlaces externos
- Sitio web oficial
- Mmm… Donas de concha ofuscadas, Sven Gregori
- LaurieWired: ¿Un concurso para código ilegible?
- LaurieWired - Este código C debería ser ILEGAL. Además, es fantástico.
- "El mundo de la programación artística, esotérica y confusa" de Yusuke Endoh (ganador del IOCCC en 20 ocasiones).
- Descifrando la complejidad: la exploración de ChatGPT del enigmático código C del IOCCC.
- Programación experta en C, Peter van der Linden, cap. 8, pág. 225 "Un ligero alivio" ISBN 0131774298
- IOCCC 2024 establece un récord con 23 ganadores tras una pausa de 4 años, e incluye un chatbot con IA y una calculadora de fases lunares.
- concursos de C (lenguaje de programación)
- Humor informático
- Ofuscación de software
- Premios irónicos y humorísticos
- Eventos recurrentes establecidos en 1984.