私はテトリスが大好きですが、私はあまり得意ではありません。宇宙船が私の目の前で飛び立つのを一度だけ見たい!そして、コンピュータはすべてが非常に優れているので、唯一の可能な解決策は、私のためにそれを再生するプログラムを作成することです...
テトロミノ(4つの正方形でできた形状)と競技場のマップが与えられたら、テトロミノを配置して、最大数の行をスコアし(最大数の行を完全にブロックで満たす)、最小数を作成します新しい穴(競技場の最上部「見る」ことができない空きスペース1)。
入力
入力には、ドロップするテトロミノを表す1行の文字が含まれ、その後にスペース()とプラス記号()の10 * 18グリッド2が続きます。+
キャラクターは、テトリスで見つかった7つの基本テトロミノのいずれかを表します。すべてのピースを90度回転できますが、反転させることはできません。すべてのテトロミノとその回転は次のとおりです。
#
S = ## ##
## #
#
Z = ## ##
## #
# ### ##
L = # # # #
## # ###
# ### ##
J = # # # #
## # ###
# # #
T = ### ## ### ##
# # #
O = ##
##
#
I = # ####
#
#
グリッドはテトリスの競技場を表しており、+
以前に配置されたブロックがあります。したがって、入力例は次のようになります。
I
+ ++
+ +++++
++ +++++++
++ +++++++
++ +++++++
++ +++++++
++++++ +++
出力
出力は入力と同じになりますが、テトロミノが理想的な位置にあります。テトロミノは#
、事前に配置されたブロックと区別するためにで表す必要があります。これに加えて、プレースメントがxL yH
新しい行のフォームに作成する行/穴の数も出力します。
上記の例の出力は、次の3になります。
I
+ ++
+ +++++
++#+++++++
++#+++++++
++#+++++++
++#+++++++
++++++ +++
4L 0H
最良の結果のみを出力する必要があります。同じスコアを与える2つ以上のケースの場合は、それらすべてを出力します(空白行で区切られます)。最良の結果は、最初にスコアリングされた行の数(降順)、次に作成された新しい穴の数(昇順)で並べ替えることによって決定されます。ですので、1L 1H
より良いスコアです0L 0H
。
プログラムをテストできるさまざまな入力と予想される出力のリストの作成に取り組みます。この空間を見て。
ルールと明確化
- これはcode-golfなので、最も短い正しい実装が優先されます。
- 入力/出力は、ターゲット言語に適合する任意のメディア(ファイル、stdin / stdout、テキスト領域など)にすることができます。
- ターゲット言語が複数行の入力をサポートしていない場合(またはそうするのが不便な場合)、代わりに入力の各行をコンマ(
,
)で区切ることができます。 - グリッド内の空白行の出力は省略できます。
- テトロミノが上から落ちることを覚えておいてください-作品を「地下」に置くことはできません。したがって、駒の可能なすべての配置が「表面レベル」である(つまり、駒とボードの上部の間にブロックがない)と想定できます。
- あなたがゲームオーバーに強制される状況は決してないと仮定します(配置されたテトロミノはフィールドの上部中央に触れます)。
- 出力が同じ解は省略しなければなりません(たとえば、単純に
O
ピースを回転させると、3つの解出力があります)。
1これにより誤検知が発生することは承知していますが、簡単な説明です。
2これはゲームボーイバージョンで使用されるグリッドサイズです。
3はい、0H
正しいです。もう一度チェックして、新しい穴を言った; ^)