Sudoku(数独) を Mathematicaで解く(8): Main(1)

目次へ戻る

8.1 NakedSingleの探索を繰り返す

前回の(7) で示した code1,code2,code3,code4 の後に、これから示す Main を追加して、NakedSingleの探索を繰り返すプログラムを作ります。このプログラムの構造は(6)で示した図になります。

実行は code1, code2, code3, code4 の実行後に以下の step0 から始め step1, step2, step3 と進める。

Step0: 初期定義

(* main *)
(* begin{Section}   *)
(* begin{Subsection}: Step0:ini の定義 *)
ini=Module[{b},{
{b,7,b,  b,b,b,  5,b,b},
{5,3,1,  b,b,b,  4,b,b},
{8,b,b,  6,4,b,  b,b,b},
{b,2,b,  b,b,4,  b,3,5},
{b,1,b,  b,b,b,  b,6,b},
{9,4,b,  1,b,b,  b,7,b},
{b,b,b,  b,2,3,  b,b,1},
{b,b,3,  b,b,b,  8,9,2},
{b,b,7,  b,b,b,  b,4,b}}/.b->Null]; 

Show[Rasterize[plotGame[ini]],ImageSize ->250]

Step1: ini -> ini2

ゲームの行列 (ini) を入力として findNakedSiggle で探して見つかった答えを書き込んで次の行列 (ini2) を作る。

(* begin{Subsection}: Step1: ini -> ini2 *)
mapini=makeMap[ini];
findNakedSingle[mapini]
⇒ {{9, {3, 2}}, {2, {6, 7}}, {8, {6, 9}}, {5, {7, 8}}}
(* Show[Rasterize[plotMapGridsColoredByNakedSingle[ini]],ImageSize->350]  *)
ini2=makeMatrixByNakedSingle[ini]; 
xylist=First[#]&/@rules;    (* 追加された数字の位置のリスト *)
Show[Rasterize[plotGameSeq[ini2, xylist]], ImageSize -> 250]

Step2: in2 -> ini3

更新された行列 ini2 を入力として findNakedSingle を使って答えを探す。見つかった答えを書き込んで行列 ini3 を作る。

(* begin{Subsection}: Step2:ini2 -> ini3  *)
mapini2=makeMap[ini2];
findNakedSingle[mapini2]
⇒ {{2,{3,3}},{9,{5,7}}}
(* Show[Rasterize[plotMapGridsColoredByNakedSingle[ini2]],ImageSize->350] *)
ini3=makeMatrixByNakedSingle[ini2];
xylist=First[#]&/@rules;    (* 追加された数字の位置のリスト *)
Show[Rasterize[plotGameSeq[ini3, xylist]], ImageSize -> 250]

Step3: in3 -> ini4

行列 ini3 を入力として findNakedSingle を使って答えを探す。見つかった答えを書き込んで行列 ini4 を作る。

(* begin{Subsection}: Step3:ini3 -> ini4  *)
mapini3=makeMap[ini3];
findNakedSingle[mapini3]
⇒ {{1,{3,8}},{1,{4,7}},{4,{5,9}}}
(*  Show[Rasterize[plotMapGridsColoredByNakedSingle[ini3]],ImageSize->350]  *)
ini4=makeMatrixByNakedSingle[ini3]; 
xylist=First[#]&/@rules;    (* 追加された数字の位置のリスト *)
Show[Rasterize[plotGameSeq[ini4, xylist]], ImageSize -> 250]

Step4: in4 ➞ No NakedSingles

行列 ini4 を入力として findNakedSingle で探した結果、答えが見つからない。

これを解決する方法として「Hidden Single (隠れたシングル) を探す方法」を次回に説明します。

(* begin{Subsection}: Step4:ini4  No NakedSingles  *)
mapini4=makeMap[ini4];
findNakedSingle[mapini4]
⇒ {}
Show[Rasterize[plotMapGridsColoredByNakedSingle[ini4]],ImageSize->350] 
(* end{Subsection}: Step4:ini4 No NakedSingle *)
(* end{Section} *)

これを解決する方法として「Hidden Single (隠れたシングル) を探す方法」を次回に説明します。

目次へ戻る