cubing 0.28.1 → 0.28.2
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/dist/esm/.DS_Store +0 -0
- package/dist/esm/alg/index.js +2 -2
- package/dist/esm/bluetooth/index.js +219 -83
- package/dist/esm/bluetooth/index.js.map +3 -3
- package/dist/esm/{chunk-F4WWCPVE.js → chunk-2IZUSAXQ.js} +2 -2
- package/dist/esm/{chunk-F4WWCPVE.js.map → chunk-2IZUSAXQ.js.map} +1 -1
- package/dist/esm/{chunk-ZY3RTFFS.js → chunk-5744RHHG.js} +143 -56
- package/dist/esm/{chunk-ZY3RTFFS.js.map → chunk-5744RHHG.js.map} +2 -2
- package/dist/esm/{chunk-WAL36PO3.js → chunk-76H7SSCY.js} +28 -12
- package/dist/esm/{chunk-WAL36PO3.js.map → chunk-76H7SSCY.js.map} +1 -1
- package/dist/esm/{chunk-LSVR2HCG.js → chunk-76UZ2QTB.js} +389 -363
- package/dist/esm/{chunk-LSVR2HCG.js.map → chunk-76UZ2QTB.js.map} +1 -1
- package/dist/esm/{chunk-YSVFZVG4.js → chunk-D4YYXJDB.js} +175 -72
- package/dist/esm/{chunk-YSVFZVG4.js.map → chunk-D4YYXJDB.js.map} +3 -3
- package/dist/esm/{chunk-NPHUBFZ6.js → chunk-FEIKQ7FV.js} +2 -2
- package/dist/esm/{chunk-NPHUBFZ6.js.map → chunk-FEIKQ7FV.js.map} +1 -1
- package/dist/esm/{chunk-7D7LW3WQ.js → chunk-LOTZ7ZO7.js} +8 -4
- package/dist/esm/{chunk-7D7LW3WQ.js.map → chunk-LOTZ7ZO7.js.map} +1 -1
- package/dist/esm/{chunk-GVPTO3OF.js → chunk-OX6O2ZO5.js} +1 -1
- package/dist/esm/{chunk-GVPTO3OF.js.map → chunk-OX6O2ZO5.js.map} +1 -1
- package/dist/esm/{chunk-CSBUJ64Q.js → chunk-PCR6JT2W.js} +373 -238
- package/dist/esm/chunk-PCR6JT2W.js.map +7 -0
- package/dist/esm/{chunk-32FWPPTW.js → chunk-PTUPP5AW.js} +22 -8
- package/dist/esm/{chunk-32FWPPTW.js.map → chunk-PTUPP5AW.js.map} +1 -1
- package/dist/esm/{chunk-MWKALF6W.js → chunk-RTFKKZPH.js} +21 -12
- package/dist/esm/{chunk-MWKALF6W.js.map → chunk-RTFKKZPH.js.map} +2 -2
- package/dist/esm/{chunk-MGJA5U5O.js → chunk-SBZRVSPK.js} +1 -12
- package/dist/esm/{chunk-MGJA5U5O.js.map → chunk-SBZRVSPK.js.map} +0 -0
- package/dist/esm/{chunk-67VJZGH2.js → chunk-TX2AQ4XW.js} +35 -13
- package/dist/esm/{chunk-67VJZGH2.js.map → chunk-TX2AQ4XW.js.map} +2 -2
- package/dist/esm/{chunk-V55YSWJY.js → chunk-WXCNEGW3.js} +10 -4
- package/dist/esm/{chunk-V55YSWJY.js.map → chunk-WXCNEGW3.js.map} +1 -1
- package/dist/esm/{chunk-ALBEW4DJ.js → chunk-ZB3P5AZN.js} +1 -1
- package/dist/esm/{chunk-ALBEW4DJ.js.map → chunk-ZB3P5AZN.js.map} +1 -1
- package/dist/esm/kpuzzle/index.js +3 -3
- package/dist/esm/notation/index.js +3 -3
- package/dist/esm/protocol/index.js +5 -5
- package/dist/esm/puzzle-geometry/index.js +271 -71
- package/dist/esm/puzzle-geometry/index.js.map +2 -2
- package/dist/esm/puzzles/index.js +5 -5
- package/dist/esm/{puzzles-dynamic-3x3x3-NB2PEZTV.js → puzzles-dynamic-3x3x3-KIG5A6QR.js} +2 -2
- package/dist/esm/{puzzles-dynamic-3x3x3-NB2PEZTV.js.map → puzzles-dynamic-3x3x3-KIG5A6QR.js.map} +0 -0
- package/dist/esm/puzzles-dynamic-4x4x4-PEDAPUZK.js +126 -0
- package/dist/esm/puzzles-dynamic-4x4x4-PEDAPUZK.js.map +7 -0
- package/dist/esm/{puzzles-dynamic-side-events-WZI4Y3N6.js → puzzles-dynamic-side-events-5C7LMBWX.js} +2 -2
- package/dist/esm/{puzzles-dynamic-side-events-WZI4Y3N6.js.map → puzzles-dynamic-side-events-5C7LMBWX.js.map} +0 -0
- package/dist/esm/{puzzles-dynamic-unofficial-FUG3JBMH.js → puzzles-dynamic-unofficial-WWJ4NJMX.js} +2 -2
- package/dist/esm/{puzzles-dynamic-unofficial-FUG3JBMH.js.map → puzzles-dynamic-unofficial-WWJ4NJMX.js.map} +0 -0
- package/dist/esm/scramble/index.js +5 -5
- package/dist/esm/search/index.js +10 -10
- package/dist/esm/{search-dynamic-sgs-side-events-R3HDJ5XQ.js → search-dynamic-sgs-side-events-X62KI7ZV.js} +35 -17
- package/dist/esm/{search-dynamic-sgs-side-events-R3HDJ5XQ.js.map → search-dynamic-sgs-side-events-X62KI7ZV.js.map} +2 -2
- package/dist/esm/{search-dynamic-sgs-unofficial-FQNKGHVO.js → search-dynamic-sgs-unofficial-YAPJYTMF.js} +35 -14
- package/dist/esm/{search-dynamic-sgs-unofficial-FQNKGHVO.js.map → search-dynamic-sgs-unofficial-YAPJYTMF.js.map} +2 -2
- package/dist/esm/{search-dynamic-solve-3x3x3-K42IWMQV.js → search-dynamic-solve-3x3x3-7XZTYQMO.js} +795 -142
- package/dist/esm/{search-dynamic-solve-3x3x3-K42IWMQV.js.map → search-dynamic-solve-3x3x3-7XZTYQMO.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-4x4x4-XRV4NBMQ.js → search-dynamic-solve-4x4x4-5HST67LZ.js} +135 -29
- package/dist/esm/{search-dynamic-solve-4x4x4-XRV4NBMQ.js.map → search-dynamic-solve-4x4x4-5HST67LZ.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-fto-O6UXF7EC.js → search-dynamic-solve-fto-4LI23P6K.js} +253 -69
- package/dist/esm/{search-dynamic-solve-fto-O6UXF7EC.js.map → search-dynamic-solve-fto-4LI23P6K.js.map} +2 -2
- package/dist/esm/{search-dynamic-solve-kilominx-G4MLGWNS.js → search-dynamic-solve-kilominx-PIS3T2P4.js} +32 -8
- package/dist/esm/{search-dynamic-solve-kilominx-G4MLGWNS.js.map → search-dynamic-solve-kilominx-PIS3T2P4.js.map} +2 -2
- package/dist/esm/{search-dynamic-solve-master_tetraminx-3RKD3IAN.js → search-dynamic-solve-master_tetraminx-UB32C7MM.js} +111 -42
- package/dist/esm/{search-dynamic-solve-master_tetraminx-3RKD3IAN.js.map → search-dynamic-solve-master_tetraminx-UB32C7MM.js.map} +2 -2
- package/dist/esm/{search-dynamic-solve-sq1-WIJEGVLP.js → search-dynamic-solve-sq1-HA72TYF2.js} +54 -9
- package/dist/esm/{search-dynamic-solve-sq1-WIJEGVLP.js.map → search-dynamic-solve-sq1-HA72TYF2.js.map} +2 -2
- package/dist/esm/{search-worker-inside-generated-string-IZCKWXUA.js → search-worker-inside-generated-string-HMA547DJ.js} +146 -28
- package/dist/esm/search-worker-inside-generated-string-HMA547DJ.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-WBEKNBB7.js → search-worker-js-entry-3QMPUE4B.js} +147 -53
- package/dist/esm/{search-worker-js-entry-WBEKNBB7.js.map → search-worker-js-entry-3QMPUE4B.js.map} +2 -2
- package/dist/esm/{search-worker-ts-entry-XQWMEOC4.js → search-worker-ts-entry-3RHWJNVQ.js} +5 -5
- package/dist/esm/{search-worker-ts-entry-XQWMEOC4.js.map → search-worker-ts-entry-3RHWJNVQ.js.map} +1 -1
- package/dist/esm/stream/index.js +12 -8
- package/dist/esm/stream/index.js.map +1 -1
- package/dist/esm/twisty/index.js +1140 -746
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{twisty-dynamic-3d-QOX7IEXC.js → twisty-dynamic-3d-2KRJEHAN.js} +352 -175
- package/dist/esm/{twisty-dynamic-3d-QOX7IEXC.js.map → twisty-dynamic-3d-2KRJEHAN.js.map} +2 -2
- package/dist/types/{Alg-e2a80975.d.ts → Alg-137fb0d5.d.ts} +19 -16
- package/dist/types/{KState-a2f0e651.d.ts → KState-d5f04c9a.d.ts} +1 -1
- package/dist/types/{TwizzleLink-dcf51446.d.ts → TwizzleLink-43d94aca.d.ts} +46 -8
- package/dist/types/alg/index.d.ts +4 -4
- package/dist/types/bluetooth/index.d.ts +4 -4
- package/dist/types/{bluetooth-puzzle-3670a6a1.d.ts → bluetooth-puzzle-7e1a2576.d.ts} +9 -9
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +1 -1
- package/dist/types/{outside-0ce1b145.d.ts → outside-f83e819a.d.ts} +2 -2
- package/dist/types/{parseAlg-db0dec6c.d.ts → parseAlg-a28f7568.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 +5 -5
- 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 +5 -5
- package/dist/types/twisty/index.d.ts +5 -5
- package/package.json +7 -4
- package/dist/esm/chunk-CSBUJ64Q.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js.map +0 -7
package/dist/esm/{search-dynamic-solve-fto-O6UXF7EC.js → search-dynamic-solve-fto-4LI23P6K.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
randomUIntBelowFactory
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-WXCNEGW3.js";
|
|
4
|
+
import "./chunk-SBZRVSPK.js";
|
|
5
5
|
|
|
6
6
|
// src/cubing/vendor/xyzzy/fto-solver.js
|
|
7
7
|
function factorial(n) {
|
|
@@ -296,17 +296,20 @@ function permutation_order(perm) {
|
|
|
296
296
|
return order;
|
|
297
297
|
}
|
|
298
298
|
var solved_state = Array(72).fill().map((_, i) => i / 9 | 0);
|
|
299
|
-
var move_U = permutation_from_cycles(
|
|
300
|
-
[
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
299
|
+
var move_U = permutation_from_cycles(
|
|
300
|
+
[
|
|
301
|
+
[0, 4, 8],
|
|
302
|
+
[1, 6, 3],
|
|
303
|
+
[2, 5, 7],
|
|
304
|
+
[9, 22, 35],
|
|
305
|
+
[45, 67, 44],
|
|
306
|
+
[47, 68, 43],
|
|
307
|
+
[46, 69, 39],
|
|
308
|
+
[50, 70, 38],
|
|
309
|
+
[49, 71, 36]
|
|
310
|
+
],
|
|
311
|
+
72
|
|
312
|
+
);
|
|
310
313
|
var move_Ui = compose(move_U, move_U);
|
|
311
314
|
var move_X = Array(72).fill().map((_, i) => (i / 18 | 0) * 18 + (i + 9) % 18);
|
|
312
315
|
var move_Y = Array(72).fill().map((_, i) => (i / 36 | 0) * 36 + (i + 18) % 36);
|
|
@@ -314,14 +317,17 @@ var move_Z = Array(72).fill().map((_, i) => (i + 36) % 72);
|
|
|
314
317
|
var move_L = compose3(move_Z, move_Ui, move_Z);
|
|
315
318
|
var move_F = compose3(move_X, move_U, move_X);
|
|
316
319
|
var move_R = compose3(move_X, move_L, move_X);
|
|
317
|
-
var move_Us = permutation_from_cycles(
|
|
318
|
-
[
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
320
|
+
var move_Us = permutation_from_cycles(
|
|
321
|
+
[
|
|
322
|
+
[10, 24, 30],
|
|
323
|
+
[11, 23, 34],
|
|
324
|
+
[12, 19, 33],
|
|
325
|
+
[42, 48, 64],
|
|
326
|
+
[41, 52, 65],
|
|
327
|
+
[37, 51, 66]
|
|
328
|
+
],
|
|
329
|
+
72
|
|
330
|
+
);
|
|
325
331
|
var move_Uw = compose(move_U, move_Us);
|
|
326
332
|
var move_Uwi = compose(move_Uw, move_Uw);
|
|
327
333
|
var move_Lw = compose3(move_Z, move_Uwi, move_Z);
|
|
@@ -374,10 +380,16 @@ function identify_edge_piece(colourA, colourB) {
|
|
|
374
380
|
throw new Error("unknown edge piece");
|
|
375
381
|
}
|
|
376
382
|
function get_corner_piece(facelets, location) {
|
|
377
|
-
return identify_corner_piece(
|
|
383
|
+
return identify_corner_piece(
|
|
384
|
+
facelets[corner_piece_facelets[location][0]],
|
|
385
|
+
facelets[corner_piece_facelets[location][2]]
|
|
386
|
+
);
|
|
378
387
|
}
|
|
379
388
|
function get_edge_piece(facelets, location) {
|
|
380
|
-
return identify_edge_piece(
|
|
389
|
+
return identify_edge_piece(
|
|
390
|
+
facelets[edge_piece_facelets[location][0]],
|
|
391
|
+
facelets[edge_piece_facelets[location][1]]
|
|
392
|
+
);
|
|
381
393
|
}
|
|
382
394
|
function set_corner_piece(facelets, location, value, orientation) {
|
|
383
395
|
let indices = corner_piece_facelets[location];
|
|
@@ -402,8 +414,12 @@ function convert_move_to_permutations(move) {
|
|
|
402
414
|
let cp_half = cp_raw.map(([p, o]) => p + 6 * o);
|
|
403
415
|
let cp = cp_half.concat(cp_half.map((x) => (x + 6) % 12));
|
|
404
416
|
let ep = Array(12).fill().map((_, i) => get_edge_piece(state, i));
|
|
405
|
-
let ap = Array(12).fill().map(
|
|
406
|
-
|
|
417
|
+
let ap = Array(12).fill().map(
|
|
418
|
+
(_, i) => centreA_piece_facelets.indexOf(move[centreA_piece_facelets[i]])
|
|
419
|
+
);
|
|
420
|
+
let bp = Array(12).fill().map(
|
|
421
|
+
(_, i) => centreB_piece_facelets.indexOf(move[centreB_piece_facelets[i]])
|
|
422
|
+
);
|
|
407
423
|
return { cp, ep, ap, bp };
|
|
408
424
|
}
|
|
409
425
|
var moves = [
|
|
@@ -510,7 +526,10 @@ function simplify_move_sequence(move_sequence, make_noise = false) {
|
|
|
510
526
|
return simplified;
|
|
511
527
|
}
|
|
512
528
|
function generate_random_state_scramble(randomUintBelow2) {
|
|
513
|
-
return stringify_move_sequence(
|
|
529
|
+
return stringify_move_sequence(
|
|
530
|
+
invert_move_sequence(solve(random_state(randomUintBelow2), true)),
|
|
531
|
+
true
|
|
532
|
+
);
|
|
514
533
|
}
|
|
515
534
|
function generate_mtable_comb4_generic(n, k0, k1, k2, k3, permutations) {
|
|
516
535
|
let N = C4(n, k0, k1, k2, k3);
|
|
@@ -704,10 +723,14 @@ function index_phase1(facelets) {
|
|
|
704
723
|
let [itc, cti] = generate_comb4_lookup_tables(12, 6, 0, 3, 3);
|
|
705
724
|
let ep = Array(12).fill().map((_, i) => get_edge_piece(facelets, i));
|
|
706
725
|
let edge_coord = ep.indexOf(8) + 12 * ep.indexOf(9) + 12 ** 2 * ep.indexOf(10) + 12 ** 3 * ep.indexOf(11);
|
|
707
|
-
let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
726
|
+
let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(
|
|
727
|
+
(facelet_indices) => {
|
|
728
|
+
let arr = facelet_indices.map(
|
|
729
|
+
(x) => phase1_centre_colour_map[facelets[x]]
|
|
730
|
+
);
|
|
731
|
+
return cti[arr.reduce((acc, x, j) => acc | x << 2 * j, 0)];
|
|
732
|
+
}
|
|
733
|
+
);
|
|
711
734
|
return [edge_coord, a_coord, b_coord];
|
|
712
735
|
}
|
|
713
736
|
function generate_phase1_edge_mtable() {
|
|
@@ -731,13 +754,27 @@ function generate_phase1_centreA_mtable() {
|
|
|
731
754
|
if (cached_mtables.phase1_centreA) {
|
|
732
755
|
return cached_mtables.phase1_centreA;
|
|
733
756
|
}
|
|
734
|
-
return cached_mtables.phase1_centreA = generate_mtable_comb4_generic(
|
|
757
|
+
return cached_mtables.phase1_centreA = generate_mtable_comb4_generic(
|
|
758
|
+
12,
|
|
759
|
+
6,
|
|
760
|
+
0,
|
|
761
|
+
3,
|
|
762
|
+
3,
|
|
763
|
+
move_permutations.map((x) => x.ap)
|
|
764
|
+
);
|
|
735
765
|
}
|
|
736
766
|
function generate_phase1_centreB_mtable() {
|
|
737
767
|
if (cached_mtables.phase1_centreB) {
|
|
738
768
|
return cached_mtables.phase1_centreB;
|
|
739
769
|
}
|
|
740
|
-
return cached_mtables.phase1_centreB = generate_mtable_comb4_generic(
|
|
770
|
+
return cached_mtables.phase1_centreB = generate_mtable_comb4_generic(
|
|
771
|
+
12,
|
|
772
|
+
6,
|
|
773
|
+
0,
|
|
774
|
+
3,
|
|
775
|
+
3,
|
|
776
|
+
move_permutations.map((x) => x.bp)
|
|
777
|
+
);
|
|
741
778
|
}
|
|
742
779
|
function generate_phase1_centre_ptable() {
|
|
743
780
|
if (cached_ptables.phase1_centre) {
|
|
@@ -749,7 +786,10 @@ function generate_phase1_centre_ptable() {
|
|
|
749
786
|
let x9 = x >> 18 & 3;
|
|
750
787
|
return x6 === 2 && x9 === 3;
|
|
751
788
|
}).map((x) => cti[x]);
|
|
752
|
-
return cached_ptables.phase1_centre = bfs(
|
|
789
|
+
return cached_ptables.phase1_centre = bfs(
|
|
790
|
+
generate_phase1_centreB_mtable(),
|
|
791
|
+
goal_states
|
|
792
|
+
);
|
|
753
793
|
}
|
|
754
794
|
function* solve_phase1_gen(facelets) {
|
|
755
795
|
let mtables = [
|
|
@@ -777,7 +817,11 @@ function* phase1_ida_solve_gen(indices, mtables, ptables, moves_left) {
|
|
|
777
817
|
function* phase1_ida_search_gen(indices, mtables, ptables, bound, last) {
|
|
778
818
|
let ncoords = 3;
|
|
779
819
|
let nmoves = 8;
|
|
780
|
-
let heuristic = Math.max(
|
|
820
|
+
let heuristic = Math.max(
|
|
821
|
+
ptables[0][indices[0]],
|
|
822
|
+
ptables[1][indices[1]],
|
|
823
|
+
ptables[2][indices[2]]
|
|
824
|
+
);
|
|
781
825
|
if (heuristic > bound)
|
|
782
826
|
return;
|
|
783
827
|
if (bound === 0) {
|
|
@@ -797,7 +841,13 @@ function* phase1_ida_search_gen(indices, mtables, ptables, bound, last) {
|
|
|
797
841
|
new_indices[2] = mtables[2][m][indices[2]];
|
|
798
842
|
let r = 1;
|
|
799
843
|
while (indices.some((_, i) => indices[i] != new_indices[i])) {
|
|
800
|
-
let subpath_gen = phase1_ida_search_gen(
|
|
844
|
+
let subpath_gen = phase1_ida_search_gen(
|
|
845
|
+
new_indices,
|
|
846
|
+
mtables,
|
|
847
|
+
ptables,
|
|
848
|
+
bound - 1,
|
|
849
|
+
m
|
|
850
|
+
);
|
|
801
851
|
while (true) {
|
|
802
852
|
let { value: subpath, done } = subpath_gen.next();
|
|
803
853
|
if (done)
|
|
@@ -832,14 +882,20 @@ function index_phase2(facelets) {
|
|
|
832
882
|
let ep = Array(8).fill().map((_, i) => get_edge_piece(facelets, i));
|
|
833
883
|
let edge_coord = ep.indexOf(5) + 8 * ep.indexOf(6) + 8 ** 2 * ep.indexOf(7);
|
|
834
884
|
let corners = Array(5).fill().map((_, i) => get_corner_piece(facelets, i));
|
|
835
|
-
let cp_inverse_full = invert_permutation(
|
|
885
|
+
let cp_inverse_full = invert_permutation(
|
|
886
|
+
corners.map(([p, o]) => p + 5 * o).concat(corners.map(([p, o]) => p + 5 * (o ^ 1)))
|
|
887
|
+
);
|
|
836
888
|
let cp_inverse = cp_inverse_full.slice(0, 5).map((x) => x % 5);
|
|
837
889
|
let co_inverse = cp_inverse_full.slice(0, 5).map((x) => x / 5 | 0);
|
|
838
890
|
let corner_coord = evenpermutation_to_index(cp_inverse) * 8 + (co_inverse[0] ^ co_inverse[2]) + 2 * (co_inverse[0] ^ co_inverse[3]) + 4 * co_inverse[4];
|
|
839
|
-
let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
891
|
+
let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(
|
|
892
|
+
(facelet_indices) => {
|
|
893
|
+
let arr = compose(facelet_indices, phase2_centre_indices).map(
|
|
894
|
+
(x) => phase2_centre_colour_map[facelets[x]]
|
|
895
|
+
);
|
|
896
|
+
return cti[arr.reduce((acc, x, j) => acc | x << 2 * j, 0)];
|
|
897
|
+
}
|
|
898
|
+
);
|
|
843
899
|
generate_phase2_edge_mtable();
|
|
844
900
|
generate_phase2_corner_mtable_compact();
|
|
845
901
|
return [
|
|
@@ -855,8 +911,22 @@ function generate_phase2_centre_mtables() {
|
|
|
855
911
|
if (cached_mtables.phase2_centre) {
|
|
856
912
|
return cached_mtables.phase2_centre;
|
|
857
913
|
}
|
|
858
|
-
let a = generate_mtable_comb4_generic(
|
|
859
|
-
|
|
914
|
+
let a = generate_mtable_comb4_generic(
|
|
915
|
+
10,
|
|
916
|
+
5,
|
|
917
|
+
3,
|
|
918
|
+
2,
|
|
919
|
+
0,
|
|
920
|
+
move_permutations.slice(0, 4).map((x) => reduce_permutation(x.ap, phase2_keep))
|
|
921
|
+
);
|
|
922
|
+
let b = generate_mtable_comb4_generic(
|
|
923
|
+
10,
|
|
924
|
+
5,
|
|
925
|
+
3,
|
|
926
|
+
2,
|
|
927
|
+
0,
|
|
928
|
+
move_permutations.slice(0, 4).map((x) => reduce_permutation(x.bp, phase2_keep))
|
|
929
|
+
);
|
|
860
930
|
return cached_mtables.phase2_centre = [a, b];
|
|
861
931
|
}
|
|
862
932
|
var phase2_edge_reduction_map;
|
|
@@ -864,7 +934,9 @@ function generate_phase2_edge_mtable() {
|
|
|
864
934
|
if (cached_mtables.phase2_edge) {
|
|
865
935
|
return cached_mtables.phase2_edge;
|
|
866
936
|
}
|
|
867
|
-
let e = generate_mtable_single_generic(
|
|
937
|
+
let e = generate_mtable_single_generic(
|
|
938
|
+
move_permutations.slice(0, 4).map((x) => x.ep.slice(0, 8))
|
|
939
|
+
);
|
|
868
940
|
let eee = combine_mtables(e, combine_mtables(e, e));
|
|
869
941
|
let eee_trimmed;
|
|
870
942
|
[eee_trimmed, phase2_edge_reduction_map] = trim_unreachable(eee, 501);
|
|
@@ -916,7 +988,10 @@ function generate_phase2_corner_mtable_compact() {
|
|
|
916
988
|
if (cached_mtables.phase2_corner_compact) {
|
|
917
989
|
return cached_mtables.phase2_corner_compact;
|
|
918
990
|
}
|
|
919
|
-
[cached_mtables.phase2_corner_compact, phase2_corner_reduction_map] = reduce_to_quotient(
|
|
991
|
+
[cached_mtables.phase2_corner_compact, phase2_corner_reduction_map] = reduce_to_quotient(
|
|
992
|
+
generate_phase2_corner_mtable(),
|
|
993
|
+
phase2_corner_goal_states()
|
|
994
|
+
);
|
|
920
995
|
return cached_mtables.phase2_corner_compact;
|
|
921
996
|
}
|
|
922
997
|
function generate_phase2_ce_mtable() {
|
|
@@ -933,7 +1008,11 @@ function generate_phase2_ce_mirror_map() {
|
|
|
933
1008
|
return phase2_ce_mirror_map;
|
|
934
1009
|
}
|
|
935
1010
|
const ce_solved = index_phase2(solved_state)[2];
|
|
936
|
-
return phase2_ce_mirror_map = generate_mirrored_coordinate_table(
|
|
1011
|
+
return phase2_ce_mirror_map = generate_mirrored_coordinate_table(
|
|
1012
|
+
generate_phase2_ce_mtable(),
|
|
1013
|
+
ce_solved,
|
|
1014
|
+
ce_solved
|
|
1015
|
+
);
|
|
937
1016
|
}
|
|
938
1017
|
function phase2_centre_goal_states() {
|
|
939
1018
|
let [itc, cti] = generate_comb4_lookup_tables(10, 5, 3, 2, 0);
|
|
@@ -1005,14 +1084,31 @@ function* phase2_ida_solve_gen(indices, moves_left) {
|
|
|
1005
1084
|
let mirror_map = generate_phase2_ce_mirror_map();
|
|
1006
1085
|
let [a, b, ce] = indices;
|
|
1007
1086
|
let ce_mirror = mirror_map[ce];
|
|
1008
|
-
let bound = Math.max(
|
|
1087
|
+
let bound = Math.max(
|
|
1088
|
+
ptable_ace[a + 2520 * ce],
|
|
1089
|
+
ptable_ace[b + 2520 * ce_mirror]
|
|
1090
|
+
);
|
|
1009
1091
|
while (bound <= moves_left) {
|
|
1010
|
-
yield* phase2_ida_search_gen(
|
|
1092
|
+
yield* phase2_ida_search_gen(
|
|
1093
|
+
a,
|
|
1094
|
+
b,
|
|
1095
|
+
ce,
|
|
1096
|
+
mtable_a,
|
|
1097
|
+
mtable_b,
|
|
1098
|
+
mtable_ce,
|
|
1099
|
+
ptable_ace,
|
|
1100
|
+
mirror_map,
|
|
1101
|
+
bound,
|
|
1102
|
+
-1
|
|
1103
|
+
);
|
|
1011
1104
|
bound++;
|
|
1012
1105
|
}
|
|
1013
1106
|
}
|
|
1014
1107
|
function* phase2_ida_search_gen(a, b, ce, mtable_a, mtable_b, mtable_ce, ptable_ace, mirror_map, bound, last) {
|
|
1015
|
-
let h = Math.max(
|
|
1108
|
+
let h = Math.max(
|
|
1109
|
+
ptable_ace[a + 2520 * ce],
|
|
1110
|
+
ptable_ace[b + 2520 * mirror_map[ce]]
|
|
1111
|
+
);
|
|
1016
1112
|
if (h > bound) {
|
|
1017
1113
|
return;
|
|
1018
1114
|
}
|
|
@@ -1030,7 +1126,18 @@ function* phase2_ida_search_gen(a, b, ce, mtable_a, mtable_b, mtable_ce, ptable_
|
|
|
1030
1126
|
new_a = mtable_a[m][new_a];
|
|
1031
1127
|
new_b = mtable_b[m][new_b];
|
|
1032
1128
|
new_ce = mtable_ce[m][new_ce];
|
|
1033
|
-
let subpath_gen = phase2_ida_search_gen(
|
|
1129
|
+
let subpath_gen = phase2_ida_search_gen(
|
|
1130
|
+
new_a,
|
|
1131
|
+
new_b,
|
|
1132
|
+
new_ce,
|
|
1133
|
+
mtable_a,
|
|
1134
|
+
mtable_b,
|
|
1135
|
+
mtable_ce,
|
|
1136
|
+
ptable_ace,
|
|
1137
|
+
mirror_map,
|
|
1138
|
+
bound - 1,
|
|
1139
|
+
m
|
|
1140
|
+
);
|
|
1034
1141
|
while (true) {
|
|
1035
1142
|
let { value: subpath, done } = subpath_gen.next();
|
|
1036
1143
|
if (done)
|
|
@@ -1209,10 +1316,16 @@ var phase3_2gen_move_seqs = [
|
|
|
1209
1316
|
[7, 2]
|
|
1210
1317
|
]
|
|
1211
1318
|
];
|
|
1212
|
-
phase3_2gen_move_seqs = phase3_2gen_move_seqs.concat(
|
|
1319
|
+
phase3_2gen_move_seqs = phase3_2gen_move_seqs.concat(
|
|
1320
|
+
phase3_2gen_move_seqs.map((seq) => invert_move_sequence(seq))
|
|
1321
|
+
);
|
|
1213
1322
|
var phase3_2gen_nmoves = phase3_2gen_move_seqs.length;
|
|
1214
|
-
var phase3_2gen_facelet_permutations = phase3_2gen_move_seqs.map(
|
|
1215
|
-
|
|
1323
|
+
var phase3_2gen_facelet_permutations = phase3_2gen_move_seqs.map(
|
|
1324
|
+
(seq) => apply_move_sequence(permutation_from_cycles([], 72), seq)
|
|
1325
|
+
);
|
|
1326
|
+
var phase3_2gen_piece_permutations = phase3_2gen_facelet_permutations.map(
|
|
1327
|
+
convert_move_to_permutations
|
|
1328
|
+
);
|
|
1216
1329
|
var phase3_2gen_move_orders = phase3_2gen_facelet_permutations.map(permutation_order);
|
|
1217
1330
|
function index_phase3_2gen(facelets) {
|
|
1218
1331
|
let [itc, cti] = generate_comb4_lookup_tables(7, 3, 2, 0, 2);
|
|
@@ -1220,10 +1333,14 @@ function index_phase3_2gen(facelets) {
|
|
|
1220
1333
|
let edge_coord = evenpermutation_to_index(ep);
|
|
1221
1334
|
let corners = Array(4).fill().map((_, i) => get_corner_piece(facelets, i));
|
|
1222
1335
|
let corner_coord = evenpermutation_to_index(corners.map((x) => x[0])) * 2 + corners.find((x) => x[0] === 0)[1];
|
|
1223
|
-
let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1336
|
+
let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(
|
|
1337
|
+
(facelet_indices) => {
|
|
1338
|
+
let arr = compose(facelet_indices, phase3_2gen_centre_indices).map(
|
|
1339
|
+
(x) => facelets[x] % 4
|
|
1340
|
+
);
|
|
1341
|
+
return cti[arr.reduce((acc, x, j) => acc | x << 2 * j, 0)];
|
|
1342
|
+
}
|
|
1343
|
+
);
|
|
1227
1344
|
return [a_coord + 210 * b_coord, corner_coord + 24 * edge_coord];
|
|
1228
1345
|
}
|
|
1229
1346
|
function generate_phase3_2gen_edge_mtable() {
|
|
@@ -1232,7 +1349,9 @@ function generate_phase3_2gen_edge_mtable() {
|
|
|
1232
1349
|
}
|
|
1233
1350
|
const HALFFACT5 = factorial(5) / 2;
|
|
1234
1351
|
let mtable = Array(phase3_2gen_nmoves).fill().map(() => new Uint32Array(HALFFACT5));
|
|
1235
|
-
let permutations = phase3_2gen_piece_permutations.map(
|
|
1352
|
+
let permutations = phase3_2gen_piece_permutations.map(
|
|
1353
|
+
(x) => x.ep.slice(0, 5)
|
|
1354
|
+
);
|
|
1236
1355
|
for (let i = 0; i < HALFFACT5; i++) {
|
|
1237
1356
|
let p = index_to_evenpermutation(i, 5);
|
|
1238
1357
|
for (let m = 0; m < phase3_2gen_nmoves; m++) {
|
|
@@ -1262,7 +1381,9 @@ function generate_phase3_2gen_corner_mtable() {
|
|
|
1262
1381
|
false
|
|
1263
1382
|
];
|
|
1264
1383
|
let mtable = Array(phase3_2gen_nmoves).fill().map(() => new Uint32Array(N));
|
|
1265
|
-
let permutations = phase3_2gen_piece_permutations.map(
|
|
1384
|
+
let permutations = phase3_2gen_piece_permutations.map(
|
|
1385
|
+
(x) => reduce_permutation(x.cp, keep).slice(0, 4)
|
|
1386
|
+
);
|
|
1266
1387
|
for (let i = 0; i < N; i += 2) {
|
|
1267
1388
|
let p = index_to_evenpermutation(i >> 1, 4);
|
|
1268
1389
|
let cp = p.concat(p.map((x) => x + 4));
|
|
@@ -1280,17 +1401,41 @@ function generate_phase3_2gen_corneredge_mtable() {
|
|
|
1280
1401
|
if (cached_mtables.phase3_2gen_corneredge) {
|
|
1281
1402
|
return cached_mtables.phase3_2gen_corneredge;
|
|
1282
1403
|
}
|
|
1283
|
-
return cached_mtables.phase3_2gen_corneredge = combine_mtables(
|
|
1404
|
+
return cached_mtables.phase3_2gen_corneredge = combine_mtables(
|
|
1405
|
+
generate_phase3_2gen_corner_mtable(),
|
|
1406
|
+
generate_phase3_2gen_edge_mtable()
|
|
1407
|
+
);
|
|
1284
1408
|
}
|
|
1285
1409
|
function generate_phase3_2gen_centre_mtable() {
|
|
1286
1410
|
if (cached_mtables.phase3_2gen_centre) {
|
|
1287
1411
|
return cached_mtables.phase3_2gen_centre;
|
|
1288
1412
|
}
|
|
1289
|
-
let mtable_a = generate_mtable_comb4_generic(
|
|
1290
|
-
|
|
1413
|
+
let mtable_a = generate_mtable_comb4_generic(
|
|
1414
|
+
7,
|
|
1415
|
+
3,
|
|
1416
|
+
2,
|
|
1417
|
+
0,
|
|
1418
|
+
2,
|
|
1419
|
+
phase3_2gen_piece_permutations.map(
|
|
1420
|
+
(x) => reduce_permutation(x.ap, phase3_2gen_keep)
|
|
1421
|
+
)
|
|
1422
|
+
);
|
|
1423
|
+
let mtable_b = generate_mtable_comb4_generic(
|
|
1424
|
+
7,
|
|
1425
|
+
3,
|
|
1426
|
+
2,
|
|
1427
|
+
0,
|
|
1428
|
+
2,
|
|
1429
|
+
phase3_2gen_piece_permutations.map(
|
|
1430
|
+
(x) => reduce_permutation(x.bp, phase3_2gen_keep)
|
|
1431
|
+
)
|
|
1432
|
+
);
|
|
1291
1433
|
cached_mtables.phase3_2gen_centreA = mtable_a;
|
|
1292
1434
|
cached_mtables.phase3_2gen_centreB = mtable_b;
|
|
1293
|
-
return cached_mtables.phase3_2gen_centre = combine_mtables(
|
|
1435
|
+
return cached_mtables.phase3_2gen_centre = combine_mtables(
|
|
1436
|
+
mtable_a,
|
|
1437
|
+
mtable_b
|
|
1438
|
+
);
|
|
1294
1439
|
}
|
|
1295
1440
|
var phase3_2gen_ace_table;
|
|
1296
1441
|
function generate_phase3_2gen_ace_table() {
|
|
@@ -1342,7 +1487,11 @@ function generate_phase3_2gen_ce_mirror_map() {
|
|
|
1342
1487
|
}
|
|
1343
1488
|
const mtable_ce = generate_phase3_2gen_corneredge_mtable().slice(0, 2);
|
|
1344
1489
|
const solved_indices = index_phase3_2gen(solved_state);
|
|
1345
|
-
return phase3_2gen_ce_mirror_map = generate_mirrored_coordinate_table(
|
|
1490
|
+
return phase3_2gen_ce_mirror_map = generate_mirrored_coordinate_table(
|
|
1491
|
+
mtable_ce,
|
|
1492
|
+
solved_indices[1],
|
|
1493
|
+
solved_indices[1]
|
|
1494
|
+
);
|
|
1346
1495
|
}
|
|
1347
1496
|
function solve_phase3_2gen(facelets, indices = index_phase3_2gen(facelets)) {
|
|
1348
1497
|
let [ab, ce] = indices;
|
|
@@ -1355,7 +1504,17 @@ function solve_phase3_2gen(facelets, indices = index_phase3_2gen(facelets)) {
|
|
|
1355
1504
|
let mirror_map_ce = generate_phase3_2gen_ce_mirror_map();
|
|
1356
1505
|
let bound = 0;
|
|
1357
1506
|
while (true) {
|
|
1358
|
-
let gen = solve_phase3_2gen_ida(
|
|
1507
|
+
let gen = solve_phase3_2gen_ida(
|
|
1508
|
+
a,
|
|
1509
|
+
b,
|
|
1510
|
+
ce,
|
|
1511
|
+
mtable_a,
|
|
1512
|
+
mtable_b,
|
|
1513
|
+
mtable_ce,
|
|
1514
|
+
ace_table,
|
|
1515
|
+
mirror_map_ce,
|
|
1516
|
+
bound
|
|
1517
|
+
);
|
|
1359
1518
|
for (let solution of gen) {
|
|
1360
1519
|
return solution.map((m) => phase3_2gen_move_seqs[m]).flat();
|
|
1361
1520
|
}
|
|
@@ -1375,7 +1534,17 @@ function solve_phase3_2gen_readable(facelets, indices = index_phase3_2gen(facele
|
|
|
1375
1534
|
let best_score = Infinity;
|
|
1376
1535
|
let best_solution;
|
|
1377
1536
|
for (let bound = initial; bound <= initial + 0; bound++) {
|
|
1378
|
-
let gen = solve_phase3_2gen_ida(
|
|
1537
|
+
let gen = solve_phase3_2gen_ida(
|
|
1538
|
+
a,
|
|
1539
|
+
b,
|
|
1540
|
+
ce,
|
|
1541
|
+
mtable_a,
|
|
1542
|
+
mtable_b,
|
|
1543
|
+
mtable_ce,
|
|
1544
|
+
ace_table,
|
|
1545
|
+
mirror_map_ce,
|
|
1546
|
+
bound
|
|
1547
|
+
);
|
|
1379
1548
|
for (let solution of gen) {
|
|
1380
1549
|
let expanded = solution.map((m) => phase3_2gen_move_seqs[m]).flat();
|
|
1381
1550
|
let simplified = simplify_move_sequence(expanded);
|
|
@@ -1443,7 +1612,18 @@ function* solve_phase3_2gen_ida(a, b, ce, mtable_a, mtable_b, mtable_ce, ace_tab
|
|
|
1443
1612
|
if (new_bound < 0) {
|
|
1444
1613
|
continue;
|
|
1445
1614
|
}
|
|
1446
|
-
let subpath_gen = solve_phase3_2gen_ida(
|
|
1615
|
+
let subpath_gen = solve_phase3_2gen_ida(
|
|
1616
|
+
new_a,
|
|
1617
|
+
new_b,
|
|
1618
|
+
new_ce,
|
|
1619
|
+
mtable_a,
|
|
1620
|
+
mtable_b,
|
|
1621
|
+
mtable_ce,
|
|
1622
|
+
ace_table,
|
|
1623
|
+
mirror_map_ce,
|
|
1624
|
+
new_bound,
|
|
1625
|
+
m
|
|
1626
|
+
);
|
|
1447
1627
|
while (true) {
|
|
1448
1628
|
let { value: subpath, done } = subpath_gen.next();
|
|
1449
1629
|
if (done) {
|
|
@@ -1499,7 +1679,9 @@ function solve_phase2_and_phase3_readable(facelets, phase2_attempts = 20, cap =
|
|
|
1499
1679
|
let { value, done } = gen.next();
|
|
1500
1680
|
if (!done) {
|
|
1501
1681
|
let intermediate_facelets = apply_move_sequence(facelets, value);
|
|
1502
|
-
let solution = simplify_move_sequence(
|
|
1682
|
+
let solution = simplify_move_sequence(
|
|
1683
|
+
value.concat(solve_phase3_2gen_readable(intermediate_facelets))
|
|
1684
|
+
);
|
|
1503
1685
|
let score = grade_readability(solution);
|
|
1504
1686
|
if (score <= cap) {
|
|
1505
1687
|
return solution;
|
|
@@ -1513,7 +1695,9 @@ function solve_phase2_and_phase3_readable(facelets, phase2_attempts = 20, cap =
|
|
|
1513
1695
|
let { value, done } = gen_t2.next();
|
|
1514
1696
|
if (!done) {
|
|
1515
1697
|
let intermediate_facelets = apply_move_sequence(facelets_t2, value);
|
|
1516
|
-
let solution = simplify_move_sequence(
|
|
1698
|
+
let solution = simplify_move_sequence(
|
|
1699
|
+
value.concat(solve_phase3_2gen_readable(intermediate_facelets))
|
|
1700
|
+
);
|
|
1517
1701
|
solution = solution.map(([m, r]) => [m ^ 2, r]);
|
|
1518
1702
|
let score = grade_readability(solution);
|
|
1519
1703
|
if (score <= cap) {
|
|
@@ -1534,4 +1718,4 @@ async function randomFTOScrambleString() {
|
|
|
1534
1718
|
export {
|
|
1535
1719
|
randomFTOScrambleString
|
|
1536
1720
|
};
|
|
1537
|
-
//# sourceMappingURL=search-dynamic-solve-fto-
|
|
1721
|
+
//# sourceMappingURL=search-dynamic-solve-fto-4LI23P6K.js.map
|