Post date: Dec 13, 2015 2:10:32 PM
Last edit: 2015-12-19, Lu Wei <luweitest@gmail.com>
One algorithm to solve them all. Simplest maybe, but slow.
The algorithm is A=X·Z·X'·Z'. A to solve one face, A·At (At is A's mirror) to make a 3-block-rotate. All situations could be converted to use this basic operation.
Notation complies with scientific notation, not the usual UDLRFB notation.
Rotation direction complies with hand definition, i.e. R(ight rotate) = Rotate counter-clockwise, L(eft rotate) = Rotate clockwise, seen against the axis direction.
X'=X reverse.
"()" denotes block, "[]" denotes planes with same normal vector, "{}" denotes a rotation.
(1, -1, 1)z denotes the face of block (1, -1, 1) intersects z axis.
plane x-1, x0, x1 denotes planes [1, 0, 0] passing (-1,0,0), (0,0,0), (1,0,0)
Xt and X are symmetrical about plane [-1, 1, 0] passing origin, so Xt = Y', Zt = Z'
For 3×3×3
Corners first:
X = x1 R90°, Y = y1 R90°, Z = z1 R90°
A = X·Z·X'·Z', A' = Z·X·Z'·X', At = Y'·Z'·Y·Z, At' = Z'·Y'·Z·Y
B = X'·Y·X·Y', B' = Y·X'·Y'·X, Bt = Y·X'·Y'·X = B'
R rotate 3 upper corners (list all combination possibilities):
A·At = {(1, -1, 1)z, (-1, 1, 1)y, (-1, -1, 1)x} · {(1, 0, 1)z, (0, -1, 1)z, (0, 1, 1)y, (-1, 0, 1)x, (1, 1, 0)y}
A'·At' = {(1, -1, 1)z, (-1, 1, 1)y, (-1, -1, 1)z} · {(1, 0, 1)z, (-1, 0, 1)x, (0, 1, 1)y, (1, 1, 0)y, (0, -1, 1)z}
B·A = {(1, -1, 1)z, (-1, 1, 1)x, (-1, -1, 1)x} · {(1, 1, 0)y, (0, 1, 1)y, (0, -1, 1)z}
B'·A' = {(1, -1, 1)z, (-1, 1, 1)y, (-1, -1, 1)z} · {(1, 0, 1)z, (0, 1, 1)y, (0, -1, 1)z}
At·B' = {(1, -1, 1)z, (-1, 1, 1)y, (-1, -1, 1)x} · {(1, 0, 1)z, (0, 1, 1)y, (-1, 0, 1)x}
At'·B = {(1, -1, 1)z, (-1, 1, 1)x, (-1, -1, 1)x} · {(1, 1, 0)y, (-1, 0, 1)x, (1, 0, 1)z}
Their reverse L rotate 3 upper corners, so combine them will get no change or in-situ spinning like:
spin 2 adjacent corners
A·At·At·A = (-1, 1, 1)R120° · (-1, -1, 1)L120° · {(1, 0, 1)z, (1, 1, 0)y, (0, -1, 1)z, (-1, 0, 1)x, (0, 1, 1)y}
spin 2 opposite corners
A·B·B·A = (-1, 1, 1)R120° · (1, -1, 1)L120° · {(1, 0, 1)z, (1, 1, 0)y, (0, 1, 1)y}
Edges second:
redefine X = x0 R90°, Y = y0 R90°, Z = z1 R90°
rotate 3 edges:
A·At = {(1,0,1)z, (0,1,-1)y, (1,0,-1)x} · (1,0,0)L90° · (0,1,0)R90°
repeat it three times gives centers spinning:
(A·At)^3 = (1,0,0)R90° · (0,1,0)L90°