TECNOLOGíA, INTERNET, JUEGOS
132 meneos
3693 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
Alucinante. Para quien lo quiera probar:

git clone github.com/carlini/printf-tac-toe
cd printf-tac-toe
gcc printtt.c
./a.out
En una llamada dentro de un while y un huevo de macros.
#1 Ya me parecía muy raro que printf fuese turing-complete.
#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.
ey a mi me tocó hacer un tres en raya en primero de carrera en c++ :-)
Siempre me dio coraje el printf con sus crípticos parámetros.
#14 El lenguaje C es lo mejor que ha parido madre. Lo demás es mierda pura
En dos palabras, aco jonante.
Si no está en español, tienes que indicar en qué idioma está :troll:
#13: Está en %N. :-P
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.
#4 The first time the printf() call runs, it writes out "%hhd" to create the create the scanf() format string. :shit: :shit: :shit:
Aunque la finalidad principal de printf es hacer de "El Unico Debuger Real"

Hasta la polla de la peña debugeando escupiendo mierda en stdout.
#8 sin usar un debugger o tiras de stdout o de stderr, no hay más.
#8 se llama “loggear”
#8 pues a veces no hay otra opción y es lo que te queda, utilizar trazas de debug.
#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.
#8: Es mi código fuente y lo escribo como quiero. :-P
#8 es como los alert de javascript...
Ese ejemplo no demuestra que `printf` sea Turing-completo.
impresionante
comentarios cerrados

menéame