最終講 卒業研究と卒業試験
第1話 卒業研究課題
卒業研究課題は、数独(ナンバープレイス)解答の作成ということにさせていただきます。
数独すなわちナンバープレイスについては、ご存じの方が多いと思いますが、
ご存じない方のために、私が開発した良問難問数独自動生成アプリVer.4(対称形)がつくった問題例とその解答を掲載してから、数独とは何か説明しましょう。
数独のルールは次の4つです。
@ 1から9までの数字が入る。
A 列の数字が重複してはならない。
B 行の数字が重複してはならない。
C ブロックの数字が重複してはならない。
解答をご覧になって、各列・各行・各ブロックに同じ数字が入っていない、
すなわち、それぞれには必ず1から9までの数字1つずつ入っていることをご確認下さい。
これが、ルービックキューブ以来の世界的流行を見せているナンバープレイスです。
ルールは簡単ですが、結構奥の深いパズルです。
解答法もネットや本などで様々なものが紹介されています。
さて、次のリンクをクリックされ、マクロを有効にして実行されてみてください。
数独改良版
これは、VBA版の数独解答作成ソフトですが、
同様なものをVC++で作成することを卒業研究としたいと思います。
いきなりこのソフトを作れといわれましても、これは初心者の方には余りにも重い課題です。
そこで段階を踏んで、ソフト作りをしていきたいと思います。
課題1
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
1 | 2 | 3 |
4 | 5 | 6 |
7 | 9 | 8 |
1 | 2 | 3 |
4 | 5 | 6 |
8 | 7 | 9 |
1 | 2 | 3 |
4 | 5 | 6 |
8 | 9 | 7 |
1 | 2 | 3 |
4 | 5 | 7 |
6 | 8 | 9 |
1 | 2 | 3 |
4 | 5 | 7 |
6 | 9 | 8 |
1 | 2 | 3 |
4 | 5 | 7 |
8 | 6 | 9 |
1 | 2 | 3 |
4 | 5 | 7 |
8 | 9 | 6 |
・・・
を作るソフトから作っていきましょう。
ただし、Form1は将来数独解答を作らせるために
としておきましょう。
自己再帰型で順列と作ったときと同じく、縦は長めにとっておき、Form1のプロパティの配置のAoutoScroll
はTrueにしておいてください。
さて、課題1のヒントはたった今出てきた順列作成です。
実は、順列作成と本質的に同じです。
課題2
数独からブロックの条件(ブロックの数字が重複してはならない。)を外して
@ 1から9までの数字が入る。
A 列の数字が重複してはならない。
B 行の数字が重複してはならない。
の3つの条件を満たす
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 9 | 7 |
3 | 4 | 1 | 2 | 7 | 8 | 9 | 6 | 5 |
4 | 3 | 2 | 1 | 8 | 9 | 5 | 7 | 6 |
5 | 6 | 7 | 8 | 9 | 1 | 2 | 4 | 3 |
6 | 5 | 8 | 9 | 1 | 7 | 3 | 2 | 4 |
7 | 8 | 9 | 6 | 2 | 3 | 4 | 5 | 1 |
8 | 9 | 5 | 7 | 3 | 4 | 6 | 1 | 2 |
9 | 7 | 6 | 5 | 4 | 2 | 1 | 3 | 8 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 8 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 7 | 9 |
3 | 4 | 1 | 2 | 7 | 8 | 9 | 5 | 6 |
4 | 3 | 2 | 1 | 8 | 9 | 5 | 6 | 7 |
5 | 6 | 7 | 8 | 9 | 1 | 2 | 3 | 4 |
6 | 5 | 8 | 9 | 1 | 7 | 3 | 4 | 2 |
7 | 8 | 9 | 6 | 2 | 3 | 4 | 1 | 5 |
8 | 9 | 5 | 7 | 3 | 4 | 6 | 2 | 1 |
9 | 7 | 6 | 5 | 4 | 2 | 1 | 8 | 3 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 9 | 7 |
3 | 4 | 1 | 2 | 7 | 8 | 9 | 6 | 5 |
4 | 3 | 2 | 1 | 8 | 9 | 5 | 7 | 6 |
5 | 6 | 7 | 8 | 9 | 1 | 2 | 4 | 3 |
6 | 5 | 8 | 9 | 1 | 7 | 4 | 3 | 2 |
7 | 8 | 9 | 6 | 2 | 3 | 1 | 5 | 4 |
8 | 9 | 5 | 7 | 3 | 4 | 6 | 2 | 1 |
9 | 7 | 6 | 5 | 4 | 2 | 3 | 1 | 8 |
・・・
を作らせるソフトを作りましょう。
尚、@ABの条件を満たす方陣をラテン方陣といいます。
9行9列なので9次ラテン方陣といいます。
つまり、課題2は9次ラテン方陣を作ってください、と言い換えることが出来ます。
課題3
課題2に条件
C ブロックの数字が重複してはならない。
を付け加えてください。
課題4
課題3で完成させたソフトに
ブロックの区切り*入れましょう。
課題5
課題4にさらにランダムを入れて自然な数独にしましょう。
課題5で卒業研究課題成就となります。
第9講第7話へ 第2話へ