Opis
Rozważamy nieco uproszczoną wersję Tetris, w której każdy ruch składa się z:
- obracając element zgodnie z ruchem wskazówek zegara, od 0 do 3 razy
- pozycjonowanie elementu w danej kolumnie
- szybki spadek
Celem jest określenie liczby ukończonych linii, biorąc pod uwagę listę takich ruchów Tetris.
Ukończone rzędy są usuwane w miarę upuszczania elementów, zgodnie ze standardowymi zasadami Tetris.
Boisko
Pole gry ma szerokość 10 kolumn. Nie ma końca gry i zakłada się, że zawsze jest wystarczająco dużo miejsca i czasu na wykonanie powyższych czynności, bez względu na konfigurację pola gry. Wysokość pola gry tak naprawdę nie ma znaczenia, ale możesz użyć standardowych 22 rzędów jako górnej granicy.
Kształty Tetrominoes
Wejście wyjście
Wkład
Rozdzielona przecinkami lista ruchów Tetris zakodowanych 3 znakami. Pierwsze dwie znaki opisują kształt Tetromino, a ostatni opisuje pozycję, w której został upuszczony.
- Tetromino:
I
,O
,T
,L
,J
,Z
iS
, w tej samej kolejności, jak opisano powyżej. - Liczba obrotów w prawo:
0
do3
- Kolumna:
0
do9
. Jest to kolumna, w którejx
po obrocie znajduje się lewy górny róg elementu (oznaczony na powyższym obrazku) 1
Zakłada się, że wszystkie ruchy na podanej liście są prawidłowe. Nie trzeba sprawdzać, czy nie ma niepoprawnych wpisów, takich jak I07
( I
kształt poziomy umieszczony zbyt daleko po prawej stronie).
1 Możesz zaimplementować prawdziwy algorytm obrotu lub na stałe zakodować wszystkie różne kształty, o ile x
jest on umieszczony w kolumnie podanej przez trzeci znak ruchu.
Wydajność
Liczba ukończonych linii.
Przykład
O00,T24
wygeneruje pierwszą pozycję i O00,T24,S02,T01,L00,Z03,O07,L06,I05
wygeneruje drugą pozycję.
Dlatego następująca sekwencja wygeneruje Tetris i powinna zwrócić 4
:
O00,T24,S02,T01,L00,Z03,O07,L06,I05,I19
Przypadki testowe
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
Strona testowa
Możesz użyć tego JSFiddle do testowania listy ruchów.