Éste es el ¿absurdo? reto que propone cada año el International Obfuscated C Code Contest (IOCCC), en un intento de picar a programadores de todo el mundo hacia el extremo de la programación más enrevesada e imposible de entender. De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc. Mejor ver algunos screenshot:
|
etiquetas: programación , ciencia
Yo creía que sabía programar. Mejor me dedico a cultivar tomates
int main()
{
printf("POLLAn");
return 0;
}
echo "main(i){for(i=0;;i++)putchar(((i^(i>>64|i>>11)&70&i>>8))*(i&i>>12|i>>4));}" | gcc -x c - && ./a.out | aplay
int main()
{
printf("Two girls posting in C .... nice #1 and #2 n ;)");
return 0;
}
FreeDOS kernel version 1.1.33 (Build 2033) [Jan 31 2004 16:30:33]
Kernel compatibility 7.10 - WATCOMC - FAT32 support
(C) Copyright 1995-2004 Pasquale J. Villani and The FreeDOS Project.
All Rights Reserved. This is free software and comes with ABSOLUTELY NO
WARRANTY; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation;
either version 2, or (at your option) any later version.
- InitDiskno hard disks detected
FreeCom version 0.82 pl 2 XMS_Swap [Apr 28 2003 17:47:52]
Current date is Sun 01-05-2014
Enter new date (mm-dd-[cc]yy):
Current time is 10:56:51.56 pm
Enter new time:
A:>
odin.fdos.org/fdodin06.8088.zip Bajadlo y descomprid el archivo. En vez de usar el disco Dos6.22.img usad el ODIN.720
Yo creía que sabía programar. Mejor me dedico a cultivar tomates
int main(){
print("No tengo otra cosa que hacer que pensar un programa que mida esos caracteres para luego sin querer pasarme de uno y tener que reescribirlo")
int a;
return a;//Soy un temerario
}
Ah vale, si puedo usar las librerías que quiera, la cosa cambia.
www.youtube.com/watch?v=jB0vBmiTr6o
Ganas de mas?
www.pouet.net/prodlist.php?type[0]=4k&platform[0]=Windows&page
bellard.org/
bellard.org/projects.html
Es el padre de Qemu y FFMPEG (Usado por VLC y demás).
Los buenos programadores teníamos un Spectrum de 16K y despreciabamos a los que se compraban en el 48K, por despilfarradores de RAM.
www.worldofspectrum.org/warajevo/Story.html
Siempre he pensado que un buen programador es aquel que logra crear código eficiente, pero a la vez fácil de leer y basado en una estructura lógica que puedes comprender sin mucho esfuerzo, todo lo contrario al código de este emulador que casi está en lenguaje máquina, lo cual tiene su mérito, pero no es una muestra de buena programación (en mi opinión).
cc #10
wurstcaptures.untergrund.net/music/
Es puro vicio
He dado con esta formula.
wurstcaptures.untergrund.net/music/?oneliner=(((t<<5)|(t>>1)) /(t>>16)
Please, bitch
<stdin>:1:1: warning: right shift count >= width of type [enabled by default]
bellard.org/
bellard.org/jslinux/
<ironic>
ha cambiado eso mucho... antes las tías le molaban los albañiles.... ahora los programadores son los que se lleva el gato al agua si no, mira las ofertas de trabajo son los que mas hace falta y viajan mucho al extranjero
</ironic>
#10 Pues si tu sientes eso siendo programador, imagina lo que yo sentí cuando estudiaba ingeniería industrial y tuve que enfrentarme a la programación en C por primera vez. Estructurar mi pensamiento para entender un ejercicio tan básico como el algortimo de la burbuja me llevó un tiempo nada despreciable. Pero bueno, más allá de que no me dedique a ello me parece un mundo fascinante, y a esos niveles ya debe ser la p..a. A costa de la vida social, seguramente, por eso prefiero quedarme como estoy.
www.pouet.net/topic.php?which=8357&page=1
Y en ese hilo (muy recomendable) hay ejemplos a montones, algunos muy buenos como este:
wurstcaptures.untergrund.net/music/?oneliner=t*(0xCA98CA98>>(t>>9&30)&
En todo caso es una maravilla. Es más estos concursos siempre salen maravillas. Creo recordar de alguien que un año, hace pocos años vamos, hizo un juego entero que se basaba todo en matemática para crear la música y los niveles en tiempo real.
Salu2
www0.us.ioccc.org/2004/arachnid.c
Aviso que mi intención no es desprestigiar a nadie, evidentemente hay mejores programadores que otros, sin embargo hacerlo en medida a este concurso, me parece exactamente lo que mi ejemplo, absurdo. Ahora en informática hay otras prioridades, y según lo que programes ahorrarte unos bits en booleanos metiendolos juntos en un mismo byte no tiene tanto sentido y te crea dependencias complicadas de modificar en el futuro.
Tampoco tiene tanto sentido optimizar el código cuando el compilador hace un trabajo mucho mejor. Esto es un concurso, así que vale, pero en un proyecto real hay que saber cuando eres tacaño con los recursos y cuando es mejor ser flexibles.
Intenta programar un emulador de Play Station para ARM sin XV ni OpenGL ni nada por el estilo y que te salga rápido.
El compilador optimiza, pero para ciertas cosas, meter mano a bajo nivel es imprescindible.
notaz.gp2x.de/pcsx_rearmed.php
Y por cierto, date cuenta que ese en particular es un proyecto "muerto", programas un emulador para un sistema que ya no se desarrolla, tus requerimientos estas congelados, no cambian.
Así que sí, ha creado un emulador de PC XT.
-Aquel que su código hace lo que debe de hacer
-Aquel que su código no hace lo que no debe de hacer
-Aquel que su código es limpio, reusable y con comentarios cuando de verdad haga falta.
-Aquel que hasta cierto punto optimiza el código que genera (depende de las prisas).
Lo demás son frikadas. Que lo mete en 4K? Y?
Ahorrarse bytes no significa nada. Y menos hoy en día con GB de espacio hasta en un móvil.
Lo que suele ocupar en un programa no es el código, son los datos.