Descrição
Consideramos uma versão ligeiramente simplificada do Tetris, em que cada movimento consiste em:
- girando a peça no sentido horário, 0 a 3 vezes
- posicionando a peça em uma determinada coluna
- queda rápida
O objetivo é determinar o número de linhas concluídas, dada uma lista desses movimentos do Tetris.
As linhas concluídas são removidas quando as peças são descartadas, seguindo as regras padrão do Tetris.
Playfield
O campo de jogo tem 10 colunas de largura. Não há Game Over e presume-se que sempre haja espaço e tempo suficientes para executar as ações acima, independentemente da configuração do campo de jogo. A altura do campo de jogo realmente não importa aqui, mas você pode usar as 22 linhas padrão como limite superior.
Formas de tetrominós
Entrada / Saída
Entrada
Uma lista separada por vírgula de movimentos do Tetris codificados com 3 caracteres. Os dois primeiros caracteres descrevem a forma de Tetromino a ser usada e o último descreve a posição em que caiu.
- Tetromino:
I
,O
,T
,L
,J
,Z
ouS
, na mesma ordem como acima. - Número de rotações no sentido horário:
0
a3
- Coluna:
0
para9
. Esta é a coluna na qual o canto superior esquerdo da peça (marcado com umx
na foto acima) fica após a rotação 1
Supõe-se que todas as movimentações na lista fornecida são válidas. Não há necessidade de verificar entradas inválidas, como I07
( I
forma horizontal colocada muito à direita).
1 Você pode implementar um algoritmo de rotação real ou codificar todas as formas diferentes, contanto que ele x
esteja localizado na coluna fornecida pelo terceiro caractere da movimentação.
Saída
Número de linhas concluídas.
Exemplo
O00,T24
irá gerar a primeira posição e O00,T24,S02,T01,L00,Z03,O07,L06,I05
irá gerar a segunda posição.
Portanto, a seguinte sequência irá gerar um Tetris e deve retornar 4
:
O00,T24,S02,T01,L00,Z03,O07,L06,I05,I19
Casos de teste
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 teste
Você pode usar este JSFiddle para testar uma lista de movimentação.