MCPcopy Create free account
hub / github.com/MeigenChou/DCTimer-Android / resolvePerm

Method resolvePerm

app/src/main/java/cs/min2phase/Tools.java:159–196  ·  view source on GitHub ↗
(int[] arr, int cntU, int parity)

Source from the content-addressed store, hash-verified

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];

Callers 1

randomStateMethod · 0.95

Calls 2

getNParityMethod · 0.95
getNPermMethod · 0.95

Tested by

no test coverage detected