数独の問題作成プログラム
一般的に広く親しまれている数独の形ではなく、少し単純化した数独を例にとって問
題作成プログラムを考えてみます(図1参照)。 つまり、 2X2−2X2のよりシンプル
な形です(3X3−3X3が正式)。このタイプのものができていれば、正式版へのプロ
グラムの拡張もそんなに難しくないはずです。
<単純化された数独、2X2−2X2タイプ>
(図1、十進BASICによる2Dグラフィックス)
上図は、 数独作成プログラムによって自動生成された数字の基本データですが、 こ
れをもとに数字を一つずつ消去して行けば、 最終的に、数独の問題になります、ここ
で、数独のルールをもう一度確認して置きましょう。
(1)太枠内(2X2)の数字はすべて異なる。
(2)縦方向(1X4)の数字もすべて異なる。
(3)横方向(4X1)の数字もすべて異なる。
以上の三つが、数独のルールでした。2X2−2X2タイプの数独では、1〜4までの数
字を上の規則に従って並べることになります。
枠や数字の表示に関する部分は、 以下の二つの外部副プログラムによって実行さ
れています。
GRID(枠の表示)
NUMBERPUTTING(数字の表示)
また、数字組み合わせの自動生成は次の外部副プログラムで実行されています。
NUMBERSETTING(数字組み合わせの自動生成)
数字組み合わせを自動生成する部分が、このプログラムの主要部分になるので少し
説明します。以下の図2を見てください。まず最初に、赤で囲われた部分に1〜4まで
の数字を入れます( IとJが1、2に対応)。 次に、 緑で囲われた部分に赤の数字と矛
盾しないように入れます( Iが1でJが3、4、およびJが1で Iが3、4に対応 )。そして、
青で囲われた部分は、赤と緑の両方の数字と矛盾しないように入れます(Iが2でJが
3、4、およびJが2でIが3、4に対応)。最後に、紫で囲われた部分に、緑と青の両方
の数字に矛盾しないように入れます(IとJが3、4に対応)。 ただし、最後の四つの数
字を矛盾なく決定できないときは、もう一度最初からやり直すようにしています。
(図2)
続いて、特定のマス目の数字をブランキングして数独の問題を作ってみます。ここで
は、ランダムにマス目を選ぶようにしています(図3参照)。 したがって、 出来上がっ
た数独の問題が必ずしも一つの解を持つとは限りませんので、注意してください。適
正な解(ユニークな解)があるかどうかは、人間が確認するか、後で説明する数独の
ソルバーを使ってチェックする必要があります。ちなみに、ブランキングは
BLANKING(特定のマス目のブランキング)
という外部副プログラムを呼び出して行っています。
<マス目をブランキングした後の画面、図1とは異なる>
(図3、十進BASICによる2Dグラフィックス)
ポップアップしているダイアログボックスのOKボタンをクリックするか、 リターンキ
ーを押すと完全な数データが表示されるようになっています。
<完全な数データが表示された画面、図1及び図3とは異なる>
(図4、十進BASICによる2Dグラフィックス)
それでは、数独の問題を出題します。 正式版に比べればはるかに易しいですが、問
題を解いてみてください(図5〜図9を参照)。
<数独の問題(その1)>
(図5、十進BASICによる2Dグラフィックス)
<数独の問題(その2)>
(図6、十進BASICによる2Dグラフィックス)
<数独の問題(その3)>
(図7、十進BASICによる2Dグラフィックス)
<数独の問題(その4)>
(図8、十進BASICによる2Dグラフィックス)
<数独の問題(その5)>
(図9、十進BASICによる2Dグラフィックス)
課題(その1)
上記の問題では、数字の最低数は4となっています。 数字の最低数が3の問題を作
ることは可能ですか。もし、不可能だとすると、その理由を数学的に説明してください
。
以下のリンクに、簡易版のプログラムコードを示します。