日別アーカイブ: 2022-01-16

ナンプレとプログラミング



ナンバープレイス

ナンプレ(数独)研究©2022 TacM, Ver0.01

記述内容

ナンプレの入り口

➋解法のあらまし

③単一候補検出(single candidate)

④二国同盟(Naked Pairs)

➋解法のあらまし

今回はナンバープレイスの解法について、わかったことを整理してみます。ナンプレは81個のマスをルールに基づいて1~9の数字で埋めることです。

マスは空白なものとあらかじめ、数字が埋め込まれたものがあり、空白が多いものほど難解な課題です。

ナンプレの解法を解説している『ナンプレさくさく』を参照すると24個ほどの解法を挙げています。それによると、単一候補検出(single candidate)が基本中の基本であることが分かりました。

単純な言い方では、行、列、ブロックのどれかで9マスのうち、8個のマスが確定すれば残りの数に決まります。例えば行領域で8個確定ならば列やブロックは調査に及びませんが、そうでない場合は他の領域を調査領域に加えてナンプレルールを完遂させます。

上図により、single candidateの具体例を示します。ピンクのマス(RC45)が今、空白で適切な数字を選ぶとき、4行の青マス8個を調べます。4行をサーチして使用数字が7個以内であれば次に5列(茶色)、4ブロック(黄色)と順に調査することになります。

4ブロックのRC44, RC46, RC55, RC65は行と列における調査を利用して省略します。よって、1セット当たり20(8+8+4)個の関連マスをサーチ対象にし、RC99のマスに達するまで繰り返し調査します。

以上が基本解法です。RC99まで進み1セット中で選択したマスが1個もなければsingle candidateの役割は終了し次の解法に委ねられます。

上記したsingle candidateで初級編の大多数はクリアできることでしょう。

あとがき

行、列、ブロック番号をプログラミングとの親和性を考え、0~8に割り振ると前回、述べましたが撤回し1~9にすることにしました。

当サイトはナンプレについてまだまだ未熟であり知識不足、情報不足です。

番号割り振り方法は多くの解説記事で1~9に定着しており、力不足の点は有用な記事を参照して取り入れて行かなければならないからです。

JavaScriptプログラミングにおいて要素名はcol0, col1, col2のようにゼロを初期値にして親和性を保っています。

単一候補検出(single candidate)

次回