Me gusta mucho el Tetris, pero no soy muy bueno en eso. ¡Solo una vez me gustaría ver esa nave espacial despegar frente a mis propios ojos! Y dado que las computadoras son tan buenas en todo, la única solución posible es hacer un programa para que lo reproduzca por mí ... ¡excepto que vas a hacer eso por mí!
Dado un tetromino (forma hecha de cuatro cuadrados) y un mapa del campo de juego, debe colocar el tetromino de modo que obtenga el mayor número de líneas (hace que el mayor número de filas esté completamente lleno de bloques) y cree el menor número de nuevos agujeros (un espacio vacío que no puede "ver" la parte superior del campo de juego 1 ).
Entrada
La entrada contendrá un carácter en una sola línea que representa el tetromino que cae, seguido de una cuadrícula 10 * 18 2 de espacios ( ) y signos más (
+
).
El personaje representa cualquiera de los siete tetrominoes básicos encontrados en Tetris. Todas las piezas se pueden girar 90 grados, pero no se pueden voltear. Todos los tetrominoes y sus rotaciones son los siguientes:
#
S = ## ##
## #
#
Z = ## ##
## #
# ### ##
L = # # # #
## # ###
# ### ##
J = # # # #
## # ###
# # #
T = ### ## ### ##
# # #
O = ##
##
#
I = # ####
#
#
La cuadrícula representa el campo de juego de Tetris, con +
bloques previamente colocados. Entonces, una entrada de ejemplo podría ser la siguiente:
I
+ ++
+ +++++
++ +++++++
++ +++++++
++ +++++++
++ +++++++
++++++ +++
Salida
Su salida será idéntica a la entrada, pero con el tetromino en la posición ideal. El tetromino debe representarse con #
para diferenciarlos de los bloques colocados previamente. Además de esto, también debe mostrar cuántas líneas / agujeros crea su ubicación en el formulario xL yH
en una nueva línea.
El resultado para el ejemplo dado anteriormente sería el siguiente 3 :
I
+ ++
+ +++++
++#+++++++
++#+++++++
++#+++++++
++#+++++++
++++++ +++
4L 0H
Debe generar solo los mejores resultados; en el caso de que dos o más casos den la misma puntuación, debe generarlos todos (separados por una línea en blanco). Los mejores resultados se determinarán ordenando primero el número de líneas marcadas (descendentes) y luego el número de nuevos agujeros creados (ascendentes). Entonces, 1L 1H
es un mejor puntaje que 0L 0H
.
Trabajaré para crear una lista de varias entradas y salidas esperadas con las que pueda probar su programa. Mira este espacio.
Reglas y Desambiguación
- Este es el código de golf , por lo que gana la implementación correcta más corta.
- La entrada / salida puede estar en cualquier medio que se adapte a su idioma de destino (por ejemplo, archivo, stdin / stdout, área de texto).
- Si su idioma de destino no admite la entrada de varias líneas (o no es conveniente hacerlo), puede delimitar cada línea de la entrada con comas (
,
). - Puede omitir la salida de cualquier línea en blanco en la cuadrícula.
- Recuerde que el tetromino cae desde arriba, no puede colocar la pieza "bajo tierra". Por lo tanto, puede suponer que todas las ubicaciones posibles de la pieza estarán en "nivel de superficie" (es decir, no hay bloques entre la pieza y la parte superior del tablero).
- Suponga que nunca habrá una situación en la que se vea obligado a terminar un juego (el tetromino colocado toca el centro superior del campo).
- Las soluciones que son idénticas en la salida deben omitirse (por ejemplo, hay 3 salidas de soluciones si gira ingenuamente la
O
pieza).
1 Soy consciente de que esto creará algunos falsos positivos, pero es una simplificación.
2 Este es el tamaño de cuadrícula utilizado en la versión de Game Boy.
3 Sí, 0H
es correcto. Comprueba de nuevo, dije nuevos agujeros; ^)