第18講 対角線法による魔方陣自動生成速度の1万倍加へ

第2話 課題の困難性

n=7のとき

0 13 14 15 16 17 7
18 1 19 20 21 8 22
23 24 2 25 9 26 27
28 29 30 3 31 32 33
34 35 10 36 4 37 38
39 11 40 41 42 5 43
12 44 45 46 47 48 6

番号付けでさえ難しそうだというのはお分かりですよね。
実はそれに更に、もう一つ大きな壁が立ちはだかっています。
壁とは、

   0
0 0 13 14 15 16 17 7
1 18 1 19 20 21 8 22
2 23 24 2 25 9 26 27
3 28 29 30 3 31 32 33
4 34 35 10 36 4 37 38
5 39 11 40 41 42 5 43
6 12 44 45 46 47 48 6

白い数字とy座標である紺の数字やx座標である赤の数字とを
いかに関連づけるです。
番号付けが

   0  1
1 0 1 2 3 4 5 6
2 7 8 9 10 11 12 13
3 14 15 16 17 18 19 20
4 21 22 23 24 25 26 27
5 28 29 30 31 32 33 34
6 35 36 37 38 39 40 41
7 42 43 44 45 46 47 48

であったときは、
簡単でしたから、
  y=g/n;
  x=g%n;
でよかったわけですが、
実は、第10講の魔方陣自動生成アプリは、
少し無駄がありました。
座標は決まっているのですから、
毎回計算させるのは時間の無駄です。
配列を用意しておいて、
y[0]=0,y[1]=0,・・・としておいて利用する方が利口です。

   0
0 0 13 14 15 16 17 7
1 18 1 19 20 21 8 22
2 23 24 2 25 9 26 27
3 28 29 30 3 31 32 33
4 34 35 10 36 4 37 38
5 39 11 40 41 42 5 43
6 12 44 45 46 47 48 6

であると、
y[0]=0,y[1]=1,y[2]=2,y[3]=3,y[4]=4,y[5]=5,y[6]=6
x[0]=0,x[1]=1,x[2]=2,x[3]=3,x[4]=4,x[5]=5,x[6]=6
まではいいのですが、
y[7]=0,y[8]=1,y[9]=2,y[10]=
4,y[11]=5,y[12]=6
x[7]=6,x[8]=5,x[9]=4,x[10]=
2,x[11]=1,x[12]=0
となり複雑になり、さらに、
y[13]=0,y[14]=0,y[15]=0,y[16]=0,y[17]=0,y[18]=
1,y[19]=1,y[20]=1,・・・
x[13]=1,x[14]=2,x[15]=3,x[16]=4,x[17]=5,x[18]=0,x[19]=
2,x[20]=3,・・・
となっては手を付けられない!!!
という状態になります。
しかし、私はこの複雑にして奇妙奇天烈な課題を、
高校2年生で習う数Bの数列の手法を使って解明しました。
とはいえ、もちろんかなり複雑な答になっていました。
いくら丁寧に説明しても、高校2,3年生でも理解は難しいでしょう。


ところが、読者の仮屋崎さんから
天才的な番号付けと座標の関連づけのアイデアが寄せられました。
この方法なら、
高校生どころか、小学生の皆さんにも理解できるでしょう。
お陰で、「小学生からエンジニアまでのc言語入門講義」
のまな板にのせることが出来たのです。
天才的方法とは何か。
次話では、座標作成関数をどのようにしたら作れるのか、
考え方を説明しましょう。



第1話へ 第3話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ