マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第6章 6次魔方陣・8次魔方陣の作成
第15話 黄色は中央の点に対して点対称移動、緑は中央の直線に対する線対称移動、紫は中央の直線に対して線対称移動をすると魔方陣になることを具体例で確認する

第1行合計
64 + 2 + 59 + 5 + 4 + 62 + 7 + 57
= 66 + 64 + 66 + 64
= 130 + 130
= 260
第2行合計
16 + 55 + 11 + 52 + 53 + 14 + 50 + 9
= 71 + 63 + 67 + 59
= 134 + 126
= 260
第3行合計
41 + 23 + 46 + 20 + 21 + 43 + 18 + 48
= 64 + 66 + 64 + 66
= 130 + 130
= 260
第4行合計
25 + 34 + 30 + 37 + 36 + 27 + 39 + 32
= 59 + 67 + 63 + 71
= 126 + 134
= 260
第5行合計
33 + 26 + 38 + 29 + 28 + 35 + 31 + 40
= 59 + 67 + 63 + 71
= 126 + 134
= 260

第6行合計
17 + 47 + 22 + 44 + 45 + 19 + 42 + 24
= 64 + 66 + 64 + 66
= 130 + 130
= 260
第7行合計
56 + 15 + 51 + 12 + 13 + 54 + 10 + 49
= 61 + 63 + 67 + 59
= 124 + 136
= 260
第8行合計
8 + 58 + 3 + 61 + 60 + 6 + 63 + 1
= 66 + 64 + 66 + 64
= 130 + 130
= 260

第1列合計
64 + 16 + 41 + 25 + 33 + 17 + 56 + 8
= 80 + 66 + 50 + 64
= 146 + 114
= 260
第2列合計
2 + 55 + 23 + 34 + 26 + 47 + 15 + 58
= 57 + 57 + 73 + 73
= 114 + 146
= 260
第3列合計
59 + 11 + 46 + 30 + 38 + 22 + 51 + 3
= 70 + 76 + 60 + 54
= 146 + 114
= 260
第4列合計
5 + 52 + 20 + 37 + 29 + 44 + 12 + 61
= 57 + 57 + 73 + 73
= 114 + 146
= 260

第5列合計
4 + 53 + 21 + 36 + 28 + 45 + 13 + 60
= 57 + 57 + 73 + 73
= 114 + 146
= 260
第6列合計
62 + 14 + 43 + 27 + 35 + 19 + 54 + 6
= 76 + 70 + 54 + 60
= 146 + 114
= 260
第7列合計
7 + 50 + 18 + 39 + 31 + 42 + 10 + 63
= 57 + 57 + 73 + 73
= 114 + 146
= 260
第8列合計
57 + 9 + 48 + 32 + 40 + 24 + 49 + 1
= 66 + 70 + 64 + 60
= 136 + 124
= 260

対角線合計
64 + 55 + 46 + 37 + 28 + 19 + 10 + 1
= 119 + 83 + 47 + 11
= 202 + 58
= 260
逆対角線合計
57 + 50 + 43 + 36 + 29 + 22 + 15 + 8
= 107 + 79 + 51 + 23
= 186 + 74
= 260
これで全部合計を確認してすべて260になったことを証明したわけです。
ですが、すべて具体的な数字でやっているのでこれは8次魔方陣について証明しただけで、
8以上の4の倍数について
黄色は中央の点に対して点対称移動、緑は中央の直線に対する上下線対称移動、紫は中央の直線に対して左右線対称移動をすると魔方陣
となることを証明するためには記号の導入を必要とします。1からn×nまでの自然配列は
1 2 3 ・・・ n - 1 n
n + 1 n + 2 n + 3 ・・・ 2n - 1 2n
・
・
・
(i - 1)n + 1 (i - 1)n + 2 (i - 1)n + 3 ・・・ (i - 1)n + n - 1 3n
・
・
・
となりますから
a[ i ][ j ] = (i -1)n + j
となります。
この式で黄色点対称移動、緑上下線対称移動、紫左右点対称移動をしてから、
各行・各列・各対角線合計を計算すれば8以上の4の倍数次魔方陣ができていることを証明することができます。
ただし、大学数学の範囲になりますので証明は特別編という形にします。
数学に自信のある人だけが特別編をお読みください。
数学の証明とプログラミングは別ですから、
特別編は読まなくても差し支えありません。
さらに、重要なことを指摘しておきます。

今話では具体的に各行合計・各列合計・各対角線の合計を計算しました。
実は、今の国語と数学の教育で誤っていることが一つあると思っています。
抽象の方が一歩上の概念であるように両教科では扱われます。
でも、実は具体も大変重要なのです。
数学も文章も抽象と具体の往復作業なのです。
私は、小論文の指導と面接の指導では人気がありました。
面接練習で「あなたの長所は何ですか」の問いに対して「リーダーシップが取れることです」と返す生徒が多いわけですが、
私は、それは何も言っていないのと同じだよ、と言いました。
面接官は初対面であなたの言っていることが本当であるか本当ではないかは判断材料がありません。
ですから、「リーダーシップが取れることです」の発言の後に具体的なエピソードを入れて、
なるほどこの生徒はリーダーシップが取れそうだと印象付けることが大切であるとして、
次のような話を具体例を出して説明しました。
「私は、ソフト部で部長として部のために働いてきました。
ですが、強くなりたいという気持ちから、
部の中に二つの意見がありました。
『強くなりたければ基礎練習こそが必要だ』という意見と、
『いや、実戦的な練習こそが重要だ』という意見があったのです。
二つの意見の対立はエスカレートしていき、
部が空中分解の危機を迎えました。
私は、二つの意見に耳を傾け、
基礎練習と実戦練習の両方を取り入れることにしました。
部員も納得して練習に励み、
県大会準優勝という結果を残すことができました。
そんな体験から私はリーダーシップについては自信を持っています」
実は、NHKや野村証券に合格できる人は具体的なエピソードを語れる人なのです。
抽象も大切ですが、具体も負けず劣らず重要なのです。
さて、いよいよ関数を学びます。
実は C++の関数を学ぶと
魔方陣の構造=数学の構造=会社の構造=なぜプログラム全体をプロジェクトと呼ぶかという謎の解明=分析哲学の命題:この世の中は関数
関係で成り立っている
を実感できます。
皆さんにとって知の革命となるでしょう。
人生観・世界観・会社観を一新する地平転換=パラダイム転換となるでしょう。
数学の構造と会社の構造は同一です。
数学なんて何の役にも立たないと思っている世界観を
換えなければならないことを強く実感できるでしょう。
この世界は関数関係で成り立ってる!
のにその重要な考え方である関数を下らないとか役に立たないと思っている人は、
目からうろこが落ちる思いを抱くことになります。
プログラミングとは人生そのものだ!という認識を持つことになります。
第6章第14話へ 第7章第1話へ
本講義トップへ