View on GitHub

解独

数独・ナンプレの解析プログラム

指定された問題の解析

指定された問題を check コマンドに続いて問題の局面を入れることでチェックすることができる。局面は数字を連続して入れることで表現する。空白のマスは0とする。例えば、この図面は

次のように表現できる。

310002000000860200008003075007098350090000080053620400630200900009036000000100063

オンラインでナンプレ問題集を解いているのであれば、キーボードからcと入力することで、現局面がクリップボードにコピーされる。その局面は check pos [verb] コマンドでチェックすることができる。ここで pos は局面で verb は冗長性レベル(省略時は 1)である。

kaidoku-1.0.1> check 310002000000860200008003075007098350090000080053620400630200900009036000000100063

This position has a unique solution.

kaidoku-1.0.1> check 310002000000860200008003075007098350090000080053620400630200900009036000000100063 2

Look at R4C4. What number is available?

solve コマンドによってその問題を解くための手順がすべて表示される。このコマンドの使い方は

solve pos [verb]

であり、

図面を表現する他の方法

したがって、次のようなコマンドが可能となる。

kaidoku-1.0.1> solve 31---2---,---86-2--,--8--3-75,--7-9835-,-9-----8-,-5362-4--,63-2--9--,--9-36---,---1---63

印刷物から図面を入力するときには、入力ミスをしたときにどの列が間違えているのかが表示されるため、この方法は便利である。たとえば、このように入力すると

kaidoku-1.0.1> solve 31---2---,---86-2--,--8--3-75,--7-9835-,-9----8-,-5362-4--,63-2--9--,--9-36---,---1---63

このようなメッセージが得られる。

Error in input: -9----8-

この行をチェックすれば、この行にマス目が8個しかないことがわかる。また、このように入力すると

kaidoku-1.0.1> solve 31---2---,---86-2--,--8--3-75,--7-9835-,-8-----8-,-5362-4--,63-2--9--,--9-36---,---1---63

このようなメッセージが得られる。

Both R5C2 and R5C8 have the same value of 8.

つまり、R5C2 と R5C に同じ8という数字が入っている。

有効な問題かどうかのチェック

数独・ナンプレの問題は解が唯一であるときのみ有効である。解が複数存在するときには、無効な問題であることが示される。たとえば、このように入力すると

kaidoku-1.0.1> solve -4-3---9-,---------,-----4236,7924--3--,----8----,--1--3627,1385-----,--------4,-7---9-6-

このようなメッセージが得られる。これは「複数の解がある無効な問題である」という意味である。

Invalid sudoku with multiple solutions.

もしある問題が有効であるかどうかだけをチェックしたいのであれば check コマンドを使ってこのように入力することもできる。

kaidoku-1.0.1> check -4-3---9-,---------,-----4236,7924--3--,----8----,--1--3627,1385-----,--------4,-7---9-6-

もしどのような複数解があるのかを見たければ、solve pos 5とする。たとえば、このようにする。

kaidoku-1.0.1> solve -4-3---9-,---------,-----4236,7924--3--,----8----,--1--3627,1385-----,--------4,-7---9-6- 5

このようにすると、2つの解とその2つの解で共通する数字が最後に示される。解独では解を2つ見つけるとそれ以上の探索はしないため、実際には3つ以上の解が存在している可能性がある。もし解が存在しなければ、たとえば

kaidoku-1.0.1> solve -4-3---9-,---------,-----4236,7924--3--,4---8----,--1--3627,1385-----,--------4,-7---9-6-

とすることで、最後に

Invalid sudoku with no solution.

すなわち「解が存在しない無効な数独である」と表示される。なぜ解が存在しないのかを見るためにはsolve pos 5を使う。

数独の最難問を解析する。PCの性能にもよるが、解析には数秒かかる。

kaidoku-1.0.1> solve 8--------,--36-----,-7--9-2--,-5---7---,----457--,---1---3-,--1----68,--85---1-,-9----4-- 2

Search with depth 3 from R8C7.
Search with depth 3 from R7C7.
Search with depth 2 from R7C5.
Search with depth 3 from R8C9.
Search with depth 3 from R9C4.
Search with depth 1 from R6C7.
Search with depth 2 from R1C7.
Valid sudoku with unique solution of level 9 (ultimate).

いかに深い探索がなされているかが分かる。完全な解法を見るには、このようにする。

kaidoku-1.0.1> solve 8--------,--36-----,-7--9-2--,-5---7---,----457--,---1---3-,--1----68,--85---1-,-9----4-- 5

結果はこのようになる。