Łączenie luk z kawałkami Tetris


14

Powinieneś napisać program lub funkcję, która podaje listę bloków tetris jako dane wyjściowe lub zwraca największą lukę między dwoma punktami na tym samym poziomie wysokości, którą mogą połączyć elementy.

7 rodzajów elementów tetris to:

Cegły Tetris

Do tych elementów będziemy odnosić się odpowiednio literami I, J, L, O, S, T i Z, odnosząc się do ich kształtów. Możesz obracać pionki, ale nie możesz ich odzwierciedlać tak jak w grze Tetris.

Naszym zadaniem jest stworzenie ortogonalnie połączonego obszaru (strony połączone z bokami) z podanych elementów. Obszar ten powinien łączyć (również prostopadle) dwa kwadraty jednostkowe, które są na tej samej wysokości. Powinniśmy znaleźć największą możliwą przerwę między dwoma kwadratami, którą możemy pokonać.

Szczegółowe przykłady

Za pomocą elementu L możemy połączyć odstęp 3

   L
XLLLX

Za pomocą elementu S możemy połączyć odstęp 2

  SS
XSSX

Za pomocą elementów S, S, O możemy połączyć odstęp 7 (zauważ, że nie możemy połączyć odstępu 8)

 S
XSSOO SSX
  SOOSS

Wejście

  • Ciąg reprezentujący dostępne elementy zawierające tylko wielkie litery I, J, L, O, S, T i Z. Każda litera reprezentuje pełny kawałek tetris.
  • Litery będą w kolejności alfabetycznej w ciągu.
  • Ciąg będzie miał co najmniej jeden znak.

Wynik

  • Pojedyncza dodatnia liczba całkowita, największa luka, którą można połączyć z danymi kawałkami.

Przykłady

Dane wejściowe => Dane wyjściowe

OSS  =>  7

LS  =>  5

LZ  =>  6

ZZZZ  =>  10

LLSSS  =>  14

IIJSSSTTZ  =>  28

IISSSSSS  =>  24

OOOSSSSSSSSSSSSTT  =>  45

IJLOSTZ  =>  21

IJLOSTZZZZZZZ  =>  37

IIJLLLOSTT  =>  31

IJJJOOSSSTTZ  =>  35

To jest golf golfowy, więc wygrywa najkrótszy wpis.


Ahh rozumiem. Patrzyłem na nie takimi, jakimi są.
Tim

Odpowiedzi:


4

CJam, 53

'[,73>qf{1$e=s':+\+~}:+3*I+O-SZ-JO+m0e>ZS-LO+-e>2+3/-

Wypróbuj online

Chodzi o to: przypisz każdą ze zmiennych I, J, ..., Z do liczby wystąpień tej litery i oblicz string length * 3 + I - O. Następnie policz liczbę nieskompensowanych S lub Z: S może być kompensowane przez Z, J lub O, a Z może być kompensowane przez S, L lub O i odejmuj ceil(that number/3), ponieważ tracimy 1 jednostkę na każde 3 S lub Z's.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.