Tetris Parçaları ile Boşlukların Bağlanması


14

Giriş çıkışları olarak tetris bloklarının bir listesini veren veya parçaların bağlayabileceği aynı yükseklik seviyesindeki iki nokta arasındaki en büyük boşluğu döndüren bir program veya işlev yazmalısınız.

7 tip tetris parçası şunlardır:

Tetris tuğlaları

Bu parçalara sırasıyla I, J, L, O, S, T ve Z harfleriyle atıfta bulunacağız. Parçaları döndürebilirsiniz, ancak Tetris oyununda olduğu gibi yansıtamazsınız.

Görevimiz verilen parçalardan dik olarak bağlı bir alan (yanlara bağlı taraflar) oluşturmaktır. Bu alan, aynı yükseklikte olan iki birim kareyi (ayrıca dikey olarak) bağlamalıdır. Köprü kurabileceğimiz iki kare arasındaki en büyük boşluğu bulmalıyız.

Ayrıntılı örnekler

L parçası ile 3 boşluğu bağlayabiliriz

   L
XLLLX

S parçası ile 2'lik bir boşluk bağlayabiliriz

  SS
XSSX

S, S, O parçaları ile 7 boşluk bağlayabiliriz (8 boşluk bağlayamayacağımızı unutmayın)

 S
XSSOO SSX
  SOOSS

Giriş

  • Yalnızca I, J, L, O, S, T ve Z büyük harflerini içeren mevcut parçaları temsil eden bir dize. Her harf tam bir tetris parçasını temsil eder.
  • Harfler dizede alfabetik sırada olacaktır.
  • Dize en az bir karakter uzunluğunda olacaktır.

Çıktı

  • Tek bir pozitif tam sayı, verilen parçalarla bağlanabilir en büyük boşluk.

Örnekler

Giriş => Çıkış

OSS  =>  7

LS  =>  5

LZ  =>  6

ZZZZ  =>  10

LLSSS  =>  14

IIJSSSTTZ  =>  28

IISSSSSS  =>  24

OOOSSSSSSSSSSSSTT  =>  45

IJLOSTZ  =>  21

IJLOSTZZZZZZZ  =>  37

IIJLLLOSTT  =>  31

IJJJOOSSSTTZ  =>  35

Bu kod golf bu yüzden en kısa giriş kazanır.


Ahh, anlıyorum. Onlara olduğu gibi bakıyordum.
Tim

Yanıtlar:


4

CJam, 53

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

Çevrimiçi deneyin

Fikir şudur: I, J, ..., Z değişkenlerinin her birini o harfin gerçekleşme sayısı olarak atayın ve hesaplayın string length * 3 + I - O. Sonra telafi edilmemiş S veya Z sayısını sayın: bir S, Z, J veya O ile telafi edilebilir ve bir Z, S, L veya O ile telafi edilebilir ve çıkarılabilir ceil(that number/3), çünkü her 3 S için 1 birim kaybederiz veya Z var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.