La programación siempre tiene retos, a veces incluso algunos que parecen absurdos. Por ejemplo, hay un concurso para hacer el código de C más difícil de leer por programadores y otros para escribir programas que se escriban a sí mismos. En fin, hay toda una serie de ideas que parecen ridículas pero que en el fondo nos muestran las posibilidades de los lenguajes de programación. Con esto en mente, a alguien se le ocurrió la pregunta de si era posible escribir un programa como Tetris en 140 caracteres (bytes), es decir, el tamaño máximo de un mensaje de Twitter.

Pues parece que es posible -con sus limitaciones- desde luego. En un sitio llamado 140byt.es  dice que tienen una implementación deTetris en 140 bytes.  En este particular sitio, en donde los desarrollos de software son en programas muy cortos, se ocupan de Javascript. Hay código por demás interesante: una función de 140 caracteres o menos, por ejemplo, para desplegarla a todos es equivalente a escribir un programa en Javascript que pueda mandar un SMS o tweet, por mencionar alguna.

Evidentemente esto solamente se hace por diversión. Hay ejemplos magníficos: un visor de fractales Mandelbrot con zoom y paneos o bien, algo más cotidiano, como un checador de números de tarjeta de crédito. Sin embargo, el que ha llamado mucho la atención es la implementación de Tetris. Ok, ok, se trata de un Tetris simplificado, el cual se denomina “Tetris Binario”. y es que no permite rotaciones, pero funciona. Los bloques caen al fondo de la pantalla. Puede -si quiere- jugar la demostración .

La función completa es:

function(a,b,c,d,e){return d+=c,
e=a|b<<d,d<0|a&b<<d&&(a=e=
parseInt((a|b<<c).toString(d=32)
.replace(/v/,””),d),b=new Date%2?1:3),
[a,b,d,e]}

y así es como se ve el tetris binario (la primera imagen fue para ilustrar la idea):

Por supuesto que la verdadera diversión es entender qué hace esta función y cómo trabaja. Para esto hay que saber que la función no incluye el mostrar en la pantalla los resultados o la interacción con el usuario. También es importante saber algunos trucos que se usan en el camino, como el objeto DATE (Fecha), que permite finalmente una forma fácil de obtener números aleatorios. Otra pista es que los bloques que caen se representan como patrones de bits y la lógica de toda la función se basa en la manipulación de los bits. Las buenas noticias es que este programa está muy bien documentado y explicado, como puede verse aquí.