最終講 卒業研究と卒業試験

第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話へ


025


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ



数学研究室に戻る