――このところルービックキューブにのめり込んでいる店主は、今日もまた一人でつぶやいている。
展開図を回転して「r3」が「r1」に変化するなんていうのは、どうもピンとこないよな。それに「r3」が「y1」や「w9」と頂点を共有しているというのをいちいち展開図で確認しなくてはならないのも面倒くさいし、この番号の付け方が面の向きによってバラバラになってしまうも気に入らない。このままで、キューブの動きをシミュレートするプログラムを作ろうとすると、どの面とどの面がつながっているのかを書かなきゃならないだろう。
これを何とかすっきり書けるようにしたいものだ。だけど、「群論」なんていう難しいことを考えたくはない。別に数学の論文を書こうとしているわけでもないし、最短の手順を探索するプログラム作りに挑戦しようとしているのでもない。単純にキューブの動きをシミュレートしたいだけなのだから…。
そんなことをぼんやり考えながら、ランダムな回転操作(左手を使って背後で回すと、よく分からなくなる)を数回繰り返して、ほどほどに崩れたところから数回の手順で元に戻す一人遊び(詰めキューブ?)をやっていた。定型的な解法に頼らず、色の配置を見てその都度考えることになるので、何べんやっても飽きがこない。訳も分からず暗記した解法を使って元に戻してもちっとも面白くない。そんなのは、解の公式を使って二次方程式を解くようなものだ。
そのとき突然、ひらめいた。立体なんだから平面上で考えるより空間で考えりゃいいんだ。なんだ、簡単じゃないか。(x, y, z)を使ってキューブを識別すれば、どの面とどの面がつながっているかをいちいち考えずにすむ。複数の面を持ったキューブ自体を移動させれば計算もシンプルになるはずだ。なるほど、面を倒したりして考えていたから面倒なことになっていたんだな。
――結局、最後は駄洒落かよ。ひねりが足りんな。
(y=3) (x=3)
(y=2) \ / (x=2)
/ \ (y=1) \ /|\ / (x=1)
/ \ \ / | \ /
/ 白 \ /橙 | 緑\
|\ (z=1) /| _(z=1)_ | (x=3)|(y=3) |
| \ / | _(z=2)_ | / \ |
| 赤\ /黄 | _(z=3)_ | / \ |
| (x=1)|(y=1) | |/ 青 \|
\ | / \ (z=3) /
/ \ | / \ \ /
(y=3) / \|/ \ (x=3) \ /
(y=2) / \ (x=2)
(y=1) (x=1)
(図7:座標入り展開図)(*)
白(z=1)の面
+-------+-------+-------+
|(1,3,1)|(2,3,1)|(3,3,1)|
+-------+-------+-------+
|(1,2,1)|(2,2,1)|(3,2,1)|
+-------+-------+-------+
|(1,1,1)|(2,1,1)|(3,1,1)|
+-------+-------+-------+
赤(x=1)の面 黄(y=1)の面
+-------+-------+-------+ +-------+-------+-------+
|(1,3,1)|(1,2,1)|(1,1,1)| |(1,1,1)|(2,1,1)|(3,1,1)|
+-------+-------+-------+ +-------+-------+-------+
|(1,3,2)|(1,2,2)|(1,1,2)| |(1,1,2)|(2,1,2)|(3,1,2)|
+-------+-------+-------+ +-------+-------+-------+
|(1,3,3)|(1,2,3)|(1,1,3)| |(1,1,3)|(2,1,3)|(3,1,3)|
+-------+-------+-------+ +-------+-------+-------+
/ /
____________________/ /
/ ____________________/
/ /
/ 青(z=3)の面 / 橙(x=3)の面
+-------+-------+-------+ +-------+-------+-------+
|(1,1,3)|(2,1,3)|(3,1,3)| |(3,1,3)|(3,1,2)|(3,1,1)|
+-------+-------+-------+ +-------+-------+-------+
|(1,2,3)|(2,2,3)|(3,2,3)| |(3,2,3)|(3,2,2)|(3,2,1)|
+-------+-------+-------+ +-------+-------+-------+
|(1,3,3)|(2,3,3)|(3,3,3)| |(3,3,3)|(3,3,2)|(3,3,1)|
+-------+-------+-------+ +-------+-------+-------+
緑(y=3)の面
+-------+-------+-------+
|(1,3,3)|(2,3,3)|(3,3,3)|
+-------+-------+-------+
|(1,3,2)|(2,3,2)|(3,3,2)|
+-------+-------+-------+
|(1,3,1)|(2,3,1)|(3,3,1)|
+-------+-------+-------+
(*)表示幅の都合で、下半分の三面を左にずらしました。


コメントする