(int[] arr, int cntU, int parity)
| 157 | } |
| 158 | |
| 159 | private static int resolvePerm(int[] arr, int cntU, int parity) { |
| 160 | if (arr == STATE_SOLVED) { |
| 161 | return 0; |
| 162 | } else if (arr == STATE_RANDOM) { |
| 163 | return parity == -1 ? gen.nextInt(2) : parity; |
| 164 | } |
| 165 | byte[] val = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; |
| 166 | for (int i = 0; i < arr.length; i++) { |
| 167 | if (arr[i] != -1) { |
| 168 | val[arr[i]] = -1; |
| 169 | } |
| 170 | } |
| 171 | int idx = 0; |
| 172 | for (int i = 0; i < arr.length; i++) { |
| 173 | if (val[i] != -1) { |
| 174 | int j = gen.nextInt(idx + 1); |
| 175 | byte temp = val[i]; |
| 176 | val[idx++] = val[j]; |
| 177 | val[j] = temp; |
| 178 | } |
| 179 | } |
| 180 | int last = -1; |
| 181 | for (idx = 0; idx < arr.length && cntU > 0; idx++) { |
| 182 | if (arr[idx] == -1) { |
| 183 | if (cntU == 2) { |
| 184 | last = idx; |
| 185 | } |
| 186 | arr[idx] = val[--cntU]; |
| 187 | } |
| 188 | } |
| 189 | int p = Util.getNParity(Util.getNPerm(arr, arr.length), arr.length); |
| 190 | if (p == 1 - parity && last != -1) { |
| 191 | int temp = arr[idx - 1]; |
| 192 | arr[idx - 1] = arr[last]; |
| 193 | arr[last] = temp; |
| 194 | } |
| 195 | return p; |
| 196 | } |
| 197 | |
| 198 | public static final int[] STATE_RANDOM = null; |
| 199 | public static final int[] STATE_SOLVED = new int[0]; |
no test coverage detected