internal static void InitUDSliceMoveConj() { CubieCube c = new CubieCube(); CubieCube d = new CubieCube(); for (int i = 0; i < N_SLICE; i++) { c.SetUDSlice(i); for (int j = 0; j < N_MOVES; j += 3) { CubieCube.EdgeMult(c, CubieCube.MoveCube[j], d); UDSliceMove[i][j] = (char)d.GetUDSlice(); } for (uint j = 0; j < 16; j += 2) { CubieCube.EdgeConjugate(c, CubieCube.SymInv[j], d); UDSliceConj[i][j >> 1] = (char)(d.GetUDSlice() & 0x1ff); } } for (int i = 0; i < N_SLICE; i++) { for (int j = 0; j < N_MOVES; j += 3) { int udslice = UDSliceMove[i][j]; for (int k = 1; k < 3; k++) { int cx = UDSliceMove[udslice & 0x1ff][j]; udslice = Util.PermMult[(uint)udslice >> 9][((uint)cx >> 9)] << 9 | cx & 0x1ff; UDSliceMove[i][j + k] = (char)(udslice); } } } }