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:
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.
Respostas:
CJam, 53
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 subtraiaceil(that number/3)
, pois perdemos 1 unidade para cada 3 S ou Z's.fonte