Sudoku パズルの数字を2色で表示する

Sudoku パズルの入力データとして次の行列 ini で与えられ、それを解き始めた途中の状態のデータが mat の場合に、数字を2色で表示する関数 plotGame2c を作った。次に完成した図を示します。紫色の数字は最初の数字で、青色の数字は解いたものです。

入力データと関数の使用例です。

ini = Module[{b},{
      {b,b,4,  6,b,b,  b,5,b},
      {8,2,b,  b,b,b,  9,b,b},
      {b,b,b,  b,b,4,  b,b,b},
      {b,b,b,  1,2,b,  b,6,7},
      {b,b,7,  b,b,b,  3,b,b},
      {5,1,b,  b,7,8,  b,b,b},
      {b,b,b,  9,b,b,  b,b,b},
      {b,b,8,  b,b,b,  b,9,2},
      {b,9,b,  b,b,3,  7,b,b}}/.b->Null];
mat = Module[{b}, {
      {b,b,4,  6,b,b,  b,5,b},
      {8,2,b,  b,b,b,  9,4,6},
      {b,b,b,  b,b,4,  b,7,b},
      {b,b,b,  1,2,b,  b,6,7},
      {2,b,7,  b,b,b,  3,b,b},
      {5,1,6,  3,7,8,  4,2,9},
      {b,b,b,  9,b,b,  b,3,b},
      {b,b,8,  b,b,b,  b,9,2},
      {b,9,b,  b,b,3,  7,b,b}} /. b -> Null];
     
plotGame2c[ini, mat]

プロットする関数は次です。引数として行列を使うことを明示的に定義している。
パラメータは FontSize と ItemSize および Spacings の値です。

plotGame2c[ini_?MatrixQ, mat_?MatrixQ] := Module[{solSet={}},
Do[
If[mat[[i,j]]=!=ini[[i,j]],AppendTo[solSet,{mat[[i,j]],{i,j}}]],{i,1,9},{j,1,9}];
 Grid[mat, 
  ItemStyle -> {Directive[FontSize -> 25, Purple, Bold], Automatic, 
    Thread[solSet[[All, 2]] -> Table[Blue, {Length[solSet]}]]},
    ItemSize -> {2.5, 2.5},
  (* ---- *)
  Dividers -> {{{Thickness[2], True, True}}, {{Thickness[2], True,  True}}}, 
  Background -> {Automatic, Automatic, 
    Flatten[Table[{i, j} -> If[EvenQ[Plus @@ Floor[{i - 1, j - 1}/3]], LightGreen,White], {i, 9}, {j, 9}]]},
    Spacings -> {0, 0.5}]
]

関数 Grid の詳しい説明は ドキュメントセンターに載っています。

まとめ

  • これで数字を2色で表示することができた。
  • その他も同様にできることが分かったがパラメータのチューニングが残っている。

目次へ