Relier les lacunes avec les pièces Tetris

14

Vous devez écrire un programme ou une fonction qui a donné une liste de blocs tetris en tant que sorties d'entrée ou renvoie le plus grand écart entre deux points du même niveau de hauteur auquel les pièces peuvent se connecter.

Les 7 types de pièces tetris sont les suivants:

Briques Tetris

Nous désignerons ces pièces par les lettres I, J, L, O, S, T et Z respectivement, en référence à leurs formes. Vous pouvez faire pivoter les pièces mais ne pouvez pas les refléter comme dans un jeu Tetris.

Notre tâche consiste à créer une zone connectée orthogonalement (côtés connectés aux côtés) à partir des pièces données. Cette zone doit connecter (également orthogonalement) deux carrés d'unité qui sont à la même hauteur. Nous devons trouver le plus grand écart possible entre les deux carrés que nous pouvons combler.

Exemples détaillés

Avec la pièce L, nous pouvons connecter un espace de 3

   L
XLLLX

Avec la pièce S, nous pouvons connecter un espace de 2

  SS
XSSX

Avec les pièces S, S, O nous pouvons connecter un espace de 7 (Notez que nous ne pouvons pas connecter un espace de 8)

 S
XSSOO SSX
  SOOSS

Contribution

  • Une chaîne représentant les pièces disponibles contenant uniquement les lettres majuscules I, J, L, O, S, T et Z. Chaque lettre représente une pièce tetris complète.
  • Les lettres seront dans l'ordre alphabétique dans la chaîne.
  • La chaîne comportera au moins un caractère.

Production

  • Un seul entier positif, le plus grand espace connectable avec les pièces données.

Exemples

Entrée => Sortie

OSS  =>  7

LS  =>  5

LZ  =>  6

ZZZZ  =>  10

LLSSS  =>  14

IIJSSSTTZ  =>  28

IISSSSSS  =>  24

OOOSSSSSSSSSSSSTT  =>  45

IJLOSTZ  =>  21

IJLOSTZZZZZZZ  =>  37

IIJLLLOSTT  =>  31

IJJJOOSSSTTZ  =>  35

Il s'agit de code-golf, donc l'entrée la plus courte l'emporte.

randomra
la source
Ahh je vois. Je les regardais tels quels.
Tim

Réponses:

4

CJam, 53

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

Essayez-le en ligne

L'idée est: attribuer à chacune des variables I, J, ..., Z le nombre d'occurrences de cette lettre et calculer string length * 3 + I - O. Ensuite, comptez le nombre de S ou Z non compensés: un S peut être compensé par Z, J ou O, et un Z peut être compensé par S, L ou O, et soustrayez ceil(that number/3), car nous perdons 1 unité pour chaque 3 S ou Z's.

aditsu quitte parce que SE est MAL
la source