IOCCC
El Concurso Internacional de Código C Ofuscado o IOCCC – en inglés International Obfuscated C Code Contest – es un concurso que nació en 1984 y que, en cada una de sus hasta ahora 22 ediciones, ha premiado a los programas más llamativos (útiles y a veces poco útiles) cuyo código es ilegible, es decir, está ofuscado u oscurecido intencionadamente.
Aunque las reglas no son demasiado claras al respecto, para participar «basta» con presentar un programa completo y propio de menos de 4096 bytes con el objetivo de:
– Escribir el programa C más oscuro/ofuscado.
– Mostrar la importancia del estilo de programación, de una manera irónica.
– Forzar los compiladores de C con código inusual.
– Ilustrar algunas de las sutilezas del lenguaje C.
– Proporcionar un foro seguro para el código C más pobre :
En este post les hablaré sobre uno de los programas ganadores del 20vo Concurso (2011)
Best of Show. Akari.c
El código fuente consta de:
Makefile
akari.c
example.ppm
hint.html
hint.text
[/align]
Descripción:
akari es una utilidad de downsampling de imagenes que acepta 3 formatos de entrada, y otras aplicaciones que iremos descubriendo
* PGM (netpbm grayscale image). Akari solo acepta archivos PGM con esta cabecera:
P5 255.
* PPM (netpbm RGB image). Solo archivos PPM con esta cabezera: P6 255.
* ASCII art (Con últimas lineas en bytes LF, no CR-LF)
Manos a la obra
Compilar:
git clone https://github.com/princessgentoo/Akari
cd Akari
make akari
Primer Uso
Partimos de la siguiente imagen con las siglas del concurso, la cual transformaremos con el comando debajo de ella:
./akari < example.ppm > odd_output.ppm
Que nos da como resultado esta imagen:
アッカリーン
(Akarin)
Util para decodificar imagenes extrañamente entrelazadas, como el del ejemplo. Probablemente muchos imagenes subliminales sean de este tipo.
Ahora probemos este comando:
./akari - - even < example.ppm > even_output.ppm
Lo cual mantuvo los pixeles pares en las lineas pares, moviendo los pixeles impares en sus lineas. Lo inverso ocurrió en la imagen pasada.
Segundo Uso:
Lo que sigue es aun más interesante, downsampling de ASCII ART, probemos con la monalisa, Les recomiendo que usen la fuente Courier New en su terminal, el cual es la fuente usada en las imágenes:
./akari monalisa mona
Entonces veremos como se encogió:
Ahora se ve un poco menos clara la imagen, sugiero que se alejen para poder apreciar mejor a la monalisa. Ahora lo interesante está en que el propio código fuente es una imagen ASCII, entonces también hagámoslo:
./akari akari.c akari2.c
¡Sorpresa! Tenemos un nuevo programa, akari2.c
Tercer uso:
Descripción: Este programa permitirá expander cualquier texto
Procedemos a compilar nuestro segundo programa
gcc akari2.c -o akari2
Ahora crearemos un archivo con texto cualquiera
cat >hi-world << EOF
"To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep;
No more; and by a sleep to say we end"
EOF
Ejecutamos el siguiente comando:
./akari2 < hi-world
Y nos mostrará el fragmento de Hamlet que eligí para hacer la demostración expandido:
Cuarto Uso. Akari 2
Si además incluimos el argumento rot13, hará un rotado de 13 letras. Esto no es otra cosa que un cifrado César muy sencillo.
./akari2 rot13 < hi-world
Si combinamos los dos programas optenemos un cifrado normal rot13
./akari2 rot13 < hi-world | ./akari
"Gb or, be abg gb or: gung vf gur dhrfgvba:
Jurgure 'gvf aboyre va gur zvaq gb fhssre
Gur fyvatf naq neebjf bs bhgentrbhf sbeghar,
Be gb gnxr nezf ntnvafg n frn bs gebhoyrf,
Naq ol bccbfvat raq gurz? Gb qvr: gb fyrrc;
Ab zber; naq ol n fyrrc gb fnl jr raq"
Pero aun no termina.
Quinto Uso
Todavia podemos obtener dos programas más downsampling el codigo fuente más veces, y a su vez se va haciendo más pequeño el ASCII art del codigo fuente.
Ejecutemos los siguientes comandos:
./akari < akari.c | ./akari > akari3.c
./akari < akari.c | ./akari | ./akari > akari4.c
gcc akari3.c -o akari3
gcc akari4.c -o akari4
Y los invocamos respectivamente
./akari3
./akari4
Eso es todo, ahí me dicen que les salió. 😉
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0):
Don Yang
omoikane@uguu.org
Deja una respuesta