Menghubungkan Kesenjangan dengan Potongan Tetris

14

Anda harus menulis sebuah program atau fungsi yang memberikan daftar blok tetris sebagai input output atau mengembalikan celah terbesar antara dua titik di level ketinggian yang sama yang dapat dihubungkan oleh kepingan tersebut.

7 jenis potongan tetris adalah sebagai berikut:

Batu bata tetris

Kami akan merujuk potongan-potongan ini dengan huruf I, J, L, O, S, T dan Z masing-masing, mengacu pada bentuknya. Anda dapat memutar potongan tetapi tidak dapat mencerminkannya seperti dalam game Tetris.

Tugas kita adalah menciptakan area yang terhubung secara orthogonal (sisi yang terhubung ke sisi) dari potongan yang diberikan. Area ini harus menghubungkan (juga secara orthogonal) dua unit kuadrat yang tingginya sama. Kita harus menemukan celah terbesar yang mungkin ada di antara dua kotak yang bisa kita jembatani.

Contoh terperinci

Dengan potongan L kita dapat menghubungkan celah 3

   L
XLLLX

Dengan potongan S kita dapat menghubungkan celah 2

  SS
XSSX

Dengan potongan S, S, O kita dapat menghubungkan celah 7 (Perhatikan bahwa kita tidak dapat menghubungkan celah 8)

 S
XSSOO SSX
  SOOSS

Memasukkan

  • String yang mewakili potongan-potongan yang tersedia hanya berisi huruf besar I, J, L, O, S, T dan Z. Setiap huruf mewakili potongan tetris lengkap.
  • Huruf-hurufnya akan berurutan sesuai abjad.
  • String akan memiliki setidaknya satu karakter.

Keluaran

  • Integer positif tunggal, celah terbesar yang dapat dihubungkan dengan bagian yang diberikan.

Contohnya

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

Ini adalah kode-golf sehingga entri terpendek menang.

randomra
sumber
Ahh, begitu. Saya juga melihat mereka.
Tim

Jawaban:

4

CJam, 53

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

Cobalah online

Idenya adalah: menetapkan masing-masing variabel I, J, ..., Z menjadi jumlah kemunculan huruf itu, dan menghitung string length * 3 + I - O. Kemudian hitung jumlah S atau Z yang tidak dikompensasi: S dapat dikompensasi oleh Z, J atau O, dan Z dapat dikompensasi oleh S, L atau O, dan kurangi ceil(that number/3), karena kita kehilangan 1 unit untuk setiap 3 S atau Z's.

aditsu berhenti karena SE adalah JAHAT
sumber