La historia detrás de Micro Tetris pueden leerla en el archivo README. Resulta que las 424 líneas de tetris.c están basadas en las 19 del ganador del concurso de código C ofuscado al mejor juego. De hecho, me permito presentárselas. Pueden copiarlas en un archivo .c y luego compilarlas. Les aseguro que funciona perfectamente.
|
etiquetas: tetris , linux , gnu , programación , c
Es un desafio!
Y de las tres lineas, dos eran comentarios en plan "/*Muere Mariano Muere*/"
#AguirreFacts
#9 Si, en Python tambien seria una sola linea:
import tetris
Aún así sigue estando genial.
tetris.c:1: warning: data definition has no type or storage class
tetris.c:1: warning: cast from pointer to integer of different size
tetris.c:1: error: initializer element is not constant
tetris.c:1: error: (near initialization for ‘v[0]’)
tetris.c: In function ‘u’:
tetris.c:6: warning: incompatible implicit declaration of built-in function ‘printf’
tetris.c: In function ‘main’:
tetris.c:16: warning: incompatible implicit declaration of built-in… » ver todo el comentario
[root@mypc ~]# gcc -o tetris tetris.c
tetris.c:1: aviso: la definición de datos no tiene tipo o clase de almacenamiento
tetris.c:1: error: el elemento inicializador no es constante
tetris.c:1: error: (cerca de la inicialización de ‘v[0]’)
tetris.c: En la función ‘u’:
tetris.c:6: aviso: declaración implícita incompatible de la función interna ‘printf’
tetris.c: En la función ‘main’:
tetris.c:16: aviso: declaración implícita incompatible de la función interna ‘printf’
tetris.c:18: aviso: declaración implícita incompatible de la función interna ‘fprintf’
tetris.c:19: aviso: el paso del argumento 1 de ‘fprintf’ crea un puntero desde un entero sin una conversión
A mi me ha compilado.
(gcc version 4.3.4 (Debian 4.3.4-6))
vortex:/tmp# gcc tetrix.c -o tetrix
tetrix.c:1: warning: data definition has no type or storage class
tetrix.c: In function ‘u’:
tetrix.c:1: warning: incompatible implicit declaration of built-in function ‘printf’
tetrix.c: In function ‘main’:
tetrix.c:1: warning: incompatible implicit declaration of built-in function ‘printf’
tetrix.c:1: warning: incompatible implicit declaration of built-in function ‘fprintf’
tetrix.c:1: warning: passing argument 1 of ‘fprintf’ makes pointer from integer without a cast
include <stdio.h>
ES UNA SOLA LINEA DE CODIGO
Quitad los retornos de carro y con GCC 4.3.4 As Is compila sin problemas.
No me puse a ordenarlo, pero estoy seguro que si lo tabulas correctamente son 100 lineas o mas, pero entonces dejaría de tener posibilidades de llegar a portada de meneame...
El mérito de hacer un código reducido es que se pueda leer. De lo contrario distribuiríamos todo ya semi compilado para reducir espacio y no existirían ni tabulaciones, ni espacios ni comentarios.
De todas formas, no considero que quitar saltos de linea y tabuladores sea ofuscar codigo. Un código ofuscado es mucho más que eso, de lo contrario se podría "desofuscar" con algún programa automático.
Por cierto, supongo que en el concurso una línea estará formada por los clásicos 80 caracteres
</Pedantic mode>
homepages.cwi.nl/~tromp/tetris.html
Novedoso, novedoso, no es que sea.
Existe entre las entradas una hoja de cálculo (incluyendo representaciones gráficas), en 20 ó 30 líneas de código... Obviamente lo de las líneas es una gilipollez infinita (deberíamos contar el número de instrucciones...)
Una de las más originales es esta:
www.de.ioccc.org/years.html#1990_stig
Os pasteo el código fuente de stig.c:
---- BOF
c
---- EOF
El resto dejo que lo averigüeis vosotros
>>> c=1+2;a=c+3;b=6+7;print a+b+c
22
>>> print 'hola mundete';
hola mundete
es un poco redundante el ';' al final de una línea... creo yo
infumableofuscado como este, le colgamos de los webs. El buen código debe ser legible y comprensible por humanos. Los tiempos del ahorro de memoria y la optimización del código ya pasaron. Ahora se trata de facilitar el trabajo a las personas, tanto al usuario como al probesito programador que después tiene que mantener o modificar el programa.#CaptainObviousStrikesBack
Ademas dejando de lado que es un concurso de codigo OFUSCADO (¿ESQUE NADIE LEE LAS PUTAS NOTICIAS?) pues me da que cumple a la perfeccion con su cometido que es:
1) Jugar al tetris
2) Hacer que sea dificil de interpretar
Para todo lo demas, lo que dice #35
</Sheldon>
#37 Si
es.wikipedia.org/wiki/Código_ofuscado
Tiene que ser inentendible y nada claro. Ahi esta la gracia del codigo ofuscado.
#35 Habría que poner un wiki con las etiquetas para usar, porque he buscado y solo tu usas esa, cuando sería divertido encontrar comentarios como el tuyo de otra gente.
No todo en esta vida es hacer páginas y servicios web, hay más cosas donde sí es necesario preocuparse de esas cosas y donde se usa C.
Vamos, que la culpa de escribir código cerdo no es del lenguaje sino del programador.
#!/usr/bin/perl
$_='A=15; B=30; select(stdin); $|=1; select(stdout);$|=1; system
"stty -echo -icanon eol 01"; for C(split(/s/,"010.010.010.010
77.77 022.020.020 330.030.030 440.044.000 055.550.000 666.060.".
"000")){D=0;for E(split(/./,C)){F=0;for G(split("",E)){C[P][F++
][D]=G} D++}J[P]=F; I[P++] =D}%L=split(/ /,"m _".chr(72)." c 2".
chr(74)." a _m");sub a{for K(split(/ /,shift… » ver todo el comentario