Соединяя разрывы с кусочками тетриса


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.