Tecnología, Internet y juegos
132 meneos
3771 clics
Tic-Tac-Toe (tres en raya) implementado en una llamada a printf [ENG]

Tic-Tac-Toe (tres en raya) implementado en una llamada a printf [ENG]

Implementado por Nicholas Carlini para IOCCC 2020 (The International Obfuscated C Code Contest). Aunque la finalidad principal de printf es hacer de "El único debugger real", también resulta que es Turing completo (ver "Control-Flow Bending: On the Effectiveness of Control-Flow Integrity" donde se explica en un paper académico).

| etiquetas: c , ioccc , tic-tac-toe , printf
71 61 2 K 161
71 61 2 K 161
  1. En una llamada dentro de un while y un huevo de macros.
  2. Alucinante. Para quien lo quiera probar:

    git clone github.com/carlini/printf-tac-toe
    cd printf-tac-toe
    gcc printtt.c
    ./a.out
  3. #1 Ya me parecía muy raro que printf fuese turing-complete.
  4. Un programa que necesita input del usuario en una llamada que no lee input del usuario.

    No sé, Rick...

    We ab^H^Huse this fact to implement a the logic of tic-tac-toe entirely within this one printf call (and a call to scanf() to read user input).

    Bingo.
  5. #1 Es ingenioso pero ciertamente no es sólo un printf. Además de los chorro cientos define que realmente me preocupan poco esta el while que es la clave para poder afirmar eso de "Turing completo". Es un poco fake lo que no quiere decir que esté carente de mérito.
  6. #4 The first time the printf() call runs, it writes out "%hhd" to create the create the scanf() format string. :shit: :shit: :shit:
  7. En dos palabras, aco jonante.
  8. #8 sin usar un debugger o tiras de stdout o de stderr, no hay más.
  9. #8 se llama “loggear”
  10. #8 pues a veces no hay otra opción y es lo que te queda, utilizar trazas de debug.
  11. #11 Por ejemplo si intentas debuggear web en un dispositivo IOS desde un PC o si utilizas una librería externa que está mal y en modo debug se jode y que no puedes modificar por ser una caja negra. Como dice #11 usar el debugger no siempre es una opción.
  12. Si no está en español, tienes que indicar en qué idioma está :troll:
  13. Siempre me dio coraje el printf con sus crípticos parámetros.
  14. ey a mi me tocó hacer un tres en raya en primero de carrera en c++ :-)
  15. #14 El lenguaje C es lo mejor que ha parido madre. Lo demás es mierda pura
  16. #8: Es mi código fuente y lo escribo como quiero. :-P
  17. #13: Está en %N. :-P
  18. Ese ejemplo no demuestra que `printf` sea Turing-completo.
  19. #8 es como los alert de javascript...
  20. impresionante
comentarios cerrados

menéame