Conexão de lacunas com peças Tetris

14

Você deve escrever um programa ou função que forneça uma lista de blocos tetris como saídas de entrada ou retorne a maior diferença entre dois pontos no mesmo nível de altura que as peças podem conectar.

Os 7 tipos de peças de tetris são os seguintes:

Tijolos de Tetris

Iremos nos referir a essas peças pelas letras I, J, L, O, S, T e Z, respectivamente, referentes às suas formas. Você pode girar as peças, mas não pode espelhá-las como em um jogo Tetris.

Nossa tarefa é criar uma área conectada ortogonalmente (lados conectados aos lados) a partir das peças fornecidas. Esta área deve conectar (também ortogonalmente) dois quadrados de unidades que estão na mesma altura. Deveríamos encontrar a maior lacuna possível entre os dois quadrados que podemos preencher.

Exemplos detalhados

Com a peça L, podemos conectar um espaço de 3

   L
XLLLX

Com a peça S, podemos conectar um espaço de 2

  SS
XSSX

Com as peças S, S, O, podemos conectar um espaço de 7 (Observe que não podemos conectar um espaço de 8)

 S
XSSOO SSX
  SOOSS

Entrada

  • Uma string representando as peças disponíveis contendo apenas as letras maiúsculas I, J, L, O, S, T e Z. Cada letra representa uma peça completa de tetris.
  • As letras estarão em ordem alfabética na sequência.
  • A cadeia terá pelo menos um caractere.

Resultado

  • Um único número inteiro positivo, a maior lacuna conectável às partes fornecidas.

Exemplos

Entrada => Saída

OSS  =>  7

LS  =>  5

LZ  =>  6

ZZZZ  =>  10

LLSSS  =>  14

IIJSSSTTZ  =>  28

IISSSSSS  =>  24

OOOSSSSSSSSSSSSTT  =>  45

IJLOSTZ  =>  21

IJLOSTZZZZZZZ  =>  37

IIJLLLOSTT  =>  31

IJJJOOSSSTTZ  =>  35

Este é o código-golfe, portanto a entrada mais curta vence.

randomra
fonte
Ahh, entendi. Eu estava olhando para eles como estão.
Tim

Respostas:

4

CJam, 53

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

Experimente online

A ideia é: atribuir cada uma das variáveis ​​I, J, ..., Z ao número de ocorrências dessa letra e calcular string length * 3 + I - O. Em seguida, conte o número de S ou Z não compensados: um S pode ser compensado por Z, J ou O e um Z pode ser compensado por S, L ou O e subtraia ceil(that number/3), pois perdemos 1 unidade para cada 3 S ou Z's.

aditsu
fonte