U := (1,3,9,7)(2,6,8,4)(10,37,28,19)(11,38,29,20)(12,39,30,21);
D := (16,25,34,43)(17,26,35,44)(18,27,36,45)(46,48,54,52)(47,51,53,49);
L := (1,19,46,45)(4,22,49,42)(7,25,52,39)(10,12,18,16)(11,15,17,13);
R := (3,43,48,21)(6,40,51,24)(9,37,54,27)(28,30,36,34)(29,33,35,31);
F := (7,28,48,18)(8,31,47,15)(9,34,46,12)(19,21,27,25)(20,24,26,22);
B := (1,16,54,30)(2,13,53,33)(3,10,52,36)(37,39,45,43)(38,42,44,40);
U2 := U*U;
U3 := U2*U;
D2 := D*D;
D3 := D2*D;
L2 := L*L;
L3 := L2*L;
R2 := R*R;
R3 := R2*R;
F2 := F*F;
F3 := F2*F;
B2 := B*B;
B3 := B2*B;
Aperm := R*B3*R*F2*R3*B*R*F2*R2;
Jperm := B2*L*U*L3*B2*R*D3*R*D*R2;
fururf := F*U*R*U3*R3*F3;
GPLL := Group (U, Aperm, Jperm);
GLL := Group (U, Jperm, fururf);
FaceletCycleLen := function (g, n)
local i, j;
i := n;
j := 1;
while i^g <> n do
i := i^g;
j := j + 1;
od;
return j;
end;
CubieCycleLen := function (g, n)
local i, j, cmap;
cmap := [
1, 2, 3, 4, 5, 6, 7, 8, 9,
1, 4, 7, 13, 14, 15, 52, 49, 46,
7, 8, 9, 15, 23, 24, 46, 47, 48,
9, 6, 3, 24, 32, 33, 48, 51, 54,
3, 2, 1, 33, 41, 13, 54, 53, 52,
46, 47, 48, 49, 50, 51, 52, 53, 54
];
i := cmap[n];
j := 1;
while cmap[i^g] <> cmap[n] do
i := cmap[i^g];
j := j + 1;
od;
return j;
end;
Check33 := function (g)
local ok, c1, c3, e2, e4;
ok := false;
c1 := CubieCycleLen (g, 1);
if (c1 = 3) and (FaceletCycleLen (g, 1) = 3) then
ok := true;
else
c3 := CubieCycleLen (g, 3);
if (c3 = 3) and (FaceletCycleLen (g, 3) = 3) then
ok := true;
fi;
fi;
if ok then
ok := false;
e2 := CubieCycleLen (g, 2);
if (e2 = 3) and (FaceletCycleLen (g, 2) = 3) then
ok := true;
else
e4 := CubieCycleLen (g, 4);
if (e4 = 3) and (FaceletCycleLen (g, 4) = 3) then
ok := true;
fi;
fi;
fi;
return ok;
end;
Check33All := function (G)
local g, g2, g3, g4, h, j, c, Lused, Lout, Lc, Le, Lx;
Lused := [];
Lout := [];
for g in G do
if not (g in Lused) then
h := g;
j := 1;
Lx := [];
c := 0;
while j <= 4 do
if Check33 (h) then
c := c + 1;
fi;
Add (Lused, h);
h := h*U;
j := j + 1;
od;
Add (Lout, c);
fi;
od;
return Lout;
end;
result := Check33All (GLL);;
nx := Size (result);
n1 := Size (Positions (result, 1));
n2 := Size (Positions (result, 2));
(n1+n2)/nx;