syakoo's Lab

技術ブログやちょっと気合の入った記事を残すブログ

魔法陣について少し考えてみる(#2 大きな命題)

はじめに

今作っているゲームのために魔法陣について少し深く考えてみた記録。数学っぽく固く書きたくないので、できるだけ砕いて説明していきます。

ここで用いる魔法陣は1~9の数字を3×3のマスに縦横斜めの和が一定になるように配置した方陣を想定しています(他の方式があるか知らないけれど)。

このページは少し難しめな内容になっています。前回の記事は優しく説明しているかと思うので、前回の記事も閲覧していただけると幸いです。(前回の記事)

考えてみる命題

今回は大きな命題を考えていきます。その命題は

3×3の魔法陣は対称形を除いて一つしか存在しない

ということです。これを証明するために中くらいの命題を用意します。

それではこれらの予想が正しいか考えていきます。もちろん前回の記事の小さな命題も使います。

f:id:syakoo:20190831135135p:plain

証明

最初にも述べていますが、厳密な証明はしないので他サイトを参考にしてください。

この証明には剰余(Modulo)と言われる考え方の基礎的な知識が必要です。できるだけわかりやすく説明しますが、途中の演算等でつまずいたら剰余について軽く触れることをオススメします。

3×3の魔法陣の角に入る数字は決まっている

まず、1~9の数字をー1をして3で割った商と余りのペアに変換します。


\begin{align}
1 - 1 &= 0 = 0 \,\,余り\, 0 => (0,0) \\
2 - 1 &= 1 = 0 \,\,余り\, 1 => (0,1) \\
3 - 1 &= 2 = 0 \,\,余り\, 2 => (0,2) \\
4 - 1 &= 3 = 1 \,\,余り\, 0 => (1,0) \\
5 - 1 &= 4 = 1 \,\,余り\, 1 => (1,1) \\
6 - 1 &= 5 = 1 \,\,余り\, 2 => (1,2) \\
7 - 1 &= 6 = 2 \,\,余り\, 0 => (2,0) \\
8 - 1 &= 7 = 2 \,\,余り\, 1 => (2,1) \\
9 - 1 &= 8 = 2 \,\,余り\, 2 => (2,2) \\
\end{align}

これでどうなったのかというと、1~9の数字を3で割った商3で割った余りでグループ分けできるようになります。

f:id:syakoo:20190831135240p:plain
グループ分け
変換したことで、前回の記事の命題にどんな変化があったかを考えます。命題の根本的な考え方は変わらず、値だけが変わります。

変換前 変換後
魔法陣全体の合計値 45 36 (-9)
一列の合計 15 12 (-3)
中央の値 5 4 (-1)

これから進んでいきます。

一列の合計を3で割った余りを等しくするためには、2つの方法があります。

  1. 余りをそれぞれ0、1、2で集める
  2. 余りが0,1,2のペアを集める

f:id:syakoo:20190831135423p:plain

しかし、1.については合計を3で割った余りは等しいですが、合計自体が等しくなる(12になる)のは余りが1の時のみです。

なぜ余りが1の時のみなのか簡単に説明すると、中心が4ということに関係しています。

同じく、合計が等しくなる(12になる)のは、上の条件に加えて

  1. 商をそれぞれ0,1,2で集める
  2. 商が0,1,2のペアを集める

これも同様に、商が1の時のみ1.が成功します。これはそれほど難しくなく、商が0、1、2と変わることで元々の数字は0、3、6と大きく変わっていくため、均等に配置するにはバラつかせるしかありません。

これを踏まえたうえで魔法陣について考えてみます。

まず、中心は4で確定なので配置します。カッコは商と余りで分けた表現です。

_ (_, _)_ (_, _)_ (_, _)
_ (_, _)4 (1, 1)_ (_, _)
_ (_, _)_ (_, _)_ (_, _)

次に、余りを配置していきます。余りが1のみ連続で配置が可能でそれ以外は縦横斜めに関してバラバラに配置する必要があるのでこんな感じになります。

_ (_, 1)_ (_, 2)_ (_, 0)
_ (_, 0)4 (1, 1)_ (_, 2)
_ (_, 2)_ (_, 0)_ (_, 1)

0と2は逆に配置しても大丈夫です。ただ、角に関しては両方1の角のペア0と2のペアのどちらかに確定します。

最後に、商を配置していきます。余りの時と同様に商が1のみ連続で配置が可能でそれ以外は縦横斜めに関してバラバラに配置する必要がありまた同じぺア(商, 余り)の数字が出ないように配置します。

_ (0, 1)_ (2, 2)_ (1, 0)
_ (2, 0)4 (1, 1)_ (0, 2)
_ (1, 2)_ (0, 0)_ (2, 1)

これも余りの時と同様に、角に関しては両方1の角のペア0と2のペアのどちらかに確定します。

最後に、商と余りから値を出します。3で割る除算だったので、 3×(商)+(余り)ですね。

1 (0, 1)8 (2, 2)3 (1, 0)
6 (2, 0)4 (1, 1)2 (0, 2)
5 (1, 2)0 (0, 0)7 (2, 1)

以上より、角に関して 3 (1, 0)、5 (1, 2)、1 (0, 1)、7 (2, 1)の4つが配置されることは確定であり、前回の記事の命題3.より3と5、1と7はペアとしてそれぞれ対角線上に配置される

最初に変換で(-1)していたので、元に戻して(+1)結論を書くと、

角に関して 4、6、2、8の4つが配置されることは確定であり、4と6、2と8はペアとしてそれぞれ対角線上に配置される


上の命題を用いて最後の問題を証明します。

3×3の魔法陣は対称形を除いて一つしか存在しない

前回の記事の命題1.より間の数字も角が確定すれば確定します。

2?4
?5?
6?8

つまり、角が配置されれば魔法陣は完成するため、魔法陣は角の配置によって形が変わります。

ここで、上の命題より、4と6、2と8の対称移動にのみ角は変化するため、3×3の魔法陣は対称形を除いて一つしか存在しないことが言えます

f:id:syakoo:20190831135651p:plain
角のパターン

おわりに

これで3×3の魔法陣についての考察はたぶん終わりです。シンプルなのに非常に深いゲームでした。ちなみに、(1, 0)のようなペアを重ならないように配置するものはギリシアラテン方陣という名称があります。