14. Rubik's Cude: RubiksGroup.m について

目次へ

しばしは、Rubiks Group を使うので、 RubiksGroup.m ファイルを作ることにする。これにより次回の「15. Rubik's Cube: 解法のシナリオ( Mathematica )」で示すように説明が分かりやすくなる。

RubiksGroup.m コード

 (*  Rubik's Cube  Group  *)
rotF=Cycles[{{17,19,24,22},{18,21,23,20},{6,25,43,16},{7,28,42,13},{8,30,41,11}}];
rotB=Cycles[{{33,35,40,38},{34,37,39,36},{3,9,46,32},{2,12,47,29},{1,14,48,27}}];
rotL=Cycles[{{9,11,16,14},{10,13,15,12},{1,17,41,40},{4,20,44,37},{6,22,46,35}}];
rotR=Cycles[{{25,27,32,30},{26,29,31,28},{3,38,43,19},{5,36,45,21},{8,33,48,24}}];
rotU=Cycles[{{1,3,8,6},{2,5,7,4},{9,33,25,17},{10,34,26,18},{11,35,27,19}}];
rotD=Cycles[{{41,43,48,46},{42,45,47,44},{14,22,30,38},{15,23,31,39},{16,24,32,40}}];
cube=PermutationGroup[{rotF,rotB,rotR,rotL,rotU,rotD}];
(*   rotate  *)
rotate[p_,rot_]:=p[[#]]&/@Permute[Range[48],rot]

rotSet={rotF,rotB,rotR,rotL,rotU,rotD};
ruleRotate={1->rotSet[[1]],2->rotSet[[2]],3->rotSet[[3]],4->rotSet[[4]],
5->rotSet[[5]],6->rotSet[[6]],
-1->InversePermutation[rotSet[[1]]],-2->InversePermutation[rotSet[[2]]],
-3->InversePermutation[rotSet[[3]]],-4->InversePermutation[rotSet[[4]]],
-5->InversePermutation[rotSet[[5]]],-6->InversePermutation[rotSet[[6]]]};
(*    *)
rules={"f"->1,"b"->2,"r"->3,"l"->4,"u"->5,"d"->6,
"f^-1"->-1,"b^-1"->-2,"r^-1"->-3,"l^-1"->-4,"u^-1"->-5,"d^-1"->-6};
rules2={"f^2"->{1,1},"b^2"->{2,2},"r^2"->{3,3},"l^2"->{4,4},"u^2"->{5,5},"d^2"->{6,6},
"f^-2"->{-1,-1},"b^-2"->{-2,-2},"r^-2"->{-3,-3},"l^-2"->{-4,-4},"u^-2"->{-5,-5},"d^-2"->{-6,-6}};

rulesReverse=Reverse[#]&/@rules;

使い方は次の回で示します。

目次へ