スポンサーリンク
作ったナンプレ問題が解ける問題か検証する必要があります。
解けない問題をいくら作ってもしかたありません。
ということで、問題を解くプログラムを作成します。
まず最初に問題の空白欄に123456789を入れてしまいます。そこから入れない文字を消していって1つ残れば確定数字ということになります。
プログラムはこういったコツコツした作業を正確に何度でもさせるのに向いていますね。
確定している数字がいくつかあるので、その数字は候補数字から消す必要があります。
上図は横方向に入れない数字を消した状態です。2行目の候補数字は3457と一気に減ります。
さらに縦方向に入れない数字を消した状態です。だいぶすっきりしてきます。
さらに9つのボックス単位でに入れない数字を消します。3×3のボックスが9つあります。新しく確定したボックスがでてきました。
上の図の6行目に2578があります。ここに入っている5はこの行の他の候補数字にはでてきていません。
ということは5が候補になっているマスは2578のマスだけですのでここには5が入ることになります。これを横方向にすべて繰り返します。
縦方向にもすべて繰り返します。
3×3のボックスが9つすべて繰り返します。
上の図の1行目に46のマスが2つあります。この2つのペアは4,6か6,4いずれかが入りますのでどっちかはわからないものの、他のマスに4と6は入ることはできません。
このように46以外のマスから46を消しマスので右上のマスは57だけが残ります
縦方向にもすべて繰り返します。
3×3のボックスが9つすべて繰り返します。
上のペア数字と同じ法則はトリオにも当てはまりますので、トリオでも同じことをします。
あまり無いパターンですが上のような2つの数字のペアが4つ四角形に並ぶ場合がありマス。そお場合も同様に候補からはずします。
これで解けなかった場合、確定文字が増えているので最初に戻って候補文字をけずっていく作業を繰り返します。 普通に解ける問題であればこの方法で解けますので、これをクリアすれば問題作成成功ということになります
解けない問題の場合、これをいくら繰り返しても解けないので、解けないということを判断する必要はあります。
具体的には一連の処理を始める前の状態と処理後の状態を比較して同じならこの問題をあきらめて次へ行きます。
ちなみにこの問題はここまで解いて変化しなくなり解けなくなりました。よくみると
46
643
36
64
463
36
の2パターンが正解として成り立つ重解ということがわかります。