protected 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 (int 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[udslice >> 9, cx >> 9] << 9 | cx & 0x1ff; UDSliceMove[i, j + k] = (char)udslice; } } } }
protected static void initMPermMoveConj() { CubieCube c = new CubieCube(); CubieCube d = new CubieCube(); for (int i = 0; i < N_MPERM; i++) { c.setMPerm(i); for (int j = 0; j < N_MOVES2; j++) { CubieCube.EdgeMult(c, CubieCube.moveCube[Util.ud2std[j]], d); MPermMove[i, j] = (char)d.getMPerm(); } for (int j = 0; j < 16; j++) { CubieCube.EdgeConjugate(c, CubieCube.SymInv[j], d); MPermConj[i, j] = (char)d.getMPerm(); } } }