第8講 4次魔方陣と6次魔方陣の作成
第2話 4次と6次の魔方陣ってどうやって作るの?
今の学習段階では、魔方陣や数独(ナンバープレイス)問題の自動生成は無理です。
講義が進行すると、皆さんも自動生成プログラムの制作が出来るようになるでしょうが、
現時点では、不可能です。
今回、制作していただくのは私の発見した『偶数次魔方陣の作成方法』を適応して、
魔方陣を作成するプログラムです。
コンピュータが自分で発見するのではなく、
プログラマーの指示の通りに、命令を実行すると魔方陣が完成するというものです。
講義がかなり進んだ段階で挑戦する魔方陣自動生成は、
コンピュータが自ら考えて自ら発見するプログラムです。
『市販されているDSの数独のソフトでさえ、数独問題の自動生成が出来ないのに、
初心者に自動生成のプログラムなんて組めるの?』という疑問に対して、Yesと答えておきます。
この講義を粘り強く読んでいけば、魔方陣と数独(ナンバープレイス)問題の自動作成が出来るようになる、
と予告しておきましょう。
奇数次魔方陣には、昔から魔方陣の法則など作成方法が知られていました。
それに対して、偶数次魔方陣には一般的な作成方法がないとされてきました。
ところが、偶数次にも実は簡単な作成方法があることを私は発見しました。
詳しくは、小学生・中学生のための魔方陣授業(初歩から最新研究まで)の
第28回 新魔方陣の法則(偶数次版魔方陣の法則)第1弾
第29回 新魔方陣の法則(偶数次版魔方陣の法則)第2弾をお読みになるか、
エクセルVBAマクロ偶数次版魔方陣の法則開いていろいろ実行していただきたいと思いますが、
4次と6次の場合については、ここでも説明しておきましょう。
まず、4次から。
4次魔方陣を作成する方法は、
非常に簡単です。
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
1から16まで普通に並べておいて、ピンクの部分を中心に対して点対称移動すればいいのです。
16 | 2 | 3 | 13 |
5 | 11 | 10 | 8 |
9 | 7 | 6 | 12 |
4 | 14 | 15 | 1 |
逆に、緑の部分を中心に対して点対称移動しても出来ます。
1 | 15 | 14 | 4 |
12 | 6 | 7 | 9 |
8 | 10 | 11 | 5 |
13 | 3 | 2 | 16 |
6次魔方陣は、やはり1から36まで自然に並べておいて、
1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 | 33 | 34 | 35 | 36 |
ピンクは、中心に対して点対称移動
紺は、中央の直線に対して左右の線対称移動
薄緑は、中央の直線に対して上下の線に線対称移動
させると、
36 | 32 | 4 | 3 | 5 | 31 |
12 | 29 | 27 | 10 | 26 | 7 |
19 | 17 | 22 | 21 | 14 | 18 |
13 | 20 | 16 | 15 | 23 | 24 |
25 | 11 | 9 | 28 | 8 | 30 |
6 | 2 | 33 | 34 | 35 | 1 |
6次魔方陣が完成します。注目は、
36 | 32 | 4 |
12 | 29 | 27 |
19 | 17 | 22 |
の部分。斜め下に下がっていくという明確な法則性がありますね。
後は、上と下に鏡をおけば移動箇所がはっきりします。
点対称移動や線対称移動させるには、(1,36)(29,58)・・・(3,5)(7,12)・・・(13,19)
を交換すればよいのです。
では、
a=1
b=36
データはどうやったら交換できるでしょうか。
次のような簡単なシートと実行コード・消去コードを作り、実行コードの中身を作り、
aとbの値を入力すると、交換して表示してくれるようなマクロにしましょう。
シート
コード
Private Sub CommandButton1_Click()
End Sub
Private Sub CommandButton2_Click()
Columns("B").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
実行例
第1話へ 第3話へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る