Recientemente (hace unos años) hubo algunos rumores en los sitios web de programación sobre una implementación de Tetris en 140 Bytes . ...
Resulta que aunque es pequeño, es una versión simplificada de Tetris, y ni siquiera una implementación completa. Solo la función lógica central cabe en 140 bytes de Javascript. Para ejecutarlo realmente, necesita otros ~ 840 caracteres de HTML.
¡Podemos hacerlo mejor!
Este desafío es implementar una versión completa de "Binary Tetris" en la menor cantidad de tweets posible.
Reglas binarias de Tetris:
- El programa debe mostrar un campo de juego que contenga al menos 5 columnas y 6 filas de celdas.
- Se puede utilizar cualquier método de visualización, siempre que los bloques y los bordes del campo estén claramente marcados.
- Debe haber al menos dos tipos de bloques:
#
y##
. El apoyo adicional del bloque, como los###
bloques angulares con forma de L, serán votados por mí: P y el juego más completo de tetris binario (la mayoría de los bloques como las características originales y de rotación) ganarán mi felicidad y una posible recompensa de hasta 50 repeticiones. - Se agregan nuevos bloques al campo en la fila superior, y una celda de bloque debe ocupar la columna central.
- Los bloques descienden hacia la fila inferior a una velocidad fija. Los bloques deben descender incluso sin la intervención del usuario.
- Cuando los bloques tocan el fondo del campo o un bloque inferior, dejan de caer y se fijan en su lugar. Se agrega un nuevo bloque.
- Cuando todas las columnas de la fila están llenas de bloques, la fila se vacía y todos los bloques fijos de arriba se despliegan una fila.
- El programa debe responder a las pulsaciones de teclas. Debe haber 3 teclas únicas que realicen las siguientes funciones.
- desplazar el bloque actual a la izquierda 1 columna
- desplazar bloque actual derecha 1 columna
- desplazar el bloque actual hacia abajo 1 fila
- Cada tweet solo puede tener 140 caracteres. Se permite el uso de caracteres de varios bytes que se pueden poner en tweets.
Las reglas para lo que puede estar en un tweet es simple. Si puedes tuitearlo, puedes usarlo.
Los idiomas interpretados siguen las mismas reglas. Cada sección debe seguir las especificaciones. Siempre que no se produzcan errores en el tiempo de ejecución (y el resto es válido siguiendo las especificaciones) su respuesta es válida Reglas de golf:
Debido a que la implementación original era "tweetable", este desafío requiere lo mismo. Las entradas deben poder transmitirse como una serie de tweets (líneas de 140 caracteres o menos).El primer tweet debe contener el nombre del compilador / intérprete, el nombre del programa y cualquier argumento de la línea de comandos.
- se guardará como archivo "P0"
- Los siguientes N tweets deben contener el programa como una serie de líneas.
- Cada tweet se almacenará en un archivo con el nombre T <n>, donde n es 1..N
- Cada línea se agregará a las líneas anteriores y se compilará o interpretará. Debe producir un archivo objeto o programa válido.
- El programa no necesita ser funcional hasta que se agregue la última línea.
El programa se ejecutará de la siguiente manera (pseudo-bash)
interp,prog,args = split P0 /\s/ touch $prog for file in ./T* do cat $prog file > $prog $interp $prog $args die("FAIL") if $? #detect error done
El intérprete debe ser un programa ejecutable comúnmente disponible que aún no implemente Tetris.
Puntuación :
Fewest Tweets, incluido P0. Lazos rotos por el mayor número de caracteres de reserva (140 * números de tweets - recuento total de caracteres).
Entradas de ejemplo
chrome a.htm
<html><div id="output"></div></html>
<script>cool java script here</script>
Puntuación = 3 (334 de repuesto)
cc a.c ;a.out
main(){/*cool prog here*/}
Puntuación = 2 (241 de repuesto)
tetris
Puntuación = 1 (134 de repuesto) si fuera legal, lo cual no es
Gracias especiales
Se me permitió publicar esto por el consentimiento de Ashelly aquí
fuente
Respuestas:
Python 3, Puntuación de 5 Tweets (242 de repuesto, contando P0)
-19 bytes gracias a Jonathan Allan !
El recuento adicional no tiene en cuenta las nuevas líneas entre tweets.
Tweet 1 (Declaración, 12 bytes)
Tweet 2 (70 bytes)
Tweet 3 (129 bytes)
Tweet 4 (113 bytes)
Tweet 5 (134 bytes)
Programa completo (449 bytes)
Hace algún punto malicioso de pirateo y almacena el campo y la pieza en dos enteros. Trataré de publicar una explicación pronto.
Nota: Esto solo se ejecuta en Windows, pero podría cambiarse a Linux a través de
msvcrt
→getch
y"cls"
→"clear"
. Además, la entrada de caracteres no funciona en IDLE de Python, por lo que recomiendo ejecutarlo en otro lugar.fuente
\xe0
es cuatro bytes, no uno, por lo que el tweet 3 debería ser 130. Parece que se perdiótime.sleep(.1);c+=1
del tweet 4 y cambió el orden (no sé si el cambio de orden es intencional) y nuevamente\n
es dos bytes, no uno, por lo que debería ser 134 .sleep
en mi máquina.c%10<1
y eliminarc=0
.JavaScript (4 Tweets /
343317 bytes / 243 de repuesto)No estoy muy seguro acerca de los requisitos del formato de encabezado y Tweets, por lo que le recomendamos que lo corrija. Todavía se puede afeitar un poco más, estoy seguro.
Tweet 1 - P0 (11 bytes)
Tweet 2 (82 bytes)
Tweet 3 (126 bytes)
Tweet 4 (98 bytes)
Ejecútelo en JSFiddle: https://jsfiddle.net/CookieJon/7Lenhcge/
(Haga clic en el panel de salida para proporcionar foco para eventos de teclado)
fuente