@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)
| 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, |
no test coverage detected