Tetris'i çok seviyorum ama çok da iyi değilim. Sadece bir kere uzay gemisinin kendi gözlerimin önünde kalktığını görmek istiyorum! Ve bilgisayarlar her şeyde çok büyük olduğu için, tek olası çözüm benim için oynamak için bir program yapmaktır ... tek fark benim için bunu biraz yapacaksın!
Bir tetromino (dört kareden oluşan şekil) ve oyun alanının bir haritası göz önüne alındığında, tetrominoyu en fazla sayıda satıra (en fazla sayıda satırı tamamen bloklarla doldurur ) ve en az sayıyı yaratacak şekilde yerleştirmelisiniz. ait yeni deliklere (oyun alanının üst "görmek" olamaz boş bir alana 1 ).
Giriş
Giriş, tek bir satırda, bırakarak tetrominoyu temsil eden bir karakter, ardından 10 * 18 ızgara 2 boşluk ( ) ve artı işaretlerini (
+
) izleyecektir .
Karakter, Tetris'te bulunan yedi baz tetrominodan herhangi birini temsil eder. Tüm parçalar 90 derece döndürülebilir, ancak çevrilemez. Tüm tetrominolar ve dönüşleri aşağıdaki gibidir:
#
S = ## ##
## #
#
Z = ## ##
## #
# ### ##
L = # # # #
## # ###
# ### ##
J = # # # #
## # ###
# # #
T = ### ## ### ##
# # #
O = ##
##
#
I = # ####
#
#
Izgara, +
daha önce yerleştirilmiş bloklar olan Tetris oyun alanını temsil ediyor . Yani, örnek bir giriş aşağıdaki gibi olabilir:
I
+ ++
+ +++++
++ +++++++
++ +++++++
++ +++++++
++ +++++++
++++++ +++
Çıktı
Çıktınız girişle aynı olacaktır, ancak tetromino ideal konumda olacaktır. Tetromino #
, önceden yerleştirilmiş bloklardan ayırt etmek için ile temsil edilmelidir . Buna ek olarak, yerleşiminizin formda kaç satır / delik oluşturduğunu xL yH
yeni bir satırda da çıkartabilirsiniz.
Yukarıda verilen örneğin çıktısı aşağıdaki 3 olacaktır :
I
+ ++
+ +++++
++#+++++++
++#+++++++
++#+++++++
++#+++++++
++++++ +++
4L 0H
Yalnızca en iyi sonuçları vermelisiniz; aynı puanı veren iki veya daha fazla durumda, bunların tümünü (boş bir satırla ayırarak) çıkartabilirsiniz. En iyi sonuçlar önce atılan (azalan) hat sayısına, ardından oluşturulan yeni delik sayısına (artan) göre sıralanmalıdır. Yani, 1L 1H
daha iyi bir skor 0L 0H
.
Programınızı test edebileceğiniz çeşitli girişlerin ve beklenen çıktıların bir listesini oluşturmaya çalışacağım. Bu alanı izle.
Kurallar ve Ayrımcılık
- Bu kod golf , bu yüzden en kısa doğru uygulama kazanır.
- Giriş / çıkış, hedef dilinize uygun herhangi bir ortamda olabilir (örn. Dosya, stdin / stdout, metin alanı).
- Hedef diliniz birden fazla satır girişini desteklemiyorsa (veya bunu yapmak uygun değilse), bunun yerine girişin her satırını virgül (
,
) ile sınırlayabilirsiniz . - Izgaradaki boş satırların çıktısını atlayabilirsiniz.
- Tetromino'nun yukarıdan düştüğünü unutmayın - parçayı "yeraltına" yerleştiremezsiniz. Bu nedenle, parçanın tüm olası yerleşimlerinin "yüzey düzeyinde" olacağını varsayabilirsiniz (yani, parça ile levhanın üstü arasında blok yoktur).
- Asla oyuna zorlandığınız bir durum olmayacağını varsayın (yerleştirilen tetromino alanın en üst merkezine dokunur).
- Çıktıda özdeş olan solüsyonlar atlanmalıdır (örn
O
. Parçayı saf şekilde döndürürseniz 3 solüsyon çıkışı vardır ).
1 Bunun yanlış pozitifler yaratacağının farkındayım, ama bu bir basitleştirme.
2 Bu, Game Boy sürümünde kullanılan ızgara boyutudur.
3 Evet, 0H
doğrudur. Tekrar kontrol et, yeni delikler dedim ; ^)