Descripción
Consideramos una versión ligeramente simplificada de Tetris donde cada movimiento consiste en:
- girando la pieza en sentido horario, 0 a 3 veces
- posicionar la pieza en una columna dada
- caída rápida
El objetivo es determinar el número de líneas completadas, dada una lista de tales movimientos de Tetris.
Las filas completas se eliminan a medida que se sueltan las piezas, siguiendo las reglas estándar de Tetris.
Campo de juego
El campo de juego tiene 10 columnas de ancho. No hay Game Over y se supone que siempre hay suficiente espacio y tiempo para realizar las acciones anteriores, sin importar la configuración del campo de juego. La altura del campo de juego realmente no importa aquí, pero puede usar las 22 filas estándar como límite superior.
Formas de tetrominoes
De entrada y salida
Entrada
Una lista separada por comas de movimientos de Tetris codificados con 3 caracteres. Los dos primeros caracteres describen la forma de Tetromino que se utilizará y el último describe la posición donde se dejó caer.
- Tetromino:
I
,O
,T
,L
,J
,Z
oS
, en el mismo orden que anteriormente. - Número de rotaciones en sentido horario:
0
a3
- Columna:
0
a9
. Esta es la columna en la que se encuentra la esquina superior izquierda de la pieza (marcada con unx
en la imagen de arriba) después de la rotación 1
Se supone que todos los movimientos en la lista proporcionada son válidos. No es necesario verificar las entradas no válidas, como I07
( I
forma horizontal colocada demasiado a la derecha).
1 Usted es libre de implementar un algoritmo de rotación real o de codificar todas las formas diferentes, siempre que x
esté ubicado en la columna dada por el tercer carácter del movimiento.
Salida
Número de líneas completadas.
Ejemplo
O00,T24
generará la primera posición y O00,T24,S02,T01,L00,Z03,O07,L06,I05
generará la segunda posición.
Por lo tanto, la siguiente secuencia generará un Tetris y debería regresar 4
:
O00,T24,S02,T01,L00,Z03,O07,L06,I05,I19
Casos de prueba
1) "O00,T24,S02,T01,L00,Z03,O07,L06,I05,I19" -> 4
2) "S00,J03,L27,Z16,Z18,I10,T22,I01,I05,O01,L27,O05,S13" -> 5
3) "I01,T30,J18,L15,J37,I01,S15,L07,O03,O03,L00,Z00,T38,T01,S06,L18,L14" -> 4
4) "S14,T00,I13,I06,I05,I19,L20,J26,O07,Z14,Z10,Z12,O01,L27,L04,I03,S07,I01,T25,J23,J27,O01,
I10,I10" -> 8
5) "O00,T24,L32,T16,L04,Z11,O06,L03,I18,J30,L23,Z07,I19,T05,T18,L30,I01,I01,I05,T02" -> 8
Página de prueba
Puede usar este JSFiddle para probar una lista de movimientos.