Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Un Tetris completo en una sola línea de BASIC

Uno de los retos más comunes entre los programadores es hacer un programa que haga el mayor número de cosas en el menor número de...

tetris-background

Uno de los retos más comunes entre los programadores es hacer un programa que haga el mayor número de cosas en el menor número de bytes. La unidad que muchas veces se toma es la de una sola línea en BASIC, por ejemplo, la cual puede no ser mayor a 256 bytes (dependiendo del BASIC que se use). Martin Hollis y David Moore escribieron un Tetris completo con la ayuda de Olly Betts.

He aquí el código en BBC BASIC:

0d=d:IFdVDUd:a=POINT(32*POS,31-VPOS<<5):RETURNELSEMODE9:GCOL-9:CLG:O
FF:d=9:REPEATVDU30:REPEATGOSUBFALSE:IFPOS=28VDUPOS,15,VPOS,24;11,26:IF0E
LSEIFa=0PRINT:UNTIL0ELSEUNTILVPOS=25:v=ABSRNDMOD7:i=0:VDU4895;3:REPEATm=
9-INKEY6MOD3:FORr=TRUETO1:t=rANDSGNt:IFt=rCOLOURv-15:VDUrEORm:i+=m=7AND9
-6*r:IF0ELSEFORn=0TO11:d=n/3OR2EORd:GOSUBFALSE:IF1<<(n+i)MOD12AND975AND&
C2590EC/8^vVDU2080*ABSr;:t+=a:IF0ELSENEXT,:VDU20:UNTILt*LOGm:UNTILVPOS=3

Las características del programa son impresionantes:

  • Rotación en sentido de las manecillas del reloj y en contra de ellas
  • Detección de colisiones
  • Mover bloque a la derecha
  • Mover bloque a la izquierda
  • Efectos de sonido
  • Pausa
  • Selección de las teclas a usar
  • Juego cooperativo de dos jugadores
  • Juego competitivo entre dos jugadores
  • Software educacional en muchos sentidos
  • Detección automática del final de juego

A este tipo de competencias les llaman “rheolismo”, que no es otra cosa que el escribir todo un programa en una sola línea de BASIC. Esto es el equivalente al concurso del código ofuscado de C. El BASIC usado es el que viene con las antiguas máquinas ACORN. El Tetris se escribió hace algún tiempo pero bien podría ser interesante para estudiarlo y aprender algo en el camino. A diferencia del código ofuscado, que lo que en términos reales hace que el programa sea realmente ilegible, aquí se trata de brevedad y de no ofuscación. Sin embargo, el resultado bien puede no ser diferente.

La escritura del programa llevó unas diez semanas en 1992 y sin duda es un ejemplo meritorio de eficiencia en términos de memoria. Una explicación del código para las máquinas ACORN, evidentemente, está dado aquí. El programa más limpio, más legible, puede verse aquí:

tetris-explicado

Hay que reconocer, sin embargo, que el programa usa el esquema gráfico (primitivo para los estándares de ahora), que permiten desplegar pixeles de alguna manera, pero desde luego, sin las facilidades que hoy en día tenemos en cualquier entorno gráfico moderno. No obstante esto, me parece un reto interesante, aunque no se haga en una sola línea. ¿Podría usted escribir un Tetris en el menor número de bytes posible?

Referencias:

Rheolism

Comentarios