MCPcopy Create free account
hub / github.com/MeigenChou/DCTimer-Android / phase1opt

Method phase1opt

app/src/main/java/cs/min2phase/Search.java:487–654  ·  view source on GitHub ↗

@return 0: Found or Probe limit exceeded 1: Try Next Power 2: Try Next Axis

(
            int ud_twist, int ud_tsym, int ud_flip, int ud_fsym, int ud_slice, int ud_prun,
            int rl_twist, int rl_tsym, int rl_flip, int rl_fsym, int rl_slice, int rl_prun,
            int fb_twist, int fb_tsym, int fb_flip, int fb_fsym, int fb_slice, int fb_prun,
            int maxl, int lm)

Source from the content-addressed store, hash-verified

485 * 2: Try Next Axis
486 */
487 private int phase1opt(
488 int ud_twist, int ud_tsym, int ud_flip, int ud_fsym, int ud_slice, int ud_prun,
489 int rl_twist, int rl_tsym, int rl_flip, int rl_fsym, int rl_slice, int rl_prun,
490 int fb_twist, int fb_tsym, int fb_flip, int fb_fsym, int fb_slice, int fb_prun,
491 int maxl, int lm) {
492
493 if (ud_twist == 0 && ud_flip == 0 && ud_slice == 0 && maxl < 5) {
494 maxDep2 = maxl + 1;
495 depth1 = length1 - maxl;
496 return initPhase2() == 0 ? 0 : 1;
497 }
498
499 for (int axis = 0; axis < 18; axis += 3) {
500 if (axis == lm || axis == lm - 9 || (isRecovery && axis < move[length1 - maxl] - 2)) {
501 continue;
502 }
503 for (int power = 0; power < 3; power++) {
504 int m = axis + power;
505
506 if (isRecovery && m != move[length1 - maxl]) {
507 continue;
508 }
509
510 // UD Axis
511 int ud_slicex = CoordCube.UDSliceMove[ud_slice][m] & 0x1ff;
512 int ud_twistx = CoordCube.TwistMove[ud_twist][CubieCube.Sym8Move[ud_tsym][m]];
513 int ud_tsymx = CubieCube.Sym8Mult[ud_twistx & 7][ud_tsym];
514 ud_twistx >>= 3;
515 int ud_flipx = CoordCube.FlipMove[ud_flip][CubieCube.Sym8Move[ud_fsym][m]];
516 int ud_fsymx = CubieCube.Sym8Mult[ud_flipx & 7][ud_fsym];
517 ud_flipx >>= 3;
518
519 int ud_prunx = 0;
520 if (USE_FULL_PRUN) {
521 ud_prunx = CoordCube.getUDSliceFlipTwistPrun(ud_twistx, ud_tsymx, ud_flipx, ud_fsymx, ud_slicex, ud_prun);
522 if (ud_prunx > maxl) {
523 break;
524 } else if (ud_prunx == maxl) {
525 continue;
526 }
527 } else {
528 if (USE_TWIST_FLIP_PRUN) {
529 ud_prunx = CoordCube.getPruning(CoordCube.TwistFlipPrun,
530 ud_twistx << 11 | CubieCube.FlipS2RF[ud_flipx << 3 | CubieCube.Sym8MultInv[ud_fsymx][ud_tsymx]]);
531 if (ud_prunx > maxl) {
532 break;
533 } else if (ud_prunx == maxl) {
534 continue;
535 }
536 }
537 ud_prunx = Math.max(ud_prunx, CoordCube.getPruning(CoordCube.UDSliceTwistPrun,
538 ud_twistx * 495 + CoordCube.UDSliceConj[ud_slicex][ud_tsymx]));
539 if (ud_prunx > maxl) {
540 break;
541 } else if (ud_prunx == maxl) {
542 continue;
543 }
544 ud_prunx = Math.max(ud_prunx, CoordCube.getPruning(CoordCube.UDSliceFlipPrun,

Callers 1

searchOptMethod · 0.95

Calls 3

initPhase2Method · 0.95
getPruningMethod · 0.95

Tested by

no test coverage detected