edición general
335 meneos
12625 clics
¿Qué programarías en 4096 caracteres de código en C?

¿Qué programarías en 4096 caracteres de código en C?

É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
175 160 1 K 744 mnm
175 160 1 K 744 mnm
Comentarios destacados:              
#8 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

Yo creía que sabía programar. Mejor me dedico a cultivar tomates :-(
  1. #include <stdio.h>

    int main()
    {
    printf("POLLAn");
    return 0;
    }
  2. #1 Supongo que has querido poner "POLLA\n".
  3. Música en 90 caracteres.

    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
  4. #include <stdio.h>
    int main()
    {
    printf("Two girls posting in C .... nice #1 and #2 n ;)");
    return 0;
    }
  5. #1 Falta de uso... no problem google te ayuda: bit.ly/1eAhHvU A ver si alegras esa cara, xD
  6. Igualito que los programas de hoy en día en java.
  7. Por cierto he conseguido ejecutar FreeDOS:


    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
  8. 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

    Yo creía que sabía programar. Mejor me dedico a cultivar tomates :-(
  9. #2 puts("POLLA"); :-P
  10. #include <stdio.h>

    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
    }
  11. Avatares redondos! Y haría que me sobraran muchos caracteres sólo para dar más rabia.
  12. Depende de las librerías que te dejen usar.
  13. #include "SDL.h"

    Ah vale, si puedo usar las librerías que quiera, la cosa cambia.
  14. #15 Solo usa SDL como "pantalla" para visualizar los píxeles que genera. Lo demás es C puro.
  15. Joder hay niveles, niveles y niveles, pero lo de emular completo 8086 es un puto genio xD.
  16. #17 No soy programador pero en los #defines mete bastantes atajos.
  17. Más de alguno programa parecido en mi empresa. No hay Dios que entienda nada.
  18. #20 En #19, usa la API de DirectX. Así, cualquiera :-P .
  19. Este tio hace cosas parecidas:

    bellard.org/

    bellard.org/projects.html

    Es el padre de Qemu y FFMPEG (Usado por VLC y demás).
  20. #20 Que gran verdad. Primero empezamos con el truco del swap. Ahora la memoria es tan barata que en cuanto el disco duro rasca sin avisar compramos 16 GB más. El tamaño de los buffers dinámicos los metemos en variables de tipo long, y por supuesto ni queremos oir hablar de campos con longitud de bits... ¿tenemos que guardar un booleano? A tomar por saco, en un int para él solito.

    Los buenos programadores teníamos un Spectrum de 16K y despreciabamos a los que se compraban en el 48K, por despilfarradores de RAM.
  21. #24 Emulador de Spectrum 48k. Funciona en un i386 con DOS y compatibles como FreeDOS. Se creó en la guerra yugoslava mientras los programadores esquivaban el fuego de los francotiradores.

    www.worldofspectrum.org/warajevo/Story.html
  22. #8 Saber encajar un programa en 4096 caracteres te hace un frikazo con muy poca vida social, pero no necesariamente un buen programador.

    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
  23. #26 Es como los records Guiness: una chorrada admirable. xD :troll:
  24. Siguiendo los links he llegado a una pagina donde puedes probar las formulas musicales
    wurstcaptures.untergrund.net/music/

    Es puro vicio xD

    He dado con esta formula.

    wurstcaptures.untergrund.net/music/?oneliner=(((t<<5)|(t>>1)) /(t>>16)
  25. #3 <stdin>: In function ‘main’:
    <stdin>:1:1: warning: right shift count >= width of type [enabled by default]
  26. con librerias externas que ocupan cientos de megas yo tambien hago el windows 8 con 3 lineas
  27. #10 Tranqui, tronco... todo lo que han hecho ha sido compactar el código del emulador que Fabrice Bellard ya hizo hace años. Como son unos impresentables han evitado nombrar la fuente original.


    bellard.org/

    bellard.org/jslinux/
  28. #26 como te gustaría tener un presidente que supiera modular los problemas con tan poco recursos :troll:

    <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 :troll: si no, mira las ofertas de trabajo son los que mas hace falta y viajan mucho al extranjero
    </ironic> >:-(
  29. #33 buenísimo

    #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. :-)
  30. #28 #30 Si os va el tema ese "music oneliner player" nació por estos lares:
    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)&
  31. Interesante método para comprimir código con DEFINE's.
  32. #8 Teniendo experiencia suficiente, cualquiera hace cualquier cosa. La diferencia es el tiempo y las ganas que le pone cada uno. No está de más recordar que cuando uno se vaya a la tumba, sus habilidades no sirven de nada para poner en perspectiva el tiempo que cuesta aprender algo vs. si merece la pena aprenderlo.
  33. Se nota que es un concurso, si programase yo eso me caería una buena bronca de mi profesor de Radiocomunicaciones, por no poner comentarios. xD

    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
  34. Y luego hay cosas como esto:

    www0.us.ioccc.org/2004/arachnid.c

    :-|
  35. Aquí quería decir un detalle, ¿valorariamos como buen cirujano a alguien que sepa hacer cirugas a corazón abierto con un juego de cubertería?

    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.
  36. #43 "Tampoco tiene tanto sentido optimizar el código cuando el compilador hace un trabajo mucho mejor."

    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
  37. #44 Por eso digo que en un proyecto real hay que saber cuando haces una cosa u otra, optimizar solo porque eres guay, es una chorrada.

    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.
  38. #32 Te equivocas, SDL solo dibuja la matriz de pixeles que genera en un recuadro. Ejerce de "pizarra", nada más. La pantalla VGA, el código de arranque para los disquetes, disco duro y demás está en la BIOS externa del emulador, que es exactamente el funcionamiento de aquellos PC con CPU 8086 de Intel

    Así que sí, ha creado un emulador de PC XT.
  39. No confundamos, un buen programador es:
    -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.
  40. Aquí versiones para Win7 de "4kB Demo - Elevated door RGBA & TBC": jansloot.telcomsoft.nl/Sources-2/DemoScene/Elevated_4kB/Elevated_4kB.h
  41. #20 Estudio ingeniería informática, y el profesor nos dice: "Si ahora el Eclipse os lo hace todo" Java
  42. #50 profesores malos hemos tenido todos
comentarios cerrados

menéame