З'єднання прогалин із шматочками тетрісу


14

Вам слід написати програму або функцію, яка надала список блоків тетрису як вихідні виходи або повертає найбільший зазор між двома точками на тому ж рівні висоти, з якими можуть з'єднуватися шматки.

7 типів тетрісу:

Тетрисові цегли

Ми будемо позначати ці фрагменти літерами I, J, L, O, S, T і Z відповідно, посилаючись на їх форми. Ви можете обертати шматки, але не можете їх відобразити так, як у грі в тетріс.

Наше завдання - створити з заданих частин ортогонально пов'язану область (сторони, з'єднані з сторонами). Ця область повинна з'єднувати (також ортогонально) два одиничні квадрати, які знаходяться на одній висоті. Ми повинні знайти найбільший можливий проміжок між двома квадратами, які ми можемо подолати.

Детальні приклади

За допомогою шматка L ми можемо з'єднати зазор 3

   L
XLLLX

За допомогою шматка S ми можемо з'єднати зазор 2

  SS
XSSX

За допомогою шматочків S, S, O ми можемо з'єднати зазор 7 (Зауважте, що ми не можемо з'єднати проміжок 8)

 S
XSSOO SSX
  SOOSS

Вхідні дані

  • Рядок, що представляє наявні фрагменти, що містять лише великі літери I, J, L, O, S, T і Z. Кожна літера являє собою повний шматок тетрісу.
  • Букви будуть в алфавітному порядку в рядку.
  • Рядок буде мати принаймні один символ.

Вихідні дані

  • Єдине додатне ціле число, найбільший проміжок, пов'язаний із заданими фрагментами.

Приклади

Вхід => Вихід

OSS  =>  7

LS  =>  5

LZ  =>  6

ZZZZ  =>  10

LLSSS  =>  14

IIJSSSTTZ  =>  28

IISSSSSS  =>  24

OOOSSSSSSSSSSSSTT  =>  45

IJLOSTZ  =>  21

IJLOSTZZZZZZZ  =>  37

IIJLLLOSTT  =>  31

IJJJOOSSSTTZ  =>  35

Це код-гольф, тому найкоротший запис виграє.


А-а, я бачу. Я дивився на них як є.
Тім

Відповіді:


4

CJam, 53

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

Спробуйте в Інтернеті

Ідея полягає в тому, щоб призначити кожній із змінних I, J, ..., Z кількість випадкових випадків цієї літери та обчислити string length * 3 + I - O. Потім порахуйте кількість некомпенсованих S або Z: S може бути компенсовано Z, J або O, а Z можна компенсувати S, L або O, і відняти ceil(that number/3), оскільки ми втрачаємо 1 одиницю на кожні 3 S або Z.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.