マインスイーパは、どのタイルが「地雷」であるかを、それらのタイルをクリックせずに発見する必要がある人気のパズルゲームです。代わりに、近くのタイルをクリックして、隣接する鉱山の数を表示します。このゲームの欠点の1つは、複数の有効な回答があり、推測するだけのシナリオになる可能性があることです。たとえば、次のボードを取り上げます。
1110
2*31
3*??
2*4?
112?
この形式では、数字は隣接する地雷の数を*
表し、は既知の地雷を表し、「?」潜在的な鉱山を表します。この特定のパズルの不幸な点は、4つの明確で有効な潜在的なソリューションがあることです。
1110 1110 1110 1110
2*31 2*31 2*31 2*31
3*4* 3*5* 3**2 3**1
2*42 2*4* 2*4* 2*42
112* 1121 1121 112*
これは、ボードが解決できないことを意味します。解けるボードの例を次に示します。
1121
1??*
12?*
0122
有効な解決策は1つしかないため、このボードは解決可能です。
1121
1*4*
12**
0122
あなたの仕事は、有効なマインスイーパボードを取得し、それが解決可能かどうかを判断するプログラムまたは関数を作成することです。「有効な掃海艇ボード」とは、入力が常に長方形で、少なくとも1つのソリューションがあり、無効な文字が含まれていないことを意味します。
入力には、文字の配列、文字列の配列、改行を含む文字列などがあります。出力は、解ける場合は真偽値、そうでない場合は偽の値でなければなりません。パフォーマンスについてはあまり心配していませんが、あなたのソリューションはあらゆるサイズの入力に対して理論的に機能する必要があります。
いつものように、標準の抜け穴が適用され、バイト単位の最短ソリューションが勝ちます!
例:
次の例はすべて解決可能です。
1121
1??*
12?*
0122
1110
1???
1110
0000
1110
3???
??20
*310
****
****
****
****
0000
0000
0000
0000
1100
*100
2321
??*2
13*2
1221
1*10
1110
1121
2*??
2*31
2220
1*10
次の例はすべて解決不可能です。
1110
2*31
3*??
2*4?
112?
01??11*211
12??2323*1
1*33*2*210
12?2122321
13?3101**1
1***101221
1***
3*52
2*31
12??
02??
01??
00000111
000012*1
00001*21
22101110
**100111
?31123*1
?311**31
**113*20
2?
ソリューションがないため、マインスイーパの実際のゲームからは得られません。したがって、「マインスイーパボード」とは見なされません...はい?)