バックグラウンド
PiogramまたはGriddlersとも呼ばれるNonogramは、各行の連続した色付きセルの数を使用して、2Dグリッド上の各セルを色付けするか空白のままにするかを決定するパズルです。
以下は、ソリューションを使用したNonogramパズルの例です。
問題は、一部の市販のNonogramゲーム/モバイルアプリには、手で解決できないパズルがある(たとえば、複数のソリューションがある、または深いバックトラッキングが必要)ことです。ただし、それらはプレイヤーにいくつかの命を提供します。正解が空白のセルを着色しようとすると、1つの命が失われます。だから今、それらの厄介な「パズル」をブルートフォースする時です!
タスクを単純化するために、その手がかりと他の何もない1行だけを想像してください。
3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
[3,7]
手がかりであり、ラインの長さは、15個の細胞です。複数の可能な解決策があるため、この線を完全に解決する(つまり、すべての色の付いたセルを決定する)ために、いくつかの命を危険にさらす必要があります。
チャレンジ
手がかり(正の整数のリスト)と行の長さのある行が与えられた場合、最適な戦略で行を総当たり攻撃すると仮定して、失う命の最大数を見つけます。
色付きのセルを常に推測することに注意してください。実際のゲームでは、空のセル(正しいか間違っているか)を推測してもあなたの生活には影響しません。そのため、パズルをそのように「解決」することはできません。
また、入力は常に有効な非グラム行を表すと想定できるため、などのことを心配する必要はありません[6], 5
。
説明
最初にいくつかのより簡単な例を見てみましょう。
[1,2], 5
この行にO
は、正確に3つの可能性があります(色付きのセル、.
空のセル):
O . O O .
O . . O O
. O . O O
セル0(左からの0から始まるインデックス)を着色しようとすると、次のいずれかが発生します。
- セルは正しく色付けされています。2つの可能性があり、セルを完全に解決するために、セル2とセル4を選択できます。どちらの場合でも、最悪の場合には1つの命を失います。
- セルは空であり、命を失います。この場合、このラインに対する独自のソリューションがすでに特定されているため、1人の命が失われました。
したがって、答え[1,2], 5
は1です。
[5], 10
バイナリ検索?いや。
最も明白な最初の選択肢は4または5で、空白の場合(1ライフのコストで)1つの可能性が明らかになります。最初に4を選択したとしましょう。セル4が実際に色付けされている場合、ライフが失われるまで(または、セル0が色付けされ、その後、ライフをまったく消費しなくなるまで)3、2、1、0を左に延長します。命が失われるたびに、たとえば次のようなものが見られる場合、解決策を一意に決定できます。
_ _ X O O _ _ _ _ _
答えは次のとおりです。
. . . O O O O O . .
したがって、に対する答え[5], 10
も1です。
[3,7], 15
セル11から開始します。空の場合、次のソリューションがすぐに表示されます。
O O O . O O O O O O O X . . .
次に、12を試します。空の場合、2つの可能性が得られますが、1つの余命を犠牲にして解決できます。
O O O . . O O O O O O O X . .
. O O O . O O O O O O O X . .
次に2を試してください。空の場合は、[1,2], 5
例と同様に解決できる3つの可能性につながります。
. . X O O O . O O O O O O O .
. . X O O O . . O O O O O O O
. . X . O O O . O O O O O O O
この方法でリスクを最小限に抑え続けると、最大であらゆるソリューションに到達できます。2人の命が費やされた。
テストケース
[1,2] 5 => 1
[2] 5 => 2
[1] 5 => 4
[] 5 => 0
[5] 10 => 1
[2,1,5] 10 => 0
[2,4] 10 => 2
[6] 15 => 2
[5] 15 => 2
[4] 15 => 3
[3,7] 15 => 2
[3,4] 15 => 3
[2,2,4] 15 => 4
[1,1,1,1,1,1,1] 15 => 2
[2,1,1,3,1] 15 => 3
[1,1,1,2,1] 15 => 5
最後の2つの場合、最適な戦略は最小の空白を通過するのではなく、左から右(または右から左)に移動するだけです。指摘してくれた@crashozに感謝します。
ルール
標準のコードゴルフ規則が適用されます。バイト単位の最短の有効な送信が優先されます。
バウンティ
誰かが多項式時間アルゴリズム(正確性の証明付き)を思いついたら、そのような解決策に対して+100バウンティを授与します。
[6], 5
何ですか?