Conexión de espacios con piezas de Tetris

14

Debe escribir un programa o función que proporcione una lista de bloques de tetris como salidas de entrada o que devuelva el espacio más grande entre dos puntos en el mismo nivel de altura que las piezas pueden conectar.

Los 7 tipos de piezas de tetris son los siguientes:

Ladrillos de tetris

Nos referiremos a estas piezas por las letras I, J, L, O, S, T y Z respectivamente, en referencia a sus formas. Puedes rotar las piezas pero no puedes reflejarlas como en un juego de Tetris.

Nuestra tarea es crear un área conectada ortogonalmente (lados conectados a lados) a partir de las piezas dadas. Esta área debe conectar (también ortogonalmente) dos unidades cuadradas que están a la misma altura. Deberíamos encontrar la mayor brecha posible entre los dos cuadrados que podamos salvar.

Ejemplos detallados

Con la pieza L podemos conectar un hueco de 3

   L
XLLLX

Con la pieza S podemos conectar un hueco de 2

  SS
XSSX

Con las piezas S, S, O podemos conectar un espacio de 7 (Tenga en cuenta que no podemos conectar un espacio de 8)

 S
XSSOO SSX
  SOOSS

Entrada

  • Una cadena que representa las piezas disponibles que contienen solo las letras mayúsculas I, J, L, O, S, T y Z. Cada letra representa una pieza de tetris completa.
  • Las letras estarán en orden alfabético en la cadena.
  • La cadena tendrá al menos un carácter de longitud.

Salida

  • Un solo entero positivo, la mayor brecha conectable con las piezas dadas.

Ejemplos

Entrada => Salida

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 es el código de golf, por lo que gana la entrada más corta.

randomra
fuente
Ahh ya veo. Los estaba mirando como están.
Tim

Respuestas:

4

CJam, 53

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

Pruébalo en línea

La idea es: asignar cada una de las variables I, J, ..., Z para que sea el número de ocurrencias de esa letra, y calcular string length * 3 + I - O. Luego cuente el número de S o Z no compensadas: una S puede ser compensada por Z, J u O, y una Z puede ser compensada por S, L u O, y resta ceil(that number/3), ya que perdemos 1 unidad por cada 3 S o Z's.

aditsu renunció porque SE es MALO
fuente