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).
#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.
#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.
Comentarios
En una llamada dentro de un while y un huevo de macros.
Alucinante. Para quien lo quiera probar:
git clone https://github.com/carlini/printf-tac-toe
cd printf-tac-toe
gcc printtt.c
./a.out
#1 Ya me parecía muy raro que printf fuese turing-complete.
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.
#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.
#4 The first time the printf() call runs, it writes out "%hhd" to create the
create thescanf() format string.En dos palabras, aco jonante.
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.
Si no está en español, tienes que indicar en qué idioma está
Siempre me dio coraje el printf con sus crípticos parámetros.
ey a mi me tocó hacer un tres en raya en primero de carrera en c++
#14 El lenguaje C es lo mejor que ha parido madre. Lo demás es mierda pura
#8: Es mi código fuente y lo escribo como quiero.
#13: Está en %N.
#1
Ese ejemplo no demuestra que `printf` sea Turing-completo.
#8 es como los alert de javascript...
impresionante