| 71 | } |
| 72 | |
| 73 | private static int getmv(int c, int p, int o, int f) { |
| 74 | int[] n = new int[6], s = new int[2]; |
| 75 | int q, t; |
| 76 | Utils.idxToPerm(s, p, 2, false); |
| 77 | idxToComb(n, s, c, o); |
| 78 | switch (f) { |
| 79 | case 0: //L |
| 80 | Utils.circle(n, 1, 5, 2); |
| 81 | n[2] ^= 1; n[5] ^= 1; |
| 82 | break; |
| 83 | case 1: //R |
| 84 | Utils.circle(n, 0, 2, 4); |
| 85 | n[0] ^= 1; n[2] ^= 1; |
| 86 | break; |
| 87 | case 2: //B |
| 88 | Utils.circle(n, 3, 4, 5); |
| 89 | n[3] ^= 1; n[4] ^= 1; |
| 90 | break; |
| 91 | case 3: //U |
| 92 | Utils.circle(n, 0, 3, 1); |
| 93 | n[1] ^= 1; n[3] ^= 1; |
| 94 | break; |
| 95 | } |
| 96 | c = o = 0; |
| 97 | q = 2; |
| 98 | for (t = 0; t < 6; t++) |
| 99 | if (n[t] >= 0) { |
| 100 | c += Utils.Cnk[5 - t][q--]; |
| 101 | s[q] = n[t] >> 1; |
| 102 | o |= (n[t] & 1) << 1 - q; |
| 103 | } |
| 104 | int i = Utils.permToIdx(s, 2, false); |
| 105 | return 2 * c + i << 2 | o; |
| 106 | } |
| 107 | |
| 108 | private static void idxToComb(int[] n, int[] s, int c, int o) { |
| 109 | int q = 2; |