cubing 0.29.1 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -6
- package/dist/esm/.DS_Store +0 -0
- package/dist/esm/alg/index.js +1 -2
- package/dist/esm/bluetooth/index.js +36 -32
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/{chunk-XRZBPKES.js → chunk-35OK6TQ4.js} +328 -66
- package/dist/esm/chunk-35OK6TQ4.js.map +7 -0
- package/dist/esm/{chunk-WYKXX2XY.js → chunk-4QZRHN6S.js} +10 -8
- package/dist/esm/{chunk-WYKXX2XY.js.map → chunk-4QZRHN6S.js.map} +2 -2
- package/dist/esm/{chunk-2JDBIQSV.js → chunk-5OQ34D3X.js} +7 -7
- package/dist/esm/{chunk-2JDBIQSV.js.map → chunk-5OQ34D3X.js.map} +2 -2
- package/dist/esm/{chunk-U2ONHTIX.js → chunk-6FB2XWAK.js} +33 -31
- package/dist/esm/chunk-6FB2XWAK.js.map +7 -0
- package/dist/esm/{chunk-ZNAYJGVL.js → chunk-C6KMV2PL.js} +2 -2
- package/dist/esm/{chunk-ZNAYJGVL.js.map → chunk-C6KMV2PL.js.map} +0 -0
- package/dist/esm/{chunk-XU5ILFX5.js → chunk-GQBRF4EM.js} +6 -4
- package/dist/esm/{chunk-XU5ILFX5.js.map → chunk-GQBRF4EM.js.map} +2 -2
- package/dist/esm/{chunk-WXCNEGW3.js → chunk-HR5D6SD4.js} +2 -2
- package/dist/esm/{chunk-WXCNEGW3.js.map → chunk-HR5D6SD4.js.map} +2 -2
- package/dist/esm/{chunk-XT3R2ENM.js → chunk-KOAJIBEX.js} +47 -38
- package/dist/esm/chunk-KOAJIBEX.js.map +7 -0
- package/dist/esm/{chunk-OX6O2ZO5.js → chunk-QHWK5RXN.js} +1 -1
- package/dist/esm/chunk-QHWK5RXN.js.map +7 -0
- package/dist/esm/{chunk-GW4FGG42.js → chunk-RI2DAEY6.js} +2 -2
- package/dist/esm/{chunk-GW4FGG42.js.map → chunk-RI2DAEY6.js.map} +0 -0
- package/dist/esm/{chunk-AHEXXC6V.js → chunk-VIUWS2PX.js} +4 -4
- package/dist/esm/chunk-VIUWS2PX.js.map +7 -0
- package/dist/esm/{chunk-2IZUSAXQ.js → chunk-WEYPAZEE.js} +1 -1
- package/dist/esm/{chunk-2IZUSAXQ.js.map → chunk-WEYPAZEE.js.map} +1 -1
- package/dist/esm/{chunk-NI7U4XAZ.js → chunk-ZQT3QSWD.js} +226 -113
- package/dist/esm/chunk-ZQT3QSWD.js.map +7 -0
- package/dist/esm/kpuzzle/index.js +2 -3
- package/dist/esm/notation/index.js +2 -3
- package/dist/esm/protocol/index.js +4 -5
- package/dist/esm/puzzle-geometry/index.js +110 -85
- package/dist/esm/puzzle-geometry/index.js.map +2 -2
- package/dist/esm/puzzles/index.js +10 -7
- package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js → puzzles-dynamic-3x3x3-ZKMODX2P.js} +1 -3
- package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js.map → puzzles-dynamic-3x3x3-ZKMODX2P.js.map} +1 -1
- package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js → puzzles-dynamic-4x4x4-DT42HVIY.js} +1 -3
- package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js.map → puzzles-dynamic-4x4x4-DT42HVIY.js.map} +1 -1
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js → puzzles-dynamic-side-events-HMUBMHA5.js} +2 -4
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js.map → puzzles-dynamic-side-events-HMUBMHA5.js.map} +2 -2
- package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js → puzzles-dynamic-unofficial-QXSDLTK5.js} +1 -3
- package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js.map → puzzles-dynamic-unofficial-QXSDLTK5.js.map} +1 -1
- package/dist/esm/scramble/index.js +3 -4
- package/dist/esm/search/index.js +8 -9
- package/dist/esm/{search-dynamic-sgs-side-events-4H3X5HLH.js → search-dynamic-sgs-side-events-XNTCWRI4.js} +6 -7
- package/dist/esm/search-dynamic-sgs-side-events-XNTCWRI4.js.map +7 -0
- package/dist/esm/{search-dynamic-sgs-unofficial-7IRW4LVD.js → search-dynamic-sgs-unofficial-5KMZ747E.js} +122 -68
- package/dist/esm/search-dynamic-sgs-unofficial-5KMZ747E.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-3x3x3-7XZTYQMO.js → search-dynamic-solve-3x3x3-TSXPWENP.js} +649 -407
- package/dist/esm/search-dynamic-solve-3x3x3-TSXPWENP.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-4x4x4-7JTJCCSY.js → search-dynamic-solve-4x4x4-FKQ2JWK2.js} +399 -151
- package/dist/esm/search-dynamic-solve-4x4x4-FKQ2JWK2.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-fto-4LI23P6K.js → search-dynamic-solve-fto-GPLW7S5F.js} +74 -35
- package/dist/esm/search-dynamic-solve-fto-GPLW7S5F.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-kilominx-3HEVQ4MC.js → search-dynamic-solve-kilominx-HB2QFUGF.js} +136 -72
- package/dist/esm/search-dynamic-solve-kilominx-HB2QFUGF.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-master_tetraminx-UB32C7MM.js → search-dynamic-solve-master_tetraminx-LR3LJI7O.js} +84 -42
- package/dist/esm/search-dynamic-solve-master_tetraminx-LR3LJI7O.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-sq1-HA72TYF2.js → search-dynamic-solve-sq1-W33UXTDZ.js} +129 -55
- package/dist/esm/search-dynamic-solve-sq1-W33UXTDZ.js.map +7 -0
- package/dist/esm/search-worker-inside-generated-string-5HKZNHKK.js +3884 -0
- package/dist/esm/search-worker-inside-generated-string-5HKZNHKK.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-T6YIT7YD.js → search-worker-js-entry-PDXEE46R.js} +44 -36
- package/dist/esm/search-worker-js-entry-PDXEE46R.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-OUEC4L5I.js → search-worker-ts-entry-UV2RY2EY.js} +3 -4
- package/dist/esm/{search-worker-ts-entry-OUEC4L5I.js.map → search-worker-ts-entry-UV2RY2EY.js.map} +1 -1
- package/dist/esm/stream/index.js +1 -2
- package/dist/esm/stream/index.js.map +2 -2
- package/dist/esm/twisty/index.js +368 -300
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{twisty-dynamic-3d-AZUSXQ5S.js → twisty-dynamic-3d-GPF6TW32.js} +57 -60
- package/dist/esm/twisty-dynamic-3d-GPF6TW32.js.map +7 -0
- package/dist/types/{Alg-137fb0d5.d.ts → Alg-1c8c3757.d.ts} +25 -26
- package/dist/types/{KState-a73111d7.d.ts → KState-7c9e40f4.d.ts} +1 -1
- package/dist/types/{TwizzleLink-bef52ecd.d.ts → TwizzleLink-3f8a01d2.d.ts} +19 -18
- package/dist/types/alg/index.d.ts +30 -8
- package/dist/types/bluetooth/index.d.ts +4 -4
- package/dist/types/{bluetooth-puzzle-8a678993.d.ts → bluetooth-puzzle-a64e9756.d.ts} +2 -2
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +1 -1
- package/dist/types/{outside-e55f28a0.d.ts → outside-b62aa614.d.ts} +2 -2
- package/dist/types/{parseAlg-a28f7568.d.ts → parseAlg-d5fbee87.d.ts} +1 -1
- package/dist/types/protocol/index.d.ts +2 -2
- package/dist/types/puzzle-geometry/index.d.ts +3 -3
- package/dist/types/puzzles/index.d.ts +8 -6
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +3 -3
- package/dist/types/twisty/index.d.ts +5 -5
- package/package.json +51 -147
- package/dist/esm/chunk-AHEXXC6V.js.map +0 -7
- package/dist/esm/chunk-NI7U4XAZ.js.map +0 -7
- package/dist/esm/chunk-OX6O2ZO5.js.map +0 -7
- package/dist/esm/chunk-SBZRVSPK.js +0 -30
- package/dist/esm/chunk-SBZRVSPK.js.map +0 -7
- package/dist/esm/chunk-U2ONHTIX.js.map +0 -7
- package/dist/esm/chunk-XRZBPKES.js.map +0 -7
- package/dist/esm/chunk-XT3R2ENM.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-side-events-4H3X5HLH.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-unofficial-7IRW4LVD.js.map +0 -7
- package/dist/esm/search-dynamic-solve-3x3x3-7XZTYQMO.js.map +0 -7
- package/dist/esm/search-dynamic-solve-4x4x4-7JTJCCSY.js.map +0 -7
- package/dist/esm/search-dynamic-solve-fto-4LI23P6K.js.map +0 -7
- package/dist/esm/search-dynamic-solve-kilominx-3HEVQ4MC.js.map +0 -7
- package/dist/esm/search-dynamic-solve-master_tetraminx-UB32C7MM.js.map +0 -7
- package/dist/esm/search-dynamic-solve-sq1-HA72TYF2.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-ZEY77HTF.js +0 -3886
- package/dist/esm/search-worker-inside-generated-string-ZEY77HTF.js.map +0 -7
- package/dist/esm/search-worker-js-entry-T6YIT7YD.js.map +0 -7
- package/dist/esm/twisty-dynamic-3d-AZUSXQ5S.js.map +0 -7
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import {
|
|
2
2
|
randomUIntBelowFactory
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HR5D6SD4.js";
|
|
4
4
|
import {
|
|
5
5
|
Alg
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-SBZRVSPK.js";
|
|
6
|
+
} from "./chunk-ZQT3QSWD.js";
|
|
8
7
|
|
|
9
8
|
// src/cubing/vendor/xyzzy/kilosolver.js
|
|
10
9
|
var PHASE4_THRESHOLD = 7;
|
|
11
10
|
function factorial(n) {
|
|
12
|
-
if (n < 2)
|
|
11
|
+
if (n < 2) {
|
|
13
12
|
return n;
|
|
13
|
+
}
|
|
14
14
|
let f = 1;
|
|
15
|
-
for (let i = 2; i <= n; i++)
|
|
15
|
+
for (let i = 2; i <= n; i++) {
|
|
16
16
|
f *= i;
|
|
17
|
+
}
|
|
17
18
|
return f;
|
|
18
19
|
}
|
|
19
20
|
function C(n, k) {
|
|
20
|
-
if (k < 0 || k > n)
|
|
21
|
+
if (k < 0 || k > n) {
|
|
21
22
|
return 0;
|
|
22
|
-
|
|
23
|
+
}
|
|
24
|
+
if (k === 0 || k === n) {
|
|
23
25
|
return 1;
|
|
26
|
+
}
|
|
24
27
|
let c = 1;
|
|
25
28
|
for (let i = 0; i < k; i++) {
|
|
26
29
|
c = c * (n - i) / (i + 1) | 0;
|
|
@@ -49,8 +52,9 @@ function permutation_parity(A) {
|
|
|
49
52
|
let parity = 0;
|
|
50
53
|
for (let i = 0; i < n - 1; i++) {
|
|
51
54
|
for (let j = i; j < n; j++) {
|
|
52
|
-
if (A[i] > A[j])
|
|
55
|
+
if (A[i] > A[j]) {
|
|
53
56
|
parity ^= 1;
|
|
57
|
+
}
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
return parity;
|
|
@@ -105,11 +109,13 @@ var [evenpermutation10_to_index, index_to_evenpermutation10] = (() => {
|
|
|
105
109
|
function comb_to_index(l) {
|
|
106
110
|
let bits = l.length;
|
|
107
111
|
let ones = 0;
|
|
108
|
-
for (let i = 0; i < bits; i++)
|
|
112
|
+
for (let i = 0; i < bits; i++) {
|
|
109
113
|
ones += +(l[i] === 1);
|
|
114
|
+
}
|
|
110
115
|
let zeros = bits - ones;
|
|
111
|
-
if (zeros === 0 || ones === 0 || bits === 1)
|
|
116
|
+
if (zeros === 0 || ones === 0 || bits === 1) {
|
|
112
117
|
return 0;
|
|
118
|
+
}
|
|
113
119
|
let b = C(bits - 1, ones);
|
|
114
120
|
let ind = 0;
|
|
115
121
|
for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {
|
|
@@ -144,8 +150,9 @@ function index_to_comb(ind, ones, bits) {
|
|
|
144
150
|
}
|
|
145
151
|
function compose(A, B) {
|
|
146
152
|
let C2 = [];
|
|
147
|
-
for (let i = 0; i < B.length; i++)
|
|
153
|
+
for (let i = 0; i < B.length; i++) {
|
|
148
154
|
C2[i] = A[B[i]];
|
|
155
|
+
}
|
|
149
156
|
return C2;
|
|
150
157
|
}
|
|
151
158
|
function compose_o(A, B) {
|
|
@@ -159,8 +166,9 @@ function compose_o(A, B) {
|
|
|
159
166
|
}
|
|
160
167
|
function permutation_from_cycle(cycle, n) {
|
|
161
168
|
let perm = [];
|
|
162
|
-
for (let i = 0; i < n; i++)
|
|
169
|
+
for (let i = 0; i < n; i++) {
|
|
163
170
|
perm[i] = i;
|
|
171
|
+
}
|
|
164
172
|
for (let i = 0; i < cycle.length; i++) {
|
|
165
173
|
perm[cycle[i]] = cycle[(i + 1) % cycle.length];
|
|
166
174
|
}
|
|
@@ -168,8 +176,9 @@ function permutation_from_cycle(cycle, n) {
|
|
|
168
176
|
}
|
|
169
177
|
function unsparsify_list(d, n) {
|
|
170
178
|
let l = Array(n).fill(0);
|
|
171
|
-
for (let k in d)
|
|
179
|
+
for (let k in d) {
|
|
172
180
|
l[k] = d[k];
|
|
181
|
+
}
|
|
173
182
|
return l;
|
|
174
183
|
}
|
|
175
184
|
var move_U = [
|
|
@@ -210,8 +219,9 @@ var id = compose_o(move_x2, move_x2);
|
|
|
210
219
|
var moves_full = [];
|
|
211
220
|
for (let i = 0; i < moves.length; i++) {
|
|
212
221
|
moves_full[i] = [id];
|
|
213
|
-
for (let j = 1; j < 5; j++)
|
|
222
|
+
for (let j = 1; j < 5; j++) {
|
|
214
223
|
moves_full[i][j] = compose_o(moves_full[i][j - 1], moves[i]);
|
|
224
|
+
}
|
|
215
225
|
}
|
|
216
226
|
function random_state(randomUintBelow2) {
|
|
217
227
|
let p = [0];
|
|
@@ -220,8 +230,9 @@ function random_state(randomUintBelow2) {
|
|
|
220
230
|
p[i] = p[r];
|
|
221
231
|
p[r] = i;
|
|
222
232
|
}
|
|
223
|
-
if (permutation_parity(p) === 1)
|
|
233
|
+
if (permutation_parity(p) === 1) {
|
|
224
234
|
[p[0], p[1]] = [p[1], p[0]];
|
|
235
|
+
}
|
|
225
236
|
let o = Array(20).fill(0);
|
|
226
237
|
for (let i = 0; i < 19; i++) {
|
|
227
238
|
o[i] = randomUintBelow2(3);
|
|
@@ -237,8 +248,9 @@ function stringify_move_sequence(move_sequence) {
|
|
|
237
248
|
}
|
|
238
249
|
function apply_move_sequence(state, move_sequence) {
|
|
239
250
|
for (let [m, r] of move_sequence) {
|
|
240
|
-
for (let i = 0; i < r; i++)
|
|
251
|
+
for (let i = 0; i < r; i++) {
|
|
241
252
|
state = compose_o(state, moves[m]);
|
|
253
|
+
}
|
|
242
254
|
}
|
|
243
255
|
return state;
|
|
244
256
|
}
|
|
@@ -247,8 +259,10 @@ function generate_random_state_scramble(randomUintBelow2) {
|
|
|
247
259
|
}
|
|
248
260
|
var translation_amounts;
|
|
249
261
|
{
|
|
250
|
-
let A = Math.sin(Math.PI / 5)
|
|
251
|
-
let
|
|
262
|
+
let A = Math.sin(Math.PI / 5);
|
|
263
|
+
let B = Math.cos(Math.PI / 10);
|
|
264
|
+
let C2 = Math.cos(Math.PI / 5);
|
|
265
|
+
let D = Math.sin(Math.PI / 10);
|
|
252
266
|
translation_amounts = {
|
|
253
267
|
U: [0, 0],
|
|
254
268
|
L: [-A - B, C2 - D],
|
|
@@ -266,12 +280,15 @@ var translation_amounts;
|
|
|
266
280
|
}
|
|
267
281
|
function solve_phase1(state) {
|
|
268
282
|
let p = state[0];
|
|
269
|
-
if (p.slice(15, 20).every((x) => x < 15))
|
|
283
|
+
if (p.slice(15, 20).every((x) => x < 15)) {
|
|
270
284
|
return [];
|
|
271
|
-
|
|
285
|
+
}
|
|
286
|
+
if (p.slice(0, 5).every((x) => x < 15)) {
|
|
272
287
|
return [[6, 1]];
|
|
288
|
+
}
|
|
273
289
|
let flags = p.map((x) => x >= 15);
|
|
274
|
-
let depth = 0
|
|
290
|
+
let depth = 0;
|
|
291
|
+
let sol;
|
|
275
292
|
while (sol === void 0) {
|
|
276
293
|
depth++;
|
|
277
294
|
sol = search_phase1(flags, depth, -1);
|
|
@@ -280,30 +297,35 @@ function solve_phase1(state) {
|
|
|
280
297
|
return sol;
|
|
281
298
|
}
|
|
282
299
|
function search_phase1(flags, depth, last) {
|
|
283
|
-
if (depth
|
|
284
|
-
if (flags.slice(0, 5).some((x) => x))
|
|
300
|
+
if (depth === 0) {
|
|
301
|
+
if (flags.slice(0, 5).some((x) => x)) {
|
|
285
302
|
return;
|
|
303
|
+
}
|
|
286
304
|
return [];
|
|
287
305
|
}
|
|
288
306
|
for (let move_index = 0; move_index < 6; move_index++) {
|
|
289
|
-
if (move_index === last)
|
|
307
|
+
if (move_index === last) {
|
|
290
308
|
continue;
|
|
309
|
+
}
|
|
291
310
|
for (let r = 1; r < 5; r++) {
|
|
292
311
|
let new_flags = compose(flags, moves_full[move_index][r][0]);
|
|
293
312
|
let sol = search_phase1(new_flags, depth - 1, move_index);
|
|
294
|
-
if (sol !== void 0)
|
|
313
|
+
if (sol !== void 0) {
|
|
295
314
|
return [[move_index, r]].concat(sol);
|
|
315
|
+
}
|
|
296
316
|
}
|
|
297
317
|
}
|
|
298
318
|
return;
|
|
299
319
|
}
|
|
300
320
|
function index_phase2(state) {
|
|
301
|
-
let p = state[0].slice(0, 15)
|
|
321
|
+
let p = state[0].slice(0, 15);
|
|
322
|
+
let o = state[1];
|
|
302
323
|
let index_c = comb_to_index(p.map((x) => +(x >= 15)));
|
|
303
324
|
let index_o = 243 * index_c;
|
|
304
325
|
for (let i = 0, j = 0; i < 15; i++) {
|
|
305
|
-
if (p[i] < 15)
|
|
326
|
+
if (p[i] < 15) {
|
|
306
327
|
continue;
|
|
328
|
+
}
|
|
307
329
|
index_o += o[i] * Math.pow(3, j);
|
|
308
330
|
j++;
|
|
309
331
|
}
|
|
@@ -326,12 +348,14 @@ function solve_phase2(state) {
|
|
|
326
348
|
}
|
|
327
349
|
function index_phase3(state) {
|
|
328
350
|
let pieces = [5, 6, 7, 8, 14];
|
|
329
|
-
let p = state[0].slice(0, 15)
|
|
351
|
+
let p = state[0].slice(0, 15);
|
|
352
|
+
let o = state[1];
|
|
330
353
|
let index_c = comb_to_index(p.map((x) => +(pieces.indexOf(x) !== -1)));
|
|
331
354
|
let index_o = 243 * index_c;
|
|
332
355
|
for (let i = 0, j = 0; i < 15; i++) {
|
|
333
|
-
if (pieces.indexOf(p[i]) === -1)
|
|
356
|
+
if (pieces.indexOf(p[i]) === -1) {
|
|
334
357
|
continue;
|
|
358
|
+
}
|
|
335
359
|
index_o += o[i] * Math.pow(3, j);
|
|
336
360
|
j++;
|
|
337
361
|
}
|
|
@@ -353,12 +377,15 @@ function solve_phase3(state) {
|
|
|
353
377
|
return ida_solve(index_phase3(state), mtables, ptables);
|
|
354
378
|
}
|
|
355
379
|
function index_phase4(state) {
|
|
356
|
-
let p = state[0].slice(0, 14)
|
|
357
|
-
let
|
|
380
|
+
let p = state[0].slice(0, 14);
|
|
381
|
+
let o = state[1];
|
|
382
|
+
let index_o = 0;
|
|
383
|
+
let perm = [];
|
|
358
384
|
let j = 0;
|
|
359
385
|
for (let i of [0, 1, 2, 3, 4, 9, 10, 11, 12, 13]) {
|
|
360
|
-
if (i !== 13)
|
|
386
|
+
if (i !== 13) {
|
|
361
387
|
index_o += o[i] * Math.pow(3, j);
|
|
388
|
+
}
|
|
362
389
|
perm[j] = p[i] < 5 ? p[i] : p[i] - 4;
|
|
363
390
|
j++;
|
|
364
391
|
}
|
|
@@ -383,9 +410,11 @@ function solve(state) {
|
|
|
383
410
|
}
|
|
384
411
|
var tables = {};
|
|
385
412
|
function generate_phase23_orientation_mtable() {
|
|
386
|
-
if (tables.phase23om)
|
|
413
|
+
if (tables.phase23om) {
|
|
387
414
|
return tables.phase23om;
|
|
388
|
-
|
|
415
|
+
}
|
|
416
|
+
const C15_5 = C(15, 5);
|
|
417
|
+
const THREE = [1, 3, 9, 27, 81, 243];
|
|
389
418
|
let phase23om = Array(C(15, 5) * THREE[5]);
|
|
390
419
|
tables.phase23om = phase23om;
|
|
391
420
|
for (let i = 0; i < C15_5; i++) {
|
|
@@ -402,8 +431,9 @@ function generate_phase23_orientation_mtable() {
|
|
|
402
431
|
if (comb[k] === 1) {
|
|
403
432
|
orient_full[k] = (j / THREE[l] | 0) % 3;
|
|
404
433
|
l++;
|
|
405
|
-
} else
|
|
434
|
+
} else {
|
|
406
435
|
orient_full[k] = 99;
|
|
436
|
+
}
|
|
407
437
|
}
|
|
408
438
|
for (let move_index = 0; move_index < 6; move_index++) {
|
|
409
439
|
let move = moves[move_index];
|
|
@@ -423,20 +453,23 @@ function generate_phase23_orientation_mtable() {
|
|
|
423
453
|
return phase23om;
|
|
424
454
|
}
|
|
425
455
|
function generate_phase2_orientation_ptable() {
|
|
426
|
-
if (tables.phase2op)
|
|
456
|
+
if (tables.phase2op) {
|
|
427
457
|
return tables.phase2op;
|
|
458
|
+
}
|
|
428
459
|
let mtable = generate_phase23_orientation_mtable();
|
|
429
460
|
return tables.phase2op = bfs(mtable, [243 * 3002]);
|
|
430
461
|
}
|
|
431
462
|
function generate_phase3_orientation_ptable() {
|
|
432
|
-
if (tables.phase3op)
|
|
463
|
+
if (tables.phase3op) {
|
|
433
464
|
return tables.phase3op;
|
|
465
|
+
}
|
|
434
466
|
let mtable = generate_phase23_orientation_mtable();
|
|
435
467
|
return tables.phase3op = bfs(mtable, [243 * 246]);
|
|
436
468
|
}
|
|
437
469
|
function generate_phase23_permutation_mtable() {
|
|
438
|
-
if (tables.phase23pm)
|
|
470
|
+
if (tables.phase23pm) {
|
|
439
471
|
return tables.phase23pm;
|
|
472
|
+
}
|
|
440
473
|
const FIFTEEN = [
|
|
441
474
|
1,
|
|
442
475
|
15,
|
|
@@ -474,20 +507,23 @@ function generate_phase23_permutation_mtable() {
|
|
|
474
507
|
return tables.phase23pm = phase23pm;
|
|
475
508
|
}
|
|
476
509
|
function generate_phase2_permutation_ptable() {
|
|
477
|
-
if (tables.phase2pp)
|
|
510
|
+
if (tables.phase2pp) {
|
|
478
511
|
return tables.phase2pp;
|
|
512
|
+
}
|
|
479
513
|
let mtable = generate_phase23_permutation_mtable();
|
|
480
514
|
return tables.phase2pp = bfs(mtable, [213090]);
|
|
481
515
|
}
|
|
482
516
|
function generate_phase3_permutation_ptable() {
|
|
483
|
-
if (tables.phase3pp)
|
|
517
|
+
if (tables.phase3pp) {
|
|
484
518
|
return tables.phase3pp;
|
|
519
|
+
}
|
|
485
520
|
let mtable = generate_phase23_permutation_mtable();
|
|
486
521
|
return tables.phase3pp = bfs(mtable, [737420]);
|
|
487
522
|
}
|
|
488
523
|
function generate_phase4_orientation_mtable() {
|
|
489
|
-
if (tables.phase4om)
|
|
524
|
+
if (tables.phase4om) {
|
|
490
525
|
return tables.phase4om;
|
|
526
|
+
}
|
|
491
527
|
const THREE = [1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049];
|
|
492
528
|
let mtable = Array(THREE[9]);
|
|
493
529
|
for (let i = 0; i < THREE[9]; i++) {
|
|
@@ -505,17 +541,20 @@ function generate_phase4_orientation_mtable() {
|
|
|
505
541
|
(i2) => o[move[0][i2]] + move[1][i2]
|
|
506
542
|
);
|
|
507
543
|
let new_i = 0;
|
|
508
|
-
for (let j = 0; j < 9; j++)
|
|
544
|
+
for (let j = 0; j < 9; j++) {
|
|
509
545
|
new_i += new_o[j] % 3 * THREE[j];
|
|
546
|
+
}
|
|
510
547
|
mtable[i][move_index] = new_i;
|
|
511
548
|
}
|
|
512
549
|
}
|
|
513
550
|
return tables.phase4om = mtable;
|
|
514
551
|
}
|
|
515
552
|
function generate_phase4_permutation_mtable() {
|
|
516
|
-
if (tables.phase4pm)
|
|
553
|
+
if (tables.phase4pm) {
|
|
517
554
|
return tables.phase4pm;
|
|
518
|
-
|
|
555
|
+
}
|
|
556
|
+
const HALFFACT10 = factorial(10) / 2;
|
|
557
|
+
const n = 10;
|
|
519
558
|
let pre = [0, 1, 2, 3, 4, -1, -1, -1, -1, 5, 6, 7, 8, 9];
|
|
520
559
|
let post = [0, 1, 2, 3, 4, 9, 10, 11, 12, 13];
|
|
521
560
|
let move_permutations = [
|
|
@@ -536,20 +575,23 @@ function generate_phase4_permutation_mtable() {
|
|
|
536
575
|
return tables.phase4pm = mtable;
|
|
537
576
|
}
|
|
538
577
|
function generate_phase4_orientation_ptable() {
|
|
539
|
-
if (tables.phase4op)
|
|
578
|
+
if (tables.phase4op) {
|
|
540
579
|
return tables.phase4op;
|
|
580
|
+
}
|
|
541
581
|
let mtable = generate_phase4_orientation_mtable();
|
|
542
582
|
return tables.phase4op = bfs(mtable, [0]);
|
|
543
583
|
}
|
|
544
584
|
function generate_phase4_permutation_ptable() {
|
|
545
|
-
if (tables.phase4pp)
|
|
585
|
+
if (tables.phase4pp) {
|
|
546
586
|
return tables.phase4pp;
|
|
587
|
+
}
|
|
547
588
|
let mtable = generate_phase4_permutation_mtable();
|
|
548
589
|
return tables.phase4pp = bfs(mtable, [0]);
|
|
549
590
|
}
|
|
550
591
|
function generate_phase4_near_ptable_list(threshold) {
|
|
551
|
-
if (tables.phase4np_list && tables.phase4np_list.threshold === threshold)
|
|
592
|
+
if (tables.phase4np_list && tables.phase4np_list.threshold === threshold) {
|
|
552
593
|
return tables.phase4np_list;
|
|
594
|
+
}
|
|
553
595
|
let mtables = [
|
|
554
596
|
generate_phase4_orientation_mtable(),
|
|
555
597
|
generate_phase4_permutation_mtable()
|
|
@@ -559,12 +601,14 @@ function generate_phase4_near_ptable_list(threshold) {
|
|
|
559
601
|
populate(threshold, [0, 0], -1);
|
|
560
602
|
function populate(depth, state, last2) {
|
|
561
603
|
states.push(state[0] + base * state[1]);
|
|
562
|
-
if (depth === 0)
|
|
604
|
+
if (depth === 0) {
|
|
563
605
|
return;
|
|
606
|
+
}
|
|
564
607
|
let new_state = [];
|
|
565
608
|
for (let move_index = 0; move_index < 3; move_index++) {
|
|
566
|
-
if (move_index === last2)
|
|
609
|
+
if (move_index === last2) {
|
|
567
610
|
continue;
|
|
611
|
+
}
|
|
568
612
|
new_state[0] = state[0];
|
|
569
613
|
new_state[1] = state[1];
|
|
570
614
|
for (let r = 1; r < 5; r++) {
|
|
@@ -576,21 +620,26 @@ function generate_phase4_near_ptable_list(threshold) {
|
|
|
576
620
|
return;
|
|
577
621
|
}
|
|
578
622
|
states.sort((x, y) => x - y);
|
|
579
|
-
let unique_states = []
|
|
580
|
-
|
|
581
|
-
|
|
623
|
+
let unique_states = [];
|
|
624
|
+
let last = -1;
|
|
625
|
+
for (let state of states) {
|
|
626
|
+
if (state !== last) {
|
|
582
627
|
unique_states.push(last = state);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
583
630
|
unique_states.threshold = threshold;
|
|
584
631
|
return tables.phase4np_list = unique_states;
|
|
585
632
|
}
|
|
586
633
|
function binary_search(A, x) {
|
|
587
|
-
let lo = 0
|
|
634
|
+
let lo = 0;
|
|
635
|
+
let hi = A.length - 1;
|
|
588
636
|
while (hi - lo > 1) {
|
|
589
637
|
let mid = lo + hi >> 1;
|
|
590
|
-
if (x > A[mid])
|
|
638
|
+
if (x > A[mid]) {
|
|
591
639
|
lo = mid + 1;
|
|
592
|
-
else
|
|
640
|
+
} else {
|
|
593
641
|
hi = mid;
|
|
642
|
+
}
|
|
594
643
|
}
|
|
595
644
|
return x === A[lo] || x === A[hi];
|
|
596
645
|
}
|
|
@@ -627,12 +676,14 @@ function bfs(mtable, goal_states) {
|
|
|
627
676
|
function ida_solve(indices, mtables, ptables) {
|
|
628
677
|
let ncoords = indices.length;
|
|
629
678
|
let bound = 0;
|
|
630
|
-
for (let i = 0; i < ncoords; i++)
|
|
679
|
+
for (let i = 0; i < ncoords; i++) {
|
|
631
680
|
bound = Math.max(bound, ptables[i][indices[i]]);
|
|
681
|
+
}
|
|
632
682
|
while (true) {
|
|
633
683
|
let path = ida_search(indices, mtables, ptables, bound, -1);
|
|
634
|
-
if (path !== void 0)
|
|
684
|
+
if (path !== void 0) {
|
|
635
685
|
return path;
|
|
686
|
+
}
|
|
636
687
|
bound++;
|
|
637
688
|
}
|
|
638
689
|
}
|
|
@@ -640,23 +691,29 @@ function ida_search(indices, mtables, ptables, bound, last) {
|
|
|
640
691
|
let ncoords = indices.length;
|
|
641
692
|
let nmoves = mtables[0][0].length;
|
|
642
693
|
let heuristic = 0;
|
|
643
|
-
for (let i = 0; i < ncoords; i++)
|
|
694
|
+
for (let i = 0; i < ncoords; i++) {
|
|
644
695
|
heuristic = Math.max(heuristic, ptables[i][indices[i]]);
|
|
645
|
-
|
|
696
|
+
}
|
|
697
|
+
if (heuristic > bound) {
|
|
646
698
|
return;
|
|
647
|
-
|
|
699
|
+
}
|
|
700
|
+
if (bound === 0 || heuristic === 0) {
|
|
648
701
|
return [];
|
|
702
|
+
}
|
|
649
703
|
for (let m = 0; m < nmoves; m++) {
|
|
650
|
-
if (m === last)
|
|
704
|
+
if (m === last) {
|
|
651
705
|
continue;
|
|
706
|
+
}
|
|
652
707
|
let new_indices = indices.slice();
|
|
653
|
-
for (let c = 0; c < ncoords; c++)
|
|
708
|
+
for (let c = 0; c < ncoords; c++) {
|
|
654
709
|
new_indices[c] = mtables[c][indices[c]][m];
|
|
710
|
+
}
|
|
655
711
|
let r = 1;
|
|
656
|
-
while (indices.some((_, i) => indices[i]
|
|
712
|
+
while (indices.some((_, i) => indices[i] !== new_indices[i])) {
|
|
657
713
|
let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);
|
|
658
|
-
if (subpath !== void 0)
|
|
714
|
+
if (subpath !== void 0) {
|
|
659
715
|
return [[m, r]].concat(subpath);
|
|
716
|
+
}
|
|
660
717
|
for (let c = 0; c < ncoords; c++) {
|
|
661
718
|
new_indices[c] = mtables[c][new_indices[c]][m];
|
|
662
719
|
}
|
|
@@ -683,24 +740,30 @@ function phase4_ida_solve(indices) {
|
|
|
683
740
|
ptable_p,
|
|
684
741
|
ptable_n
|
|
685
742
|
);
|
|
686
|
-
if (path !== void 0)
|
|
743
|
+
if (path !== void 0) {
|
|
687
744
|
return path;
|
|
745
|
+
}
|
|
688
746
|
bound++;
|
|
689
747
|
}
|
|
690
748
|
}
|
|
691
749
|
function phase4_ida_search(indices, bound, last, mtable_o, mtable_p, ptable_o, ptable_p, ptable_n) {
|
|
692
750
|
let heuristic = Math.max(ptable_o[indices[0]], ptable_p[indices[1]]);
|
|
693
|
-
if (heuristic > bound)
|
|
751
|
+
if (heuristic > bound) {
|
|
694
752
|
return;
|
|
695
|
-
|
|
753
|
+
}
|
|
754
|
+
if (heuristic <= PHASE4_THRESHOLD && !binary_search(ptable_n, indices[0] + 19683 * indices[1])) {
|
|
696
755
|
heuristic = PHASE4_THRESHOLD + 1;
|
|
697
|
-
|
|
756
|
+
}
|
|
757
|
+
if (heuristic > bound) {
|
|
698
758
|
return;
|
|
699
|
-
|
|
759
|
+
}
|
|
760
|
+
if (bound === 0 || heuristic === 0) {
|
|
700
761
|
return [];
|
|
762
|
+
}
|
|
701
763
|
for (let m = 0; m < 3; m++) {
|
|
702
|
-
if (m === last)
|
|
764
|
+
if (m === last) {
|
|
703
765
|
continue;
|
|
766
|
+
}
|
|
704
767
|
let new_indices = indices.slice();
|
|
705
768
|
for (let r = 1; r < 5; r++) {
|
|
706
769
|
new_indices[0] = mtable_o[new_indices[0]][m];
|
|
@@ -715,8 +778,9 @@ function phase4_ida_search(indices, bound, last, mtable_o, mtable_p, ptable_o, p
|
|
|
715
778
|
ptable_p,
|
|
716
779
|
ptable_n
|
|
717
780
|
);
|
|
718
|
-
if (subpath !== void 0)
|
|
781
|
+
if (subpath !== void 0) {
|
|
719
782
|
return [[m, r]].concat(subpath);
|
|
783
|
+
}
|
|
720
784
|
}
|
|
721
785
|
}
|
|
722
786
|
return;
|
|
@@ -733,4 +797,4 @@ getRandomKilominxScramble().then((alg) => alg.log());
|
|
|
733
797
|
export {
|
|
734
798
|
getRandomKilominxScramble
|
|
735
799
|
};
|
|
736
|
-
//# sourceMappingURL=search-dynamic-solve-kilominx-
|
|
800
|
+
//# sourceMappingURL=search-dynamic-solve-kilominx-HB2QFUGF.js.map
|