| 452 | } |
| 453 | |
| 454 | private String searchOpt() { |
| 455 | int maxprun1 = 0; |
| 456 | int maxprun2 = 0; |
| 457 | for (int i = 0; i < 6; i++) { |
| 458 | if (prun[i][0] == -1) { |
| 459 | fillprun(i, 0); |
| 460 | } |
| 461 | if (i < 3) { |
| 462 | maxprun1 = Math.max(maxprun1, prun[i][0]); |
| 463 | } else { |
| 464 | maxprun2 = Math.max(maxprun2, prun[i][0]); |
| 465 | } |
| 466 | } |
| 467 | urfIdx = maxprun2 > maxprun1 ? 3 : 0; |
| 468 | preIdx = 0; |
| 469 | for (length1 = isRecovery ? length1 : 0; length1 < sol; length1++) { |
| 470 | if (prun[0][0] <= length1 && prun[1][0] <= length1 && prun[2][0] <= length1 && |
| 471 | phase1opt(twist[0 + urfIdx][0] >> 3, twist[0 + urfIdx][0] & 7, flip[0 + urfIdx][0] >> 3, flip[0 + urfIdx][0] & 7, slice[0 + urfIdx][0] & 0x1ff, prun[0 + urfIdx][0], |
| 472 | twist[1 + urfIdx][0] >> 3, twist[1 + urfIdx][0] & 7, flip[1 + urfIdx][0] >> 3, flip[1 + urfIdx][0] & 7, slice[1 + urfIdx][0] & 0x1ff, prun[1 + urfIdx][0], |
| 473 | twist[2 + urfIdx][0] >> 3, twist[2 + urfIdx][0] & 7, flip[2 + urfIdx][0] >> 3, flip[2 + urfIdx][0] & 7, slice[2 + urfIdx][0] & 0x1ff, prun[2 + urfIdx][0], |
| 474 | length1, -1) == 0) { |
| 475 | return solution == null ? "Error 8" : solution; |
| 476 | } |
| 477 | } |
| 478 | return solution == null ? "Error 7" : solution; |
| 479 | } |
| 480 | |
| 481 | /** |
| 482 | * @return |