public static int[] Slice_Flip_Prun = new int[CoordCube.N_SLICE1 * CoordCube.N_FLIP / 2]; // 495, 1024 = 506 880 static Slice_Flip_PrunClass() { for (int i = 0; i < CoordCube.N_SLICE1 * CoordCube.N_FLIP / 2; i++) { Slice_Flip_Prun[i] = -1; //SHOULD BE -1 changed to 0 } int depth = 0; CoordCube.setPruning(Slice_Flip_Prun, 0, 0); int done = 1; while (done != CoordCube.N_SLICE1 * CoordCube.N_FLIP) { for (int i = 0; i < CoordCube.N_SLICE1 * CoordCube.N_FLIP; i++) { int flip = i / CoordCube.N_SLICE1, slice = i % CoordCube.N_SLICE1; if (CoordCube.getPruning(Slice_Flip_Prun, i) == depth) { for (int j = 0; j < 18; j++) { int newSlice = FRtoBRClass.FRtoBR_Move[slice * 24, j] / 24; int newFlip = FlipMoveClass.flipMove[flip, j]; if (CoordCube.getPruning(Slice_Flip_Prun, CoordCube.N_SLICE1 * newFlip + newSlice) == 0x0f) { CoordCube.setPruning(Slice_Flip_Prun, CoordCube.N_SLICE1 * newFlip + newSlice, (depth + 1)); done++; } } } } depth++; } }
static Slice_Twist_PrunClass() { for (int i = 0; i < CoordCube.N_SLICE1 * CoordCube.N_TWIST / 2 + 1; i++) { Slice_Twist_Prun[i] = -1; // SHOULD BE -1 changed to 0 } int depth = 0; CoordCube.setPruning(Slice_Twist_Prun, 0, 0); int done = 1; while (done != CoordCube.N_SLICE1 * CoordCube.N_TWIST) { for (int i = 0; i < CoordCube.N_SLICE1 * CoordCube.N_TWIST; i++) { int twist = i / CoordCube.N_SLICE1, slice = i % CoordCube.N_SLICE1; if (CoordCube.getPruning(Slice_Twist_Prun, i) == depth) { for (int j = 0; j < 18; j++) { int newSlice = FRtoBRClass.FRtoBR_Move[slice * 24, j] / 24; int newTwist = TwistMoveClass.twistMove[twist, j]; if (CoordCube.getPruning(Slice_Twist_Prun, CoordCube.N_SLICE1 * newTwist + newSlice) == 0x0f) { CoordCube.setPruning(Slice_Twist_Prun, CoordCube.N_SLICE1 * newTwist + newSlice, (depth + 1)); done++; } } } } depth++; } }
static Slice_URtoDF_Parity_PrunClass() { for (int i = 0; i < CoordCube.N_SLICE2 * CoordCube.N_URtoDF * CoordCube.N_PARITY / 2; i++) { Slice_URtoDF_Parity_Prun[i] = -1; //SHOULD BE -1 changed to 0 } int depth = 0; CoordCube.setPruning(Slice_URtoDF_Parity_Prun, 0, 0); int done = 1; while (done != CoordCube.N_SLICE2 * CoordCube.N_URtoDF * CoordCube.N_PARITY) { for (int i = 0; i < CoordCube.N_SLICE2 * CoordCube.N_URtoDF * CoordCube.N_PARITY; i++) { int parity = i % 2; int URtoDF = (i / 2) / CoordCube.N_SLICE2; int slice = (i / 2) % CoordCube.N_SLICE2; if (CoordCube.getPruning(Slice_URtoDF_Parity_Prun, i) == depth) { for (int j = 0; j < 18; j++) { switch (j) { case 3: case 5: case 6: case 8: case 12: case 14: case 15: case 17: continue; default: int newSlice = FRtoBRClass.FRtoBR_Move[slice, j]; int newURtoDF = URtoDFClass.URtoDF_Move[URtoDF, j]; int newParity = CoordCube.parityMove[parity, j]; if (CoordCube.getPruning(Slice_URtoDF_Parity_Prun, (CoordCube.N_SLICE2 * newURtoDF + newSlice) * 2 + newParity) == 0x0f) { CoordCube.setPruning(Slice_URtoDF_Parity_Prun, (CoordCube.N_SLICE2 * newURtoDF + newSlice) * 2 + newParity, (depth + 1)); done++; } break; } } } } depth++; } }