日記
3x3x3ルービックキューブの状態空間 Rubik(3)
キューブに対する操作は、キューブ面要素の置換群となる。
- 「何もしない」を単位元とする
- キューブ面要素は、3x3x6=54個。
- ただし各面の中心要素が「向きなし」(つまり簡単なほうのルービックキューブ)であれば、中心要素は置換しないので、8x6=48個。
- 逆に各面の中心要素が「向きあり」(つまり難しくなったルービックキューブ)であれば、中心要素はさらに4つに分割されると考えて、(8+4)x6=72個。
- これらの要素が、キューブに対する操作によって置換することを考えればよい。
キューブの6面に以下のように名前をつける:
- x軸の+側を面0、−側を面1
- y軸の+側を面2、−側を面3
- z軸の+側を面4、−側を面5
そして、面i を時計回りに90度回転する操作を rot_i とする。
面要素の集合は、実際には互いに混じらない以下のような複数の部分集合に分離できる:
- 各面の中心要素(4個/面)の集合 Cen0〜Cen5
※ Cen_i と Cen_j (i≠j) は互いに混じらない。
- 6面すべての辺要素(4X6=24個)の集合 Edge
- 6面すべての角要素(4X6=24個)の集合 Corn
操作 rot_i によって、面要素は以下のように置換される:
- Cen_i の 4個が回転する
(0 1 2 3) --> (1 2 3 0)
残りの Cen_j (j≠i) は変化なし
(0 1 2 3) --> (0 1 2 3)
- Edge の中で、4個による回転が2組発生する
(i*4 i*4+1 i*4+2 i*4+3) --> (i*4+1 i*4+2 i*4+3 i*4)
((i+2)*4+3 (i+5)*4+2 (i+3)*4+3 (i+4)*4)
--> ((i+5)*4+2 (i+3)*4+3 (i+4)*4) (i+2)*4+3)
- Corn の中で、4個による回転が3組発生する
(i*4 i*4+1 i*4+2 i*4+3) --> (i*4+1 i*4+2 i*4+3 i*4)
((i+2)*4 (i+5)*4+2 (i+3)*4+3 (i+4)*4+1)
--> ((i+5)*4+2 (i+3)*4+3 (i+4)*4+1 (i+2)*4)
((i+2)*4+3 (i+5)*4+1 (i+3)*4+2 (i+4)*4)
--> ((i+5)*4+1 (i+3)*4+2 (i+4)*4 (i+2)*4+3)
操作 rot_i を表す行列は、上記置換を表現するような、72x72行列 R_i となる。
(内部的には、4x4行列6個(Cen_i)、24x24行列2個(Edge & Corn)が対角線上に並んだ形となる)
そして、3x3x3ルービックキューブに対する任意の操作(そして状態空間)は、単位行列 E と 6つの72x72行列 R_0〜R_5 の任意の積からなる集合 Rubik(3) として表されることとなる。
※ ほんとうは、もっとうまく(記述量を小さく) Rubik(3) を表現する方法があると思う。
ここでは、操作 rot_i を置換行列に簡単に(安直に)表現することを優先して、冗長に Rubik(3) を表現した。
Rubik(3) に対する、特徴的な(複合)操作
筆者の経験的に以下の操作が存在することがわかっている:
- 角要素・中心要素を変化させずに、任意の3組の辺要素(2要素/1組)の位置を入れ替える操作が存在する。
- 辺要素・中心要素を変化させずに、任意の3組の角要素(3要素/1組)の位置を入れ替える操作が存在する。
- 角要素・中心要素を変化させずに、任意の2組の辺要素(2要素/1組)を「裏返す」操作が存在する。
- 辺要素・中心要素を変化させずに、任意の2組の角要素(3要素/1組)を「互いに逆向きにねじる」操作が存在する。
- 角要素・辺要素を変化させずに、任意の2つの中心要素を180度回転する操作が存在する。
Rubik(3) に含まれうる要素
(ToDo)