Collegamento di lacune con pezzi Tetris


14

Dovresti scrivere un programma o una funzione che fornisca un elenco di blocchi tetris come uscite di input o restituisca il divario più grande tra due punti nello stesso livello di altezza che i pezzi possono collegare.

I 7 tipi di pezzi di tetris sono i seguenti:

Mattoni di Tetris

Faremo riferimento a questi pezzi con le lettere I, J, L, O, S, T e Z rispettivamente, facendo riferimento alle loro forme. Puoi ruotare i pezzi ma non puoi specchiarli proprio come in un gioco Tetris.

Il nostro compito è quello di creare un'area collegata ortogonalmente (lati collegati ai lati) dai pezzi dati. Quest'area dovrebbe collegare (anche ortogonalmente) due quadrati di unità che sono alla stessa altezza. Dovremmo trovare il più grande divario possibile tra i due quadrati che possiamo colmare.

Esempi dettagliati

Con il pezzo L possiamo collegare uno spazio di 3

   L
XLLLX

Con il pezzo S possiamo collegare uno spazio di 2

  SS
XSSX

Con i pezzi S, S, O possiamo collegare uno spazio di 7 (Nota che non possiamo collegare uno spazio di 8)

 S
XSSOO SSX
  SOOSS

Ingresso

  • Una stringa che rappresenta i pezzi disponibili contenenti solo le lettere maiuscole I, J, L, O, S, T e Z. Ogni lettera rappresenta un pezzo tetris completo.
  • Le lettere saranno in ordine alfabetico nella stringa.
  • La stringa sarà lunga almeno un carattere.

Produzione

  • Un singolo numero intero positivo, il più grande gap collegabile con i pezzi dati.

Esempi

Input => Output

OSS  =>  7

LS  =>  5

LZ  =>  6

ZZZZ  =>  10

LLSSS  =>  14

IIJSSSTTZ  =>  28

IISSSSSS  =>  24

OOOSSSSSSSSSSSSTT  =>  45

IJLOSTZ  =>  21

IJLOSTZZZZZZZ  =>  37

IIJLLLOSTT  =>  31

IJJJOOSSSTTZ  =>  35

Questo è code-golf, quindi vince l'ingresso più breve.


Ah! Capisco. Li stavo guardando come sono.
Tim

Risposte:


4

CJam, 53

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

Provalo online

L'idea è: assegnare ciascuna delle variabili I, J, ..., Z al numero di occorrenze di quella lettera e calcolare string length * 3 + I - O. Quindi conta il numero di S o Z non compensate: una S può essere compensata da Z, J o O e una Z può essere compensata da S, L o O e sottrarre ceil(that number/3), poiché perdiamo 1 unità ogni 3 S o Z è.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.