| 65 | } |
| 66 | |
| 67 | private static boolean search(int cp, int ep1, int ep2, int ep3, int eo, int d, int l) { |
| 68 | if (d == 0) return cp == 0 && ep1 == 0 && ep2 == 0 && ep3 == 0 && eo == 0; |
| 69 | if (Math.max(Math.max(pd[0][24 * cp + ep1], pd[1][24 * cp + ep2]), pd[2][24 * cp + ep3]) > d) return false; |
| 70 | for (int n = 0; n < 3; n++) |
| 71 | if (n != l) { |
| 72 | int cn = cp, e1n = ep1, e2n = ep2, e3n = ep3, en = eo; |
| 73 | for (int m = 0; m < 11; m++) { |
| 74 | cn = cpm[cn][n]; e1n = epm[e1n][n]; e2n = epm[e2n][(n + 1) % 3]; |
| 75 | e3n = epm[e3n][(n + 2) % 3]; en = eom[en][n]; |
| 76 | if (search(cn, e1n, e2n, e3n, en, d - 1, n)) { |
| 77 | seq[d] = n * 11 + m; |
| 78 | //sb.insert(0, turn[n] + suff[m] + " "); |
| 79 | return true; |
| 80 | } |
| 81 | } |
| 82 | } |
| 83 | return false; |
| 84 | } |
| 85 | |
| 86 | public static String scramble() { |
| 87 | Random r = new Random(); |