第8講 4次魔方陣と6次魔方陣の作成

第9話 6次魔方陣コード解説その3(上下線対称移動) 

次に、
  '上下対称移動
  For i = 0 To m - 1
    w = a(i, (i + 1) Mod 3)
    a(i, (i + 1) Mod 3) = a(n - 1 - i, (i + 1) Mod 3)
    a(n - 1 - i, (i + 1) Mod 3) = w
  Next
の部分を見ていきましょう。
(i + 1) Mod 3 は(i+1)を3で割ったときの余りを計算するものです。
したがって、
i=0のとき、(i + 1) Mod 3=(0 + 1) Mod 3=1
i=1のとき、(i + 1) Mod 3=(1 + 1) Mod 3=2
i=2のとき、(i + 1) Mod 3=(2 + 1) Mod 3=0
と動いていきますので、a(i, (i + 1) Mod 3)は
i=0とのき、a(i, (i + 1) Mod 3)=a(0, 1)
i=1とのき、a(i, (i + 1) Mod 3)=a(1, 2)
i=2とのき、a(i, (i + 1) Mod 3)=a(2, 0)
を意味し、

   0  1 2 3 4 5
 0 1 2 3  4 5 6
 1 7 8 9 10 11 12
 2 13 14 15 16 17 18
 3 19 20 21 22 23 24
 4 25 26 27 28 29 30
 5 31 32 33 34 35 36

2,9,13が対象となります。
a(n - 1 - i, (i + 1) Mod 3)は何でしょうか。
i=0とのき、a(i, n - 1 - i)=a(n - 1 - i, (i + 1) Mod 3)=a(6 - 1 - 0, (0 + 1) Mod 3)=a(5, 1)
i=1とのき、a(i, n - 1 - i)=a(n - 1 - i, (i + 1) Mod 3)=a(6 - 1 - 1, (1 + 1) Mod 3)=a(4, 2)
i=2とのき、a(i, n - 1 - i)=a(n - 1 - i, (i + 1) Mod 3)=a(6 - 1 - 2, (2 + 1) Mod 3)=a(3, 0)なので、
a(n - 1 - i, (i + 1) Mod 3)によって

   0  1 2 3 4 5
 0 1 2 3  4 5 6
 1 7 8 9 10 11 12
 2 13 14 15 16 17 18
 3 19 20 21 22 23 24
 4 25 26 27 28 29 30
 5 31 32 33 34 35 36

32,27,19が対象とされます。
結局、
  '上下対称移動
  For i = 0 To m - 1
    w = a(i, (i + 1) Mod 3)
    a(i, (i + 1) Mod 3) = a(n - 1 - i, (i + 1) Mod 3)
    a(n - 1 - i, (i + 1) Mod 3) = w
  Next
によって、

   0  1 2 3 4 5
 0 1 2 3  4 5 6
 1 7 8 9 10 11 12
 2 13 14 15 16 17 18
 3 19 20 21 22 23 24
 4 25 26 27 28 29 30
 5 31 32 33 34 35 36

薄緑(2,32),(9,27),(13,19)が交換されます。






第8話へ 第10話へ

004


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

数学研究室に戻る