ゲーム
最近、私の時間の大部分は、ロジックドットと呼ばれる、携帯電話で中毒を起こすゲームに費やされました。ゲームのディスプレイを表示するとルールを説明するのが簡単になるため、ここでは未解決の解決済みパズルのスクリーンショットを示します。
ここで、注目すべき3つの主な点があります。
- ゲームボード(中央にある4x4の正方形のグリッド)
- 必要な形状(上から2番目のバー、スコアおよびメニューの下など)のすべての線、または
a
1つの長方形によるリンクされたドット - 解決策のために、列に必要なドットの数を示す行と列の数値
ゲームの目的は、必要な形状をグリッドに収めることです。図形を回転させることはできますが、斜めに入れることはできません。
ソリューションでは、すべてのシェイプが一度だけ作成されることに注意してください(必要なシェイプに一度だけあるため)。この場合、それらはすべて水平ですが、垂直にすることもできます。正方形に塗りつぶされたピンク色は、使用されていない正方形を示します。
これは、より大きく、わずかに複雑なグリッドです。
未解決のパズルには、すでにいくつかの正方形が塗りつぶされていることに注意してください。灰色の正方形は、ドットを配置できないブロックされた正方形を示します。テールのあるドットは、そのスポットにドットがあることを示し、テールの方向で少なくとも 1つ以上のドットにリンクしていますが、他の方向(反対方向を含む)ではリンクしていません。
表記法
この投稿の残りの部分では、次の記号を使用してボードを参照します。
- <、>、^、v-事前に配置されたドットがポイントの方向に伸びるテールを持つことを示します
- *-ドットを示します。未解決のグリッド(入力)で指定された場合、それは個々の形状です。出力の場合は、周囲のドットに接続されます。
- #-ブロックされたグリッドスクエアを示します(ドットを配置できない場所)
- -、| (ハイフンとバー)-左右の尾を持つドットと、上下の尾を持つドットをそれぞれ示します
- **(スペース文字)-**空のスペースを示します
これらのシンボルを使用すると、後者の例のケース(未解決)は次のように表すことができます。
<
#
^ #
ソリューションは次のように表すことができます。
*< * *
*
*
* *
* *#*
^ # *
2つの図形が水平、垂直、または斜めに接触することはできないため、次のケースは無効です。
***
**
**
チャレンジ
あなたの課題は、4x4から9x9までのロジックドットパズルを解決することです。4行の入力を受け取り、次にゲームボードを受け取ります。行は次のようになります。
- 1行目、図形-検索する図形。それぞれフォーム
sizexquantity
(3x2
長さ3の2つの図形など)で指定され、スペースで区切られます。例の行:3x1 2x1 1x1
- 2行目、列-各列に必要なドット数のスペース区切りリスト。例の行:
1 1 2 2
- 3行目、行-各行に必要なドット数のスペース区切りリスト。例の行:
3 0 3 0
- 4行目、ボードサイズ-単一の整数、ボードサイズ、
B
次にボードが与えられ、B
上記の表記法を使用してボードを表す入力行になります。たとえば、後者の例の完全な入力は次のとおりです。
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
その後、プログラムは解決されたボードを同じ表記で出力します。上記の入力に一致する出力は次のとおりです。
** * *
*
*
* *
* *#*
* # *
ゲームボードには複数のソリューションがある場合があることに注意してください。この場合、有効なソリューションを1つだけ出力してください。また、プログラムは、複雑な10x10グリッドの合理的なデスクトップコンピューターで10秒以内に正しいソリューションを出力する必要があります。
これはコードゴルフであるため、最小バイトが勝ちます。
テストケース
入力1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
出力1
*** *
***#
#
* * *
入力2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
出力2
* * *
*
* *
* #
* *
入力3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
出力3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(これは最初にある必要があり、ほぼ終わり近くではなく、とにかく...)