cubing 0.29.0 → 0.29.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/README.md +1 -6
- package/dist/esm/alg/index.js +1 -1
- package/dist/esm/bluetooth/index.js +36 -31
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/{chunk-NI7U4XAZ.js → chunk-7OIUETFU.js} +9 -8
- package/dist/esm/chunk-7OIUETFU.js.map +7 -0
- package/dist/esm/{chunk-DZGFGBKT.js → chunk-EOEJDDXN.js} +95 -58
- package/dist/esm/chunk-EOEJDDXN.js.map +7 -0
- 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-LV7IKG36.js → chunk-J5KJ2WWA.js} +35 -34
- package/dist/esm/chunk-J5KJ2WWA.js.map +7 -0
- package/dist/esm/{chunk-ZNAYJGVL.js → chunk-NUMCMGLU.js} +2 -2
- package/dist/esm/{chunk-ZNAYJGVL.js.map → chunk-NUMCMGLU.js.map} +0 -0
- package/dist/esm/{chunk-LSCTPPWV.js → chunk-OT7AIIFN.js} +4 -4
- package/dist/esm/chunk-OT7AIIFN.js.map +7 -0
- package/dist/esm/{chunk-XU5ILFX5.js → chunk-POCUG6QW.js} +6 -4
- package/dist/esm/{chunk-XU5ILFX5.js.map → chunk-POCUG6QW.js.map} +2 -2
- 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-RH4WZIGC.js} +2 -2
- package/dist/esm/{chunk-GW4FGG42.js.map → chunk-RH4WZIGC.js.map} +0 -0
- package/dist/esm/{chunk-TGPS3CXW.js → chunk-RIXFKOD6.js} +7 -7
- package/dist/esm/{chunk-TGPS3CXW.js.map → chunk-RIXFKOD6.js.map} +2 -2
- 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-Q4W5ZR4U.js → chunk-WNZXZ4MW.js} +10 -8
- package/dist/esm/{chunk-Q4W5ZR4U.js.map → chunk-WNZXZ4MW.js.map} +2 -2
- package/dist/esm/{chunk-PYWGREIP.js → chunk-YD2TMJI2.js} +33 -31
- package/dist/esm/chunk-YD2TMJI2.js.map +7 -0
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +2 -2
- package/dist/esm/protocol/index.js +4 -4
- package/dist/esm/puzzle-geometry/index.js +114 -88
- package/dist/esm/puzzle-geometry/index.js.map +2 -2
- package/dist/esm/puzzles/index.js +10 -6
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js → puzzles-dynamic-side-events-3K26JTOG.js} +2 -2
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js.map → puzzles-dynamic-side-events-3K26JTOG.js.map} +1 -1
- package/dist/esm/scramble/index.js +3 -3
- package/dist/esm/search/index.js +8 -8
- package/dist/esm/{search-dynamic-sgs-side-events-AYX7MZO7.js → search-dynamic-sgs-side-events-AE3TLLPA.js} +6 -6
- package/dist/esm/search-dynamic-sgs-side-events-AE3TLLPA.js.map +7 -0
- package/dist/esm/{search-dynamic-sgs-unofficial-DLJOJFJL.js → search-dynamic-sgs-unofficial-JUXMNMNO.js} +122 -67
- package/dist/esm/search-dynamic-sgs-unofficial-JUXMNMNO.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-3x3x3-7XZTYQMO.js → search-dynamic-solve-3x3x3-SA75BI5I.js} +649 -405
- package/dist/esm/search-dynamic-solve-3x3x3-SA75BI5I.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-4x4x4-CWWTFKMR.js → search-dynamic-solve-4x4x4-ALKH43DT.js} +399 -150
- package/dist/esm/search-dynamic-solve-4x4x4-ALKH43DT.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-fto-4LI23P6K.js → search-dynamic-solve-fto-5B5ZESQC.js} +74 -34
- package/dist/esm/search-dynamic-solve-fto-5B5ZESQC.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-kilominx-3HEVQ4MC.js → search-dynamic-solve-kilominx-OY4VIARG.js} +136 -71
- package/dist/esm/search-dynamic-solve-kilominx-OY4VIARG.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-master_tetraminx-UB32C7MM.js → search-dynamic-solve-master_tetraminx-GE2BTRGI.js} +84 -41
- package/dist/esm/search-dynamic-solve-master_tetraminx-GE2BTRGI.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-sq1-HA72TYF2.js → search-dynamic-solve-sq1-W6PSSLR6.js} +129 -54
- package/dist/esm/search-dynamic-solve-sq1-W6PSSLR6.js.map +7 -0
- package/dist/esm/{search-worker-inside-generated-string-AMEXYCKK.js → search-worker-inside-generated-string-7HYFSSPW.js} +28 -28
- package/dist/esm/search-worker-inside-generated-string-7HYFSSPW.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-TP2T3NUL.js → search-worker-js-entry-SNUA3SOE.js} +44 -35
- package/dist/esm/search-worker-js-entry-SNUA3SOE.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-NEH77S4I.js → search-worker-ts-entry-LNB7KNFY.js} +3 -3
- package/dist/esm/{search-worker-ts-entry-NEH77S4I.js.map → search-worker-ts-entry-LNB7KNFY.js.map} +0 -0
- package/dist/esm/stream/index.js +1 -1
- package/dist/esm/stream/index.js.map +2 -2
- package/dist/esm/twisty/index.js +287 -273
- package/dist/esm/twisty/index.js.map +2 -2
- package/dist/esm/{twisty-dynamic-3d-D3ZDBJUH.js → twisty-dynamic-3d-PU74EKRA.js} +57 -59
- package/dist/esm/twisty-dynamic-3d-PU74EKRA.js.map +7 -0
- package/dist/types/{TwizzleLink-bef52ecd.d.ts → TwizzleLink-ce20e840.d.ts} +1 -1
- package/dist/types/puzzles/index.d.ts +5 -3
- package/dist/types/twisty/index.d.ts +2 -2
- package/package.json +51 -147
- package/dist/esm/chunk-DZGFGBKT.js.map +0 -7
- package/dist/esm/chunk-LSCTPPWV.js.map +0 -7
- package/dist/esm/chunk-LV7IKG36.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-PYWGREIP.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-side-events-AYX7MZO7.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-unofficial-DLJOJFJL.js.map +0 -7
- package/dist/esm/search-dynamic-solve-3x3x3-7XZTYQMO.js.map +0 -7
- package/dist/esm/search-dynamic-solve-4x4x4-CWWTFKMR.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-AMEXYCKK.js.map +0 -7
- package/dist/esm/search-worker-js-entry-TP2T3NUL.js.map +0 -7
- package/dist/esm/twisty-dynamic-3d-D3ZDBJUH.js.map +0 -7
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseSGS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RH4WZIGC.js";
|
|
4
4
|
import {
|
|
5
5
|
puzzles
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-EOEJDDXN.js";
|
|
7
|
+
import "./chunk-YD2TMJI2.js";
|
|
8
|
+
import "./chunk-POCUG6QW.js";
|
|
9
9
|
import {
|
|
10
10
|
randomUIntBelowFactory
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HR5D6SD4.js";
|
|
12
12
|
import {
|
|
13
13
|
Alg
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-7OIUETFU.js";
|
|
15
15
|
import "./chunk-SBZRVSPK.js";
|
|
16
16
|
|
|
17
17
|
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/fto.sgs.ts
|
|
@@ -647,18 +647,22 @@ Alg U BR' U' BR BL' BR BL BR'
|
|
|
647
647
|
|
|
648
648
|
// src/cubing/vendor/xyzzy/redi_cube.js
|
|
649
649
|
function factorial(n) {
|
|
650
|
-
if (n < 2)
|
|
650
|
+
if (n < 2) {
|
|
651
651
|
return n;
|
|
652
|
+
}
|
|
652
653
|
let f = 1;
|
|
653
|
-
for (let i = 2; i <= n; i++)
|
|
654
|
+
for (let i = 2; i <= n; i++) {
|
|
654
655
|
f *= i;
|
|
656
|
+
}
|
|
655
657
|
return f;
|
|
656
658
|
}
|
|
657
659
|
function C(n, k) {
|
|
658
|
-
if (k < 0 || k > n)
|
|
660
|
+
if (k < 0 || k > n) {
|
|
659
661
|
return 0;
|
|
660
|
-
|
|
662
|
+
}
|
|
663
|
+
if (k === 0 || k === n) {
|
|
661
664
|
return 1;
|
|
665
|
+
}
|
|
662
666
|
let c = 1;
|
|
663
667
|
for (let i = 0; i < k; i++) {
|
|
664
668
|
c = c * (n - i) / (i + 1) | 0;
|
|
@@ -702,8 +706,9 @@ function permutation_parity(A) {
|
|
|
702
706
|
let parity = 0;
|
|
703
707
|
for (let i = 0; i < n - 1; i++) {
|
|
704
708
|
for (let j = i; j < n; j++) {
|
|
705
|
-
if (A[i] > A[j])
|
|
709
|
+
if (A[i] > A[j]) {
|
|
706
710
|
parity ^= 1;
|
|
711
|
+
}
|
|
707
712
|
}
|
|
708
713
|
}
|
|
709
714
|
return parity;
|
|
@@ -720,14 +725,16 @@ function index_to_evenpermutation(ind, n) {
|
|
|
720
725
|
perm[n - 1] = 0;
|
|
721
726
|
for (let i = n - 2; i >= 0; i--) {
|
|
722
727
|
for (let j = i + 1; j < n; j++) {
|
|
723
|
-
if (perm[j] >= perm[i])
|
|
728
|
+
if (perm[j] >= perm[i]) {
|
|
724
729
|
perm[j]++;
|
|
725
|
-
else
|
|
730
|
+
} else {
|
|
726
731
|
parity ^= 1;
|
|
732
|
+
}
|
|
727
733
|
}
|
|
728
734
|
}
|
|
729
|
-
if (parity === 1)
|
|
735
|
+
if (parity === 1) {
|
|
730
736
|
[perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];
|
|
737
|
+
}
|
|
731
738
|
return perm;
|
|
732
739
|
}
|
|
733
740
|
function evenpermutation_to_index(perm) {
|
|
@@ -736,11 +743,13 @@ function evenpermutation_to_index(perm) {
|
|
|
736
743
|
function comb_to_index(l) {
|
|
737
744
|
let bits = l.length;
|
|
738
745
|
let ones = 0;
|
|
739
|
-
for (let i = 0; i < bits; i++)
|
|
746
|
+
for (let i = 0; i < bits; i++) {
|
|
740
747
|
ones += +(l[i] === 1);
|
|
748
|
+
}
|
|
741
749
|
let zeros = bits - ones;
|
|
742
|
-
if (zeros === 0 || ones === 0 || bits === 1)
|
|
750
|
+
if (zeros === 0 || ones === 0 || bits === 1) {
|
|
743
751
|
return 0;
|
|
752
|
+
}
|
|
744
753
|
let b = C(bits - 1, ones);
|
|
745
754
|
let ind = 0;
|
|
746
755
|
for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {
|
|
@@ -775,14 +784,16 @@ function index_to_comb(ind, ones, bits) {
|
|
|
775
784
|
}
|
|
776
785
|
function compose(A, B) {
|
|
777
786
|
let C2 = [];
|
|
778
|
-
for (let i = 0; i < B.length; i++)
|
|
787
|
+
for (let i = 0; i < B.length; i++) {
|
|
779
788
|
C2[i] = A[B[i]];
|
|
789
|
+
}
|
|
780
790
|
return C2;
|
|
781
791
|
}
|
|
782
792
|
function permutation_from_cycle(cycle, n) {
|
|
783
793
|
let perm = [];
|
|
784
|
-
for (let i = 0; i < n; i++)
|
|
794
|
+
for (let i = 0; i < n; i++) {
|
|
785
795
|
perm[i] = i;
|
|
796
|
+
}
|
|
786
797
|
for (let i = 0; i < cycle.length; i++) {
|
|
787
798
|
perm[cycle[i]] = cycle[(i + 1) % cycle.length];
|
|
788
799
|
}
|
|
@@ -790,14 +801,16 @@ function permutation_from_cycle(cycle, n) {
|
|
|
790
801
|
}
|
|
791
802
|
function unsparsify_list(d, n) {
|
|
792
803
|
let l = Array(n).fill(0);
|
|
793
|
-
for (let k in d)
|
|
804
|
+
for (let k in d) {
|
|
794
805
|
l[k] = d[k];
|
|
806
|
+
}
|
|
795
807
|
return l;
|
|
796
808
|
}
|
|
797
809
|
function compose_state(state1, state2) {
|
|
798
810
|
let o = Array(8).fill(0);
|
|
799
|
-
for (let i = 0; i < 8; i++)
|
|
811
|
+
for (let i = 0; i < 8; i++) {
|
|
800
812
|
o[i] = (state1[1][i] + state2[1][i]) % 3;
|
|
813
|
+
}
|
|
801
814
|
return [compose(state1[0], state2[0]), o];
|
|
802
815
|
}
|
|
803
816
|
var move_UL = [
|
|
@@ -847,8 +860,9 @@ function generate_random_state(randomUintBelow2) {
|
|
|
847
860
|
12
|
|
848
861
|
);
|
|
849
862
|
let o = Array(8);
|
|
850
|
-
for (let i = 0; i < 8; i++)
|
|
863
|
+
for (let i = 0; i < 8; i++) {
|
|
851
864
|
o[i] = randomUintBelow2(3);
|
|
865
|
+
}
|
|
852
866
|
return [p, o];
|
|
853
867
|
}
|
|
854
868
|
function generate_random_state_scramble(randomUintBelow2) {
|
|
@@ -880,17 +894,20 @@ function solve(state) {
|
|
|
880
894
|
let { value: sol1, done } = phase1gen.next();
|
|
881
895
|
let new_state = state;
|
|
882
896
|
for (let [m, r] of sol1) {
|
|
883
|
-
for (let i2 = 0; i2 < r; i2++)
|
|
897
|
+
for (let i2 = 0; i2 < r; i2++) {
|
|
884
898
|
new_state = compose_state(new_state, moves[m]);
|
|
899
|
+
}
|
|
885
900
|
}
|
|
886
901
|
if (intermediate_states.has(new_state.toString())) {
|
|
887
902
|
continue;
|
|
888
|
-
} else
|
|
903
|
+
} else {
|
|
889
904
|
intermediate_states.add(new_state.toString());
|
|
905
|
+
}
|
|
890
906
|
let edge_ind = evenpermutation_to_index(new_state[0].slice(0, 8));
|
|
891
907
|
let corner_ind = 0;
|
|
892
|
-
for (let i2 = 0; i2 < 4; i2++)
|
|
908
|
+
for (let i2 = 0; i2 < 4; i2++) {
|
|
893
909
|
corner_ind += new_state[1][i2] * 3 ** i2;
|
|
910
|
+
}
|
|
894
911
|
let phase2_indices = [edge_ind, corner_ind];
|
|
895
912
|
let moves_left = best ? best.length - sol1.length - 1 : 999999;
|
|
896
913
|
let sol2 = ida_solve(
|
|
@@ -905,26 +922,30 @@ function solve(state) {
|
|
|
905
922
|
if (best === void 0 || best.length > sol1.length + sol2.length) {
|
|
906
923
|
best = sol1.concat(sol2);
|
|
907
924
|
}
|
|
908
|
-
if (new Date() - start_time > 300)
|
|
925
|
+
if (new Date() - start_time > 300) {
|
|
909
926
|
break;
|
|
927
|
+
}
|
|
910
928
|
}
|
|
911
929
|
return best;
|
|
912
930
|
}
|
|
913
931
|
function index_phase1(state) {
|
|
914
932
|
let edge_ind = 0;
|
|
915
|
-
for (let i = 0; i < 4; i++)
|
|
933
|
+
for (let i = 0; i < 4; i++) {
|
|
916
934
|
edge_ind += state[0].indexOf(i + 8) * 12 ** i;
|
|
935
|
+
}
|
|
917
936
|
let corner_ind = 0;
|
|
918
|
-
for (let i = 0; i < 4; i++)
|
|
937
|
+
for (let i = 0; i < 4; i++) {
|
|
919
938
|
corner_ind += state[1][i + 4] * 3 ** i;
|
|
939
|
+
}
|
|
920
940
|
let filtered = state[0].map((x) => Math.max(-1, x - 8));
|
|
921
941
|
let separate_ind = comb_to_index(filtered.map((x) => +(x >= 0))) * 2 + permutation_parity(filtered.filter((x) => x >= 0));
|
|
922
942
|
return [edge_ind, corner_ind + 81 * separate_ind];
|
|
923
943
|
}
|
|
924
944
|
var tables = {};
|
|
925
945
|
function generate_phase1_corner_mtable() {
|
|
926
|
-
if (tables.phase1cm)
|
|
946
|
+
if (tables.phase1cm) {
|
|
927
947
|
return tables.phase1cm;
|
|
948
|
+
}
|
|
928
949
|
let mtable = [];
|
|
929
950
|
for (let i = 0; i < 81; i++) {
|
|
930
951
|
mtable[i] = Array(8);
|
|
@@ -944,8 +965,9 @@ function generate_phase1_corner_mtable() {
|
|
|
944
965
|
return tables.phase1cm = mtable;
|
|
945
966
|
}
|
|
946
967
|
function generate_phase1_corner_ptable() {
|
|
947
|
-
if (tables.phase1cp)
|
|
968
|
+
if (tables.phase1cp) {
|
|
948
969
|
return tables.phase1cp;
|
|
970
|
+
}
|
|
949
971
|
let ptable = Array(81);
|
|
950
972
|
for (let i = 0; i < 81; i++) {
|
|
951
973
|
let o = [
|
|
@@ -959,8 +981,9 @@ function generate_phase1_corner_ptable() {
|
|
|
959
981
|
return tables.phase1cp = ptable;
|
|
960
982
|
}
|
|
961
983
|
function generate_phase1_edge_mtable() {
|
|
962
|
-
if (tables.phase1em)
|
|
984
|
+
if (tables.phase1em) {
|
|
963
985
|
return tables.phase1em;
|
|
986
|
+
}
|
|
964
987
|
let mtable_single = [];
|
|
965
988
|
for (let i = 0; i < 12; i++) {
|
|
966
989
|
mtable_single[i] = [];
|
|
@@ -982,25 +1005,29 @@ function generate_phase1_edge_mtable() {
|
|
|
982
1005
|
return tables.phase1em = mtable;
|
|
983
1006
|
}
|
|
984
1007
|
function generate_phase1_edge_ptable() {
|
|
985
|
-
if (tables.phase1ep)
|
|
1008
|
+
if (tables.phase1ep) {
|
|
986
1009
|
return tables.phase1ep;
|
|
1010
|
+
}
|
|
987
1011
|
return tables.phase1ep = bfs(generate_phase1_edge_mtable(), [
|
|
988
1012
|
8 + 12 * (9 + 12 * (10 + 12 * 11))
|
|
989
1013
|
]);
|
|
990
1014
|
}
|
|
991
1015
|
function generate_phase1_separate_mtable() {
|
|
992
|
-
if (tables.phase1sm)
|
|
1016
|
+
if (tables.phase1sm) {
|
|
993
1017
|
return tables.phase1sm;
|
|
1018
|
+
}
|
|
994
1019
|
const C12_4 = C(12, 4);
|
|
995
1020
|
let mtable_c = [];
|
|
996
1021
|
for (let i = 0; i < C12_4; i++) {
|
|
997
1022
|
mtable_c[i] = [];
|
|
998
|
-
let comb = index_to_comb(i, 4, 12)
|
|
1023
|
+
let comb = index_to_comb(i, 4, 12);
|
|
1024
|
+
let perm = [];
|
|
999
1025
|
for (let j = 0, k = 0; j < 12; j++) {
|
|
1000
|
-
if (comb[j] === 0)
|
|
1026
|
+
if (comb[j] === 0) {
|
|
1001
1027
|
perm[j] = -1;
|
|
1002
|
-
else
|
|
1028
|
+
} else {
|
|
1003
1029
|
perm[j] = k++;
|
|
1030
|
+
}
|
|
1004
1031
|
}
|
|
1005
1032
|
for (let m = 0; m < 8; m++) {
|
|
1006
1033
|
let new_perm = compose(perm, moves[m][0]);
|
|
@@ -1024,13 +1051,15 @@ function generate_phase1_separate_mtable() {
|
|
|
1024
1051
|
return tables.phase1sm = mtable;
|
|
1025
1052
|
}
|
|
1026
1053
|
function generate_phase1_separate_ptable() {
|
|
1027
|
-
if (tables.phase1sp)
|
|
1054
|
+
if (tables.phase1sp) {
|
|
1028
1055
|
return tables.phase1sp;
|
|
1056
|
+
}
|
|
1029
1057
|
return tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]);
|
|
1030
1058
|
}
|
|
1031
1059
|
function generate_phase2_corner_mtable() {
|
|
1032
|
-
if (tables.phase2cm)
|
|
1060
|
+
if (tables.phase2cm) {
|
|
1033
1061
|
return tables.phase2cm;
|
|
1062
|
+
}
|
|
1034
1063
|
let phase1_mtable = generate_phase1_corner_mtable();
|
|
1035
1064
|
let mtable = Array(81);
|
|
1036
1065
|
for (let i = 0; i < 81; i++) {
|
|
@@ -1039,8 +1068,9 @@ function generate_phase2_corner_mtable() {
|
|
|
1039
1068
|
return tables.phase2cm = mtable;
|
|
1040
1069
|
}
|
|
1041
1070
|
function generate_phase2_edge_mtable() {
|
|
1042
|
-
if (tables.phase2em)
|
|
1071
|
+
if (tables.phase2em) {
|
|
1043
1072
|
return tables.phase2em;
|
|
1073
|
+
}
|
|
1044
1074
|
const n = 8;
|
|
1045
1075
|
const HALFFACT8 = factorial(n) / 2;
|
|
1046
1076
|
let mtable = Array(HALFFACT8);
|
|
@@ -1051,17 +1081,21 @@ function generate_phase2_edge_mtable() {
|
|
|
1051
1081
|
let new_perm = compose(perm, moves[m][0].slice(0, 8));
|
|
1052
1082
|
mtable[i][m] = evenpermutation_to_index(new_perm);
|
|
1053
1083
|
}
|
|
1054
|
-
if (i === HALFFACT8 - 1)
|
|
1084
|
+
if (i === HALFFACT8 - 1) {
|
|
1055
1085
|
break;
|
|
1086
|
+
}
|
|
1056
1087
|
let parity = 0;
|
|
1057
1088
|
do {
|
|
1058
1089
|
for (let k = n - 2; k >= 0; k--) {
|
|
1059
|
-
if (perm[k] > perm[k + 1])
|
|
1090
|
+
if (perm[k] > perm[k + 1]) {
|
|
1060
1091
|
continue;
|
|
1092
|
+
}
|
|
1061
1093
|
let l = k + 1;
|
|
1062
|
-
for (let L = l; L < n; L++)
|
|
1063
|
-
if (perm[L] > perm[k])
|
|
1094
|
+
for (let L = l; L < n; L++) {
|
|
1095
|
+
if (perm[L] > perm[k]) {
|
|
1064
1096
|
l = L;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1065
1099
|
[perm[k], perm[l]] = [perm[l], perm[k]];
|
|
1066
1100
|
parity ^= 1;
|
|
1067
1101
|
for (let j = 0; k + 1 + j < n - 1 - j; j++, parity ^= 1) {
|
|
@@ -1077,25 +1111,28 @@ function generate_phase2_edge_mtable() {
|
|
|
1077
1111
|
return tables.phase2em = mtable;
|
|
1078
1112
|
}
|
|
1079
1113
|
function generate_phase2_edge_ptable() {
|
|
1080
|
-
if (tables.phase2ep)
|
|
1114
|
+
if (tables.phase2ep) {
|
|
1081
1115
|
return tables.phase2ep;
|
|
1116
|
+
}
|
|
1082
1117
|
return tables.phase2ep = bfs(generate_phase2_edge_mtable(), [0]);
|
|
1083
1118
|
}
|
|
1084
1119
|
function bfs(mtable, goal_states) {
|
|
1085
1120
|
let N = mtable.length;
|
|
1086
1121
|
let nmoves = mtable[0].length;
|
|
1087
1122
|
let ptable = Array(N).fill(-1);
|
|
1088
|
-
let queue = goal_states.slice()
|
|
1123
|
+
let queue = goal_states.slice();
|
|
1124
|
+
let new_queue = [];
|
|
1089
1125
|
let depth = 0;
|
|
1090
1126
|
while (queue.length > 0) {
|
|
1091
1127
|
new_queue.length = 0;
|
|
1092
1128
|
for (let state of queue) {
|
|
1093
|
-
if (ptable[state] !== -1)
|
|
1129
|
+
if (ptable[state] !== -1) {
|
|
1094
1130
|
continue;
|
|
1131
|
+
}
|
|
1095
1132
|
ptable[state] = depth;
|
|
1096
1133
|
for (let move_index = 0; move_index < nmoves; move_index++) {
|
|
1097
1134
|
let new_state = mtable[state][move_index];
|
|
1098
|
-
while (new_state
|
|
1135
|
+
while (new_state !== state) {
|
|
1099
1136
|
new_queue.push(new_state);
|
|
1100
1137
|
new_state = mtable[new_state][move_index];
|
|
1101
1138
|
}
|
|
@@ -1110,12 +1147,14 @@ function ida_solve(indices, mtables, ptables, max_bound) {
|
|
|
1110
1147
|
max_bound = max_bound || 999999;
|
|
1111
1148
|
let ncoords = indices.length;
|
|
1112
1149
|
let bound = 0;
|
|
1113
|
-
for (let i = 0; i < ncoords; i++)
|
|
1150
|
+
for (let i = 0; i < ncoords; i++) {
|
|
1114
1151
|
bound = Math.max(bound, ptables[i][indices[i]]);
|
|
1152
|
+
}
|
|
1115
1153
|
while (bound <= max_bound) {
|
|
1116
1154
|
let path = ida_search(indices, mtables, ptables, bound, -1);
|
|
1117
|
-
if (path !== void 0)
|
|
1155
|
+
if (path !== void 0) {
|
|
1118
1156
|
return path;
|
|
1157
|
+
}
|
|
1119
1158
|
bound++;
|
|
1120
1159
|
}
|
|
1121
1160
|
}
|
|
@@ -1123,27 +1162,35 @@ function ida_search(indices, mtables, ptables, bound, last) {
|
|
|
1123
1162
|
let ncoords = indices.length;
|
|
1124
1163
|
let nmoves = mtables[0][0].length;
|
|
1125
1164
|
let heuristic = 0;
|
|
1126
|
-
for (let i = 0; i < ncoords; i++)
|
|
1165
|
+
for (let i = 0; i < ncoords; i++) {
|
|
1127
1166
|
heuristic = Math.max(heuristic, ptables[i][indices[i]]);
|
|
1128
|
-
|
|
1167
|
+
}
|
|
1168
|
+
if (heuristic > bound) {
|
|
1129
1169
|
return;
|
|
1130
|
-
|
|
1170
|
+
}
|
|
1171
|
+
if (bound === 0) {
|
|
1131
1172
|
return [];
|
|
1132
|
-
|
|
1173
|
+
}
|
|
1174
|
+
if (heuristic === 0 && bound === 1) {
|
|
1133
1175
|
return;
|
|
1176
|
+
}
|
|
1134
1177
|
for (let m = 0; m < nmoves; m++) {
|
|
1135
|
-
if (m === last)
|
|
1178
|
+
if (m === last) {
|
|
1136
1179
|
continue;
|
|
1137
|
-
|
|
1180
|
+
}
|
|
1181
|
+
if (m < last && tetrad[m] === tetrad[last]) {
|
|
1138
1182
|
continue;
|
|
1183
|
+
}
|
|
1139
1184
|
let new_indices = indices.slice();
|
|
1140
|
-
for (let c = 0; c < ncoords; c++)
|
|
1185
|
+
for (let c = 0; c < ncoords; c++) {
|
|
1141
1186
|
new_indices[c] = mtables[c][indices[c]][m];
|
|
1187
|
+
}
|
|
1142
1188
|
let r = 1;
|
|
1143
|
-
while (indices.some((_, i) => indices[i]
|
|
1189
|
+
while (indices.some((_, i) => indices[i] !== new_indices[i])) {
|
|
1144
1190
|
let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);
|
|
1145
|
-
if (subpath !== void 0)
|
|
1191
|
+
if (subpath !== void 0) {
|
|
1146
1192
|
return [[m, r]].concat(subpath);
|
|
1193
|
+
}
|
|
1147
1194
|
for (let c = 0; c < ncoords; c++) {
|
|
1148
1195
|
new_indices[c] = mtables[c][new_indices[c]][m];
|
|
1149
1196
|
}
|
|
@@ -1155,8 +1202,9 @@ function ida_search(indices, mtables, ptables, bound, last) {
|
|
|
1155
1202
|
function* ida_solve_gen(indices, mtables, ptables) {
|
|
1156
1203
|
let ncoords = indices.length;
|
|
1157
1204
|
let bound = 0;
|
|
1158
|
-
for (let i = 0; i < ncoords; i++)
|
|
1205
|
+
for (let i = 0; i < ncoords; i++) {
|
|
1159
1206
|
bound = Math.max(bound, ptables[i][indices[i]]);
|
|
1207
|
+
}
|
|
1160
1208
|
while (true) {
|
|
1161
1209
|
yield* ida_search_gen(indices, mtables, ptables, bound, -1);
|
|
1162
1210
|
bound++;
|
|
@@ -1166,26 +1214,32 @@ function* ida_search_gen(indices, mtables, ptables, bound, last) {
|
|
|
1166
1214
|
let ncoords = indices.length;
|
|
1167
1215
|
let nmoves = mtables[0][0].length;
|
|
1168
1216
|
let heuristic = 0;
|
|
1169
|
-
for (let i = 0; i < ncoords; i++)
|
|
1217
|
+
for (let i = 0; i < ncoords; i++) {
|
|
1170
1218
|
heuristic = Math.max(heuristic, ptables[i][indices[i]]);
|
|
1171
|
-
|
|
1219
|
+
}
|
|
1220
|
+
if (heuristic > bound) {
|
|
1172
1221
|
return;
|
|
1222
|
+
}
|
|
1173
1223
|
if (bound === 0) {
|
|
1174
1224
|
yield [];
|
|
1175
1225
|
return;
|
|
1176
1226
|
}
|
|
1177
|
-
if (heuristic === 0 && bound === 1)
|
|
1227
|
+
if (heuristic === 0 && bound === 1) {
|
|
1178
1228
|
return;
|
|
1229
|
+
}
|
|
1179
1230
|
for (let m = 0; m < nmoves; m++) {
|
|
1180
|
-
if (m === last)
|
|
1231
|
+
if (m === last) {
|
|
1181
1232
|
continue;
|
|
1182
|
-
|
|
1233
|
+
}
|
|
1234
|
+
if (m < last && tetrad[m] === tetrad[last]) {
|
|
1183
1235
|
continue;
|
|
1236
|
+
}
|
|
1184
1237
|
let new_indices = indices.slice();
|
|
1185
|
-
for (let c = 0; c < ncoords; c++)
|
|
1238
|
+
for (let c = 0; c < ncoords; c++) {
|
|
1186
1239
|
new_indices[c] = mtables[c][indices[c]][m];
|
|
1240
|
+
}
|
|
1187
1241
|
let r = 1;
|
|
1188
|
-
while (indices.some((_, i) => indices[i]
|
|
1242
|
+
while (indices.some((_, i) => indices[i] !== new_indices[i])) {
|
|
1189
1243
|
let subpath_gen = ida_search_gen(
|
|
1190
1244
|
new_indices,
|
|
1191
1245
|
mtables,
|
|
@@ -1195,8 +1249,9 @@ function* ida_search_gen(indices, mtables, ptables, bound, last) {
|
|
|
1195
1249
|
);
|
|
1196
1250
|
while (true) {
|
|
1197
1251
|
let { value: subpath, done } = subpath_gen.next();
|
|
1198
|
-
if (done)
|
|
1252
|
+
if (done) {
|
|
1199
1253
|
break;
|
|
1254
|
+
}
|
|
1200
1255
|
yield [[m, r]].concat(subpath);
|
|
1201
1256
|
}
|
|
1202
1257
|
for (let c = 0; c < ncoords; c++) {
|
|
@@ -1218,4 +1273,4 @@ export {
|
|
|
1218
1273
|
getRandomRediCubeScramble,
|
|
1219
1274
|
sgsDataFTO
|
|
1220
1275
|
};
|
|
1221
|
-
//# sourceMappingURL=search-dynamic-sgs-unofficial-
|
|
1276
|
+
//# sourceMappingURL=search-dynamic-sgs-unofficial-JUXMNMNO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/fto.sgs.ts", "../../src/cubing/vendor/xyzzy/redi_cube.js"],
|
|
4
|
+
"sourcesContent": ["import { puzzles } from \"../../../../../../puzzles\";\nimport { parseSGS, SGSCachedData } from \"../../../parseSGS\";\n\nlet cachedData: Promise<SGSCachedData> | null = null;\nexport async function sgsDataFTO() {\n return (cachedData ??= uncachedSGSDataFTO());\n}\n\n// TODO: Reduce info.\nasync function uncachedSGSDataFTO(): Promise<SGSCachedData> {\n return parseSGS(\n await puzzles[\"fto\"].kpuzzle(),\n `SubgroupSizes 24 12 11 12 12 11 10 9 11 8 10 9 7 8 10 10 6 9 8 5 7 6 5 4 4 8 7 3 6 6 360\n\nAlg T\nAlg B\nAlg B T\nAlg B'\nAlg B' T\nAlg U\nAlg U T\nAlg U'\nAlg U' T\nAlg B BL\nAlg B BL T\nAlg B BL'\nAlg B BL' T\nAlg B' BR\nAlg B' BR T\nAlg B' BR'\nAlg B' BR' T\nAlg U R'\nAlg U R' T\nAlg U' L\nAlg U' L T\nAlg B BL' D\nAlg B BL' D T\n\nAlg R\nAlg R'\nAlg R D\nAlg R D'\nAlg R BR\nAlg R BR'\nAlg R' F\nAlg R' L\nAlg R' L'\nAlg B L B'\nAlg U L' U'\n\nAlg B U B'\nAlg B U' B'\nAlg B R B'\nAlg B R' B'\nAlg B' U' B\nAlg B' U B L\nAlg B' U B L'\nAlg B' U' B BL'\nAlg B U' B' BR\nAlg B' R' B F\n\nAlg BR\nAlg BR'\nAlg BR BL\nAlg BR BL'\nAlg BR' F\nAlg BR' F'\nAlg BR' D\nAlg B BR B'\nAlg U F U'\nAlg BR BL L\nAlg BR' D BR'\n\nAlg B' BL B\nAlg B' BL' B\nAlg BR D' BR'\nAlg B' BL B D'\nAlg B' BL B BL\nAlg B' BL B BL'\nAlg B' BL L B\nAlg B' BL' B F'\nAlg B' BL' B L'\nAlg B' BL' B BL'\nAlg B' BL' L BL' B\n\nAlg R' BR R\nAlg R' BR' R\nAlg BR BL' D BR\nAlg R' BR D R\nAlg R' BR D' R\nAlg R' BR R BL\nAlg B' D' BL D B\nAlg BR B D' B' BR'\nAlg BR BL' D BR L'\nAlg BR BL' D BL BR\n\nAlg U BR U'\nAlg U BR' U'\nAlg U' R U\nAlg U' R' U\nAlg U BR B' U'\nAlg U BR' U' D\nAlg U BR' U' D'\nAlg U' R F' U\nAlg U' R' U L'\n\nAlg U B U'\nAlg U B' U'\nAlg U B U' L\nAlg U B U' L'\nAlg U B' U' BL'\nAlg U B U' L F\nAlg U B U' L F'\nAlg U B' U' BL' D'\n\nAlg B BL' L BL B'\nAlg B BL' L' BL B'\nAlg U B' D B U'\nAlg U B' D' B U'\nAlg U R D R' U'\nAlg U R D' R' U'\nAlg R' F L F' R\nAlg R' F L' F' R\nAlg B L' B F' D B\nAlg U B' D' B U' D\n\nAlg F\nAlg F'\nAlg F D\nAlg F D'\nAlg F' L\nAlg F' L'\nAlg F D' BL\n\nAlg F BL F'\nAlg F BL' F'\nAlg BR' BL BR\nAlg BR' BL' BR\nAlg F BR F' BR'\nAlg F BL F' BL'\nAlg F BL' F' L\nAlg F BL' L' F'\nAlg F BR' BL BR F'\n\nAlg F' BL F\nAlg F' BL' F\nAlg U BL U'\nAlg U BL' U'\nAlg F U' F' U\nAlg F' BL F D'\nAlg F' BL F BL'\nAlg F' BL D F\n\nAlg L\nAlg L'\nAlg L BL\nAlg L BL'\nAlg F' D F\nAlg L BL D\n\nAlg L' BL L\nAlg L' BL' L\nAlg L' BL D L\nAlg L' BL D' L\nAlg L' BL L BL'\nAlg L' BL D' L BL\nAlg L' BL D' L BL'\n\nAlg L D L'\nAlg L D' L'\nAlg R' D R\nAlg R' D' R\nAlg L D L' D'\nAlg L R L' R'\nAlg L' B' L B\nAlg R' D R BL\nAlg L BL' L' BL L'\n\nAlg U L' D L U'\nAlg U B D B' U'\nAlg U L' D' L U'\nAlg U B D' B' U'\nAlg R' D' BL' D R\nAlg U B D' B' U' D\nAlg U B' L B L' U'\nAlg U B D B' U' BL'\nAlg U B D' B' L' D' L U'\n\nAlg F L F'\nAlg F L' F'\nAlg F L F' D\nAlg F L F' D'\nAlg F L' F' BL'\n\nAlg L BL' D BL L'\nAlg L BL' D' BL L'\nAlg F D L D' L' F'\nAlg F L D L' D' F'\nAlg F L' B' L B F'\nAlg F' D' R' D R F\nAlg F D L D' L' F' BL'\nAlg F' R' B' R' B R' F\n\nAlg B D B'\nAlg B D' B'\nAlg L' D L\nAlg L' D' L\nAlg B D B' D'\nAlg B' L B L'\nAlg B D B' D' BL\n\nAlg D\nAlg D'\nAlg D BL\nAlg D BL'\n\nAlg D BL' D BL D'\nAlg D BL' D' BL D'\nAlg B D R D' R' B'\nAlg B R D R' D' B'\nAlg D BL' D BL D' BL\nAlg D BL' D BL D' BL'\n\nAlg D BL D BL' D'\nAlg D BL D' BL' D'\nAlg B' BL' B BR D' BR'\nAlg D BL D BL' D' BL\nAlg D BL D BL' D' BL'\n\nAlg D' BL D\nAlg D' BL' D\nAlg D' BL D BL\nAlg D' BL D BL'\n\nAlg B D' B' BL B D B'\nAlg B D' B' BL' B D B'\nAlg D' BL' D BL D' BL D\n\nAlg B R' B' BL B R B'\nAlg B R' B' BL' B R B'\nAlg L R L' BL' L R' L'\n\nAlg F BL' B' BL F' BL' B\nAlg F' R' F BL F' R F\nAlg F' R' F BL' F' R F\nAlg BR R BR' BL' BR R' BR'\nAlg F L' BL U BL' U' L F'\nAlg F' U' F D F' U F D'\nAlg F BL F' D F BL' F' BL D'\n\nAlg F D F U' F' U D' F'\nAlg F D F' BL F BL' D' F'\nAlg F U D BL' U' BL D' F'\nAlg F U' D F U F' D' F'\nAlg F' BR L F BR' F' L' F\nAlg U R BL' F BL F' R' U'\n\nAlg BL\nAlg BL'\n\nAlg F U BL U' BL' F'\nAlg F BL U BL' U' F'\nAlg U BL BR BL' BR' U'\nAlg BR F BL F' BL' BR'\nAlg F U' F' U BL' U BL U'\n\nAlg F U' F' D F U F' D'\nAlg B' U' F U B U' F' U\nAlg D F U' F' D' F U F'\nAlg BR' U BR D' BR' U' BR D\nAlg D' BR BL' F BL' F' BL BR' BL D\n\nAlg D BL D F' U' B L' BL' L R' BR' R L' BL L B' U F D\nAlg B D BR F' R' BR' R B' F D' BL D B BR' D' B'\nAlg L B' BR' L F BR L' B BR' L U F U' BR' F L BL BR'\nAlg L BL' D' BR' B R' U' R BR B' D BL' L'\nAlg B BR B' D' B D B F' R' B' R BR' B' BR F BR' BL\nAlg L' BL D L' D' L' D L' U' R' F' R U D'\nAlg U' L BL L U' D R' BL B' BL F' BL' B R BL' U D' L U\nAlg L BL BR' L U' D R' F' R BL' U BL D' BR L\nAlg D L' R F' R' L BL' BR BL' B' BL B BR' F BL' F' D'\nAlg B BL B BR' L R' U' R BR L' B\nAlg L B' R' BR B F BL D' BL' D BL' B' F' BR' R U B L'\nAlg D' L' BL F' D' BL' D B F' R' BR R B' F' BL' L D\nAlg B D' R D' R' BL BR' B BR' B' BL' D' BR B R' B' R B' BL' D'\nAlg U' L R' F U L' BL' L B BL' B' BL L U' L' F' R L' U\nAlg F' D BL' BR' BL' BR B' U' F L F' U B D F L U BL' U' L'\nAlg L' U BR' U D R' BL F R BL' U D' BR' L' BL' BR' L'\nAlg U' L' U' D R' BL B' BL F BL' B R BL' U D' L' BL' L' U\nAlg D F BL L' BL' B L' B' L' B L' B' L' BL L BL' F' D'\nAlg F' BR' B BL' BR BL B' F L' F' L B BR' B' BR L' F L BL'\nAlg F' L F' L U' D R' F R U D' L' BL' F L' F\nAlg F U' F' BR F' R' BR' U F' L' BL F' D' BL'\nAlg B BR' U R BR' R' BR U' B' BR\nAlg F' BR' B BR' R BR' BL' BR R' BR BL B' BR F\nAlg L' U BL B' U' BL U BL' B BR BL' BR' U' L\nAlg BR BL' BR' BL L' BL BR BL' BR' L\nAlg U BR' U' BR L' BL BR BL' BR' L\nAlg U' L F BL' F' BL F' BR F BR' L' U\nAlg F L F' BL D F' D' F BL' L'\nAlg U BR' U BR L BL BR BL' BR' L' U\nAlg F BR R BL' F' BL' F R' BL BR' BL F'\nAlg D BL D B U BR' D BR' L' U' BR' U BR L D' BR U' B' D\nAlg U BL' U' BL U BL D L' D BR D' L D BR U BR U D\nAlg B' U F U' B' U F' BR' U' B L B' U BR U' B L' B BL\nAlg B U' B BL U' BL L U' D R' F' R U' D' L' BL' U B\nAlg B L R F D' BR' D F' R' BL' U' L U L' U BL L' B'\nAlg D BL D F' BR' F BL' D R' BR' R F D' BL F' BR D\nAlg L' D F' R' U BR L BL B' BL B BL' BR' L' U' R D' L\nAlg F BL' U D L' U' BR R F' R' BR' U L D BL U' D BL F'\nAlg BR' BL' U' L' BL D F' L' F' L F L U L' D' BR L BL\nAlg B' L' BL U D R' F' R U D' L' BL L U BL' L B\nAlg B BL' L U B' L BL' L B' U' B' L' D L' U' B L' B' D'\nAlg B' R' L U L' R BR BL' B BR' B' BL B' BL' B'\nAlg F L R BL B' U' B R' BL' L' BL F' BL BR' BL L BL' BR L'\nAlg B' U' BL L U D R' F R U D' L' BL' U BL' B' U B'\nAlg U BR BL' BR' D' B D' F' D B' D' F BL' U' BL' F' BL' F D'\nAlg D' BL' D L BL L' D' BL D F' D F D' BL' D' BL D\nAlg B' BL' B' BL L' B' BL' F' D F L F' D' F BL' L BL' B L B\nAlg F BL' U D' BL' D' L' U' BR R F R' BR' U L U' D' BL F'\nAlg U' D' B D F' D' BR' D' BR D BR B' BL' D F BL U BL'\nAlg B BL BR D' BR L' R F R' BR' L D BL' BR' BL' B'\nAlg L' F L' U BR' U' BR L F' BR' L U BR U'\nAlg F' BL' D' BR' BL B' U' BL U B BL' BR D F\nAlg F' D' BR' U R' U BL U' R U' BL' BR D F\nAlg F U' BR F' U' BL' B U F BR' R F' U BL L\nAlg B' BL' U' BL U B BL' B BL BR BL' BR' B' BL\nAlg D' F' U BL U' L F U' F' U L' BL' F D\nAlg F' BL' D' BR' BL BR' F' BR U' B' BR' U R' BR' F'\nAlg B' U' B BL' B U' B BL' L U' L BL' L B\nAlg F' D' F U' F U F' BL F' BL' D F\nAlg F' D BR F' R F R' BR' F D'\nAlg D BL D B BR' D L' BL' L' BL' BR' BL L BL L D' BR B' D\nAlg B L BL L' BL' L' D F' R' BR R D' F L' BL' L' B'\nAlg B BL' F' BL BR D' BR' F D' B' D L F' BL' F L D L D' BL\nAlg B D' BR' D' BR' F D' BL' D' BL D BL F' D BR D' B'\nAlg B D' B U B' D B F' BR' F L' F BR F' L U' B BL\nAlg L BL' B' U BL L' BL L U L' BL' L BL' U' B BL' L'\nAlg U D F' D BR BL' BR' BL B D' F D B' D BR BL BR' U'\nAlg F' D BR L' U' R F' R' U BR' L D BR' BL BR D F\nAlg BR' L BL L' BL' BR BL' F BL' L R BL B' U B R' BL' L' F'\nAlg D BL BR D B F' R' U' BR' U R B' F D' BR' D'\nAlg D' B BR' D L' BL' L' BL' BR BL L BL L D' BR B' D' BL' D'\nAlg B U' R B' BL' B R' U' B BL' B' U' BL B' U' L U L'\nAlg B D' B' D' BR' BL BR D' B' L B BR' U B U' BL' BR BL L' BL'\nAlg B D BR' D' F BL' D' BL' D BL D F' BR D BR D B'\nAlg D' B D F' D' BR' D' BR D BR BL BR' BL' BR B' BL' D F\nAlg L BL B' U BL L' BL L U' L' BL' L BL' U' B BL L'\nAlg B' U B' D' B U' B' D BL' U BL' U' BL' B' U BL' U'\nAlg D' BR' B' L' U L' B' U B L U' L B BR D BL\nAlg L' D L' F U' F' L D' L' F U BR F' L F BR' F' L BL'\nAlg D BR D B F' R' U' BR U R B' F D' BR' BL' D'\nAlg BR BL D F BR' BL BR BL' BR F' BR' D' BL' BR'\nAlg BR' U' L' BL F' BL' F L BL' U BL BR\nAlg D' BR' B' U BR U' BL U' BL' U BR' B BR D\nAlg F U BR' U R U' BR B U' F' BL U' L' U BL' B'\nAlg B U' L F BR F' L F' BR' F L U B'\nAlg BR BL F BL' L F' BR' BL' F BL L' BL' F' BL\nAlg U' BR' L BL' BR L U' BR' U L' BL L' U' BR U'\nAlg L' F L' U BR' U' BR L F' L BL' BR BL BR'\nAlg F' D' BR' BL U R' U BL' U' R U' BR D F\nAlg F' BR' B F' U F BR U' BR' B' F BL BR BL'\nAlg L B' U' R' BR B F BL D' BL D BL' B' F' BR' R B L'\nAlg B F BL B L F BR' R' BL U' R BL' BR' F' L' F' BR' B\nAlg U BR F' D F BR' U' L' BL L' BL' L U L B' BL L' B U'\nAlg F' L B F BL B R U' R' B' BL' B' F' L BL L F\nAlg D BL D B BR' D BR' D' BR D BR BL BR' BL' D' B' D\nAlg D' BR' BL B BR B' BL' D BL D' B' BL B BR' BL' BR D\nAlg D F' U BR U' L U' BR' U L' D B D' F D B' D BL\nAlg L B BL' B L F R U' R' F' L' B' BL B' L' BL'\nAlg B D' B U B' D F' BR F L' F BR' F' L B U' B BL\nAlg B' BL L B' L' B' L B' BR' R' U' R BR L'\nAlg D' F' U' B L' BL' L R' BR R L' BL L B' U F D' BL' D'\nAlg B' F' BL' B' F U D' R BR R' BL U' BL' D B'\nAlg F' BL' D BL F BL' D' B' U' B D F' D' B' F U B\nAlg F' L' BL' L' B F BL B R U R' B' BL' B' F' L' F\nAlg L' BL U' D F D' BL' D BL F' BL' D' BL D F' U D' BL L\nAlg B' BR L R' U R BR F L' B' BL' B L F' BR L' B\nAlg B' L B' BR' B L' B' D F' U F D' F U' F' BR B' BL'\nAlg B' BR D' BL' BR' BL B L' R' L' R BR L D L BL BR' B BL\nAlg L' D F' L F L' F D' L' BL' L' D BL' BR' BL' BR BL' D'\nAlg B' F BR F BR L R' BL U R BL' BR L' B' BL' B' F\nAlg F L' F' BR' B BR' F' BR B' BR' F' L F' BR'\nAlg BR' B' BR BL' D' BR D BR' BL B\nAlg L' F L' U BR' U' L U' BR U F' L\nAlg F U' BR' R U' BR BL BR' U' BL' U' R' F' BR U\nAlg B' BR' R' U' BL D' BL U BL' D R BL' BR B\nAlg D BR' U' L BL' F' BL F L' BL U BL' BR D'\nAlg F' BL' D' F BR' BL BR BL' BR F' BR' D BL F\nAlg F' BR' BL' BR D' F' BR F BR' D BL F\nAlg F' BR R' BR BL' BR' R BR' BL F\nAlg B BR F' BR' B' F BL F BL' F'\nAlg B D' B U B' D BL' F R' F BL F' R B F' U' B BL\nAlg L BL' B' U L U L BL L B' BL B' U' BL' U' B' L' BL\nAlg L' BL' U' D F D' BL' D BL F BL' D' BL D F' U D' BL' L\nAlg F' L F' BL' D' BR' B R' U' R BR B' D BL' F L' F\nAlg U D' BR' D BR' U' L U BR L' D' BR D L U' L' BL\nAlg B' BR' B' BL B L F' BR' R' U' R BR F BR L' B\nAlg U' F' D BR' F' BR D L D L' U D' B D' B' F D' BL F\nAlg B F BL B F' L F BR' R' BL U' R BL' BR' F' BR' L' B\nAlg F' D' BL B BR' BL BR BL' BR' D' BR' D BR D F D' B' D\nAlg B' BR' B' BL B L F BR' R' U' R BR F' BR L' B\nAlg L' F BR L' R' BR BL' BR' R BR' BL B' L F' L' B L' BL'\nAlg B' U' BL' U D' BL' D F L' R U R' F' L U' BL U B\nAlg D' B D BL BR BL' BR' D' BR' D BR D' BR B' D' BL' D'\nAlg B' BR' L F' BR' R' U R BR F L' B' BL' B BR B\nAlg L U L' D' BR' D L U' L' U D' BR D BR BL BR' BL' U' BL'\nAlg F' L F' BL D' B BR' R' U R B' BR D BL F L' F\nAlg B' L B' BR' B L' F' R F' BL F R' F BL' B' BR B' BL'\nAlg F' L BL' BR' R' BL U R BR B L' B L B L' F BL' B\nAlg L' F D' BR U' BR' D BR' U BR L' B' L F' L' B L' BL'\nAlg B' BR' L F BR' R' U R BR F' L' B' BL' B BR B\nAlg L F' D' F BR' BL BR BL' BR F' BR' D F L'\nAlg F' BL' D F BL' F' BL D' BR' BL BR F\nAlg B' BR' R' BL D' BL U' BL' D BL' U R BR B\nAlg B' L BL' BR BL L' B' F BL F' BL' B BR' B\nAlg F U' BR' R BR F' U BL L U BL' B U'\nAlg B' BR B' BL F BL' B F' L BL' BR' BL L' B\nAlg U' L BL' U' R U' BL' U R' U BL' L' U\nAlg F U' BR' R' F' BR' F BL BR R BL' F' BR U\nAlg B U' L' F' BR F L' F BR' F' L' U B'\nAlg F' BR' B' F BR' BL' BR F BL B F' BL BR BL'\nAlg B BL' U' L U BL' B' BL' B' L' BL U B' U' BL L BL L\nAlg B R' U' B U R B' BR F D' B' D BL F' BL' BR' BL\nAlg U BL U' B BL U BL U' BL D' B U B' D B U' B\nAlg B BL B BL' B BR B' BL BR' R' L U' L' R B\nAlg U' L BL' B BL B' L' F U B' R U R' U F' U B BL\nAlg F' BL' D' BR' L' B' L B BL BR BL' B' L' B L D BL F BL\nAlg L B' L' F U B' R BR B BR' R' BR BL' BR' BL B U' F' BL\nAlg D' F BL B BR' B BR B' BL' D BL D' B' F' D\nAlg B' L' BL F U F' L' U B U' L F U' F' BL' L BL' B BL B\nAlg D BL D B U F' R' BR' R F U' B' D\nAlg B BR B' D' BL BR D BR D B' BL' B D BR' BL' D' BL' D'\nAlg B' R BR B' BR' R' B U' F' L B L' BL' F BL U BL'\nAlg U BR BL' BR' D' B D' F' D B' BL' BR BL BR' D' F U' D'\nAlg U' D' BR' U' BR' D' L' D BR' D' L D' BL' U' BL' U BL U'\nAlg L' F' BR F' R F' R' L F' BR' D L BL' L' BL D' F BL'\nAlg B D BL' D B U R BR R' U' B' D' BL D' B' BL\nAlg B' U L' U B BL L' F' BL F D' B' U B D B' L B L'\nAlg L BL' B' U L F R U' R' F' U L F' L B L' F\nAlg L' D R' U BR L BL B' BL' B BL' BR' L' U' R F D' L\nAlg D' B U F' R' BR R F U' B' D' BL' D'\nAlg B D BL' B' U' BL L' D L D' BL' U B BL B' D'\nAlg B U' BL' U' F U' B U B' F' U BL U' B U' B\nAlg U BR' U L BL' L U' BR U BR' L' BL BR L' U\nAlg F' D' BR' BL B' U' BL' U B BL' BR D BL F\nAlg B' L' B' F BL' F' BL F' BR F BR' B L B\nAlg F' BL' D' BR F' BR' F D BR' BL BR F\nAlg F D' F' U' F' D' BR D F' D' BR' D' F' U\nAlg BR' BL' U' BL L U' F U F' L' U BR\nAlg F BR R U' BR B U BR' F BR BL' BR D BL F\nAlg F' BR' F U' BL L' U BL' B' F' BL' BR D' BL F\nAlg B' U L' B' U L' D F L F' D' L U' B L U' L B L'\nAlg B BL B L F BR' R' U' R BR F' L' B\nAlg B D' B BR' R' U' B' U R BR U' D' F L' F' U L' D' L\nAlg L U' L' U B BL' U B BL B' U R B' BL B R' U B'\nAlg D F' D BL U' R U' BL' U R' U B D' F D B' D BL\nAlg B BL U B BR' L R' F' U' F R BR L' B' U' B'\nAlg B' U' B F' D F D' B' U B D BL F' BL' D' BL F\nAlg B D BR B F' U' R' BR' R U B' F BR' D' BL B'\nAlg L B' F R BL' U' R' BL B F' L U BR' U' BL L U BR U'\nAlg F' L F' BL L U' D R' F' R U D' L' F L' F\nAlg L U L' F' BL' F L B BL' U BL' U' BL B' BL L U' L\nAlg B' L F BR' R' U R BR F' L' B' BL' B'\nAlg U BR' U' L' U' BR' F' BR F BR D R' F R U D' L' BL' L'\nAlg B L BL L F' D R' BR' R F D' L BL L BL' L' B'\nAlg F' BL' D F' D' B D' B' U' D L D BR' L' F BR D' F U\nAlg B U B BR' L R' F' U F R BR L' B' U' BL' B'\nAlg U B' L BL' B L' U' L' BL L BL' L U BR F' D' F BR' U'\nAlg B BL' D BR B F' U' R' BR R U B' F BR' D' B'\nAlg B BR B F BR' U BL' L R BR' R' L' F' U BR U BL B BL'\nAlg B' BR' L R' U R BR L' B' BL' B'\nAlg B' U BR' R L F' BR' F L' R' BR U' B' BR B'\nAlg F' BL' F' BR R U' BR B F BR BL' D F U BL'\nAlg F' BR' B' U BR' F BR' F' BR U' BR B BR F\nAlg BR' BL' U' BL L' F' BL F BL' L U BR\nAlg U' L BL U' R U' BL U R' U BL L' U\nAlg F BR' F' U' L F BR U F' U' L' BL U BL'\nAlg L' F U' BR' U L' U BR U' L F' L\nAlg F' BR' B' U' BR' U F BR B U' BL U BR BL'\nAlg F' BR' U BR D' BR U' BR' D F\nAlg F BL' BR R BL' F' BL F R' BL BR' F'\nAlg L BL' B BL' U BL U' BL B' L' F' BL F L U' L U L\nAlg B F BL B F' L F' BR' R' BL U' R BL' BR' F BR' L' B\nAlg F BL B' F' BR B' BR' B L F BL B' BR B BL' BR' F' L' B\nAlg B F D' BL U R BL' BR' R' U' D B F' BL B\nAlg L B' U B' BR B BR U' BR' B L' F BL' B F' BR' B' BL'\nAlg U' L R' F L U L' BL' B BL B' L' BL L U' F' R L' U\nAlg BR BL F BL' F' L' F' BR' L B BR B' L' F L B BR' B' BL\nAlg B' BR' L F L' B' BL B L F' BR' R' U' R BR' L' B\nAlg D L U' BR U L U' R BL' F' R' F BL F' BR' U L D BL D\nAlg B F BL B F BR' L R' BL U' R BL' BR' L' F BR' B\nAlg L B' L' U L' B' U L' D F L' F' D' L U' B L U' B\nAlg B' BR L F' BR R' BL U R BL' BR F L' B' F BL' B' F'\nAlg B' BL L B L' B' BL' L' U BL' U R' L' R U' BL U' L B\nAlg B U' D' F D B BL' B' U D' R BR R' U' F' U D B'\nAlg D F L F' L' F R L' BL B L B' BL' L R' F' L D'\nAlg L BL D' B BR' R' U R B' BR D BL L'\nAlg D F D' B' U' B U' D F' D' F U B' U B F' BL'\nAlg D' BR' BL BR B' BL' B D BL' D' BL B BR' B' BL' BR D\nAlg U BR' U' L U R' L R BR L' B' L' B L U' L' BL'\nAlg BR' L R' U R BR B L' B L B L' BL' B\nAlg B BR' B U BR' R L F' BR F L' R' BR U' B\nAlg F' L B' BR' B L BL' L' B' BR B L BL L F\nAlg D F U' F' U D' BR U' D' F U F' D BR'\nAlg B' BL' BR D' BR' D BL BR' B BR\nAlg B BL U' BR' L U BR' F' BL D BL BR F BR\nAlg L' U BR BL BR' B' BL U' BL' U B BL' U' L\nAlg U B' BL U' L' BL' U' F BR' R' BR U F'\nAlg D BR' BL U' BL' L F' BL' F BL L' U BR D'\nAlg BR L' BL BR' BL' L BL' BR BL BR'\nAlg F BL F' BL' B F' BR F BR' B'\nAlg D BR L' U' R F' R' U BR L BL B' BL B BL' BR D'\nAlg D' BL' D BL D F' D' F D' BL' D L BL' L' D' BL D\nAlg B F D' F' U' BL' B U B' BL F D B U' B' U B' F' BL\nAlg B U F' D' R BR' R' U' D B BL B' U F U' B'\nAlg B BL B L B BR' F BR B' BR' R' U' R F' BR L' B\nAlg B BL B L F' U' F' U F BR' R' U' R BR' F BR' L' B\nAlg B' U' B F' D F D' B' U B U' D BL' F' BL D' F U BL\nAlg L F' BR B' F' R BL' U' R' BL B F' BR L BL BR L\nAlg D F' D' BL F' D' F R BL B' L U L' B R' F' BL' D F\nAlg B BL BR BL D' BR L' R F' R' BR' L D BR' BL' B'\nAlg B' L B' BR' B L' BL' U BL U' B' BR B' U BL' U'\nAlg D' B BR' F BL' F' D BR D' BL F' BR B' F D' BL' D'\nAlg B D F' L' R F D BR' D' F' R BR' L D B' BL' D' F D'\nAlg D L BL' F' R U R' B F' L BL' L' B' F' BL L' D'\nAlg B' BR' L F R' U R BR B BR' F' BR B' L' B' BL' B'\nAlg D L F BL F L BL' L D' BL' D' F' D' F' L BL D' BL'\nAlg D F BL F' BR B' BL' B BL BR' BL L' R F R' L D'\nAlg L BL' B' L B L B' L F R U R' B F'\nAlg F' D' BL F R B' L U' L' B R' BL' F' D F BL' D F D'\nAlg B' L' BL U' D' L' BL' L U' D R' F R U' BL' L B\nAlg L' F L' BL U' BL' U L F' L U' BL U BL'\nAlg D' F' BL L U' F U F' L' U BL' U' F D\nAlg B' U F D F' U F D' F U B U' F U\nAlg U B' BR' U R' U' R BR U' B\nAlg F' BL' D F BL F' BR F' BR' F BL' D' BL F\nAlg F' BR' BL' BR D BL' F BL F' D' BL F\nAlg U' F R F' BL' F R' F BL F U\nAlg F' BR F BR' L BL' BR' BL BR L'\nAlg F U' B F U' BR U BR' U F' U' B' U F'\nAlg D F' BR R F' R' F BR' D' F\nAlg B D' B U B' D B U' B BR BL BR' D BL BR BL BR' BL D'\nAlg B' U' L' D' F D' L' F' L D F' D L U B BL'\nAlg D L' F R L' BL B L' B' BL' L R' F' L F L' F' D'\nAlg D L' D' BL D F' D F D' BL' L BL D'\nAlg D' B R U' B' F' BL' L BL L' BL B F U R' BR' B' D\nAlg D L BL' F L BL L' B' F R U' R' B F BL L' D'\nAlg D F' BL F BL U BL F' D B D' F D B' D BR BL BR' U'\nAlg B F' BL B F' BR' F' L F R' U' R BL' BR BL F' L' B\nAlg L F BR B' D BL D' R U' R' D BL' D' B BR' F' L BL L\nAlg B F BL B F' BR' L R' U' R BL' BR BL L' B\nAlg D' B U BR' D BR' L' U' BR U BR L D' BR U' B' D' BL' D'\nAlg F' D' BR' BL' BR D' BR L' U' R F R' U BR' L D' F\nAlg D F U D' BL U' B D' F BR F' D' F' D BR' D B' BL\nAlg B U' D' F D BL' D' BR D' BR' D BL B' BL' B F' U D B'\nAlg L' BL' L' F BR B' D BL D' R U R' D BL' D' B BR' F' L'\nAlg B U F' U' B BL' B' U D' R BR R' D F U' B'\nAlg B L BL' U' L U' L' U R BL F D' BR D F' R' L' B'\nAlg B' L B' BR' B L' F' BL F BL' B' BR B' F U' F' U BL'\nAlg D' B BR R U' B' F' BL' L BL' L' BL B F U R' B' D\nAlg B BL' U' B BL' B D B D' B D B D' BL B' U BL B'\nAlg U BR' U' BR L' F BR' L' U BR U' L F' L\nAlg L' U BR BL BR' B U BR' U' BR B' BL' U' L\nAlg BR BL D BR' BL' L BL' BR BL L' BL D' BL' BR'\nAlg F' BL' D' BR' D BL BR' B U BR U' B' BR F\nAlg F U' F' D F' U' B' U F' U' B U' F' D'\nAlg B' U BR' R' U R U' BR B U'\nAlg L U BL U' BL' L' BL L' F' BL' F BL L BL'\nAlg U B' BL' BR' U F' BR' D' F BR' U BL' L' BL'\nAlg F BL' L' F' BL D' F' BR U' R' F' U F' BR'\nAlg U B U' BL L U' L' U BL' B'\nAlg U BL U' B BR' B U BL' U' BL L B' BR B L' B\nAlg B BL B L F' U' F U F BR' R' U' R BR' F' BR' L' B\nAlg B BR D L' D' F' D F D' F' D' F D' BR' L D' B D B\nAlg F' L B' L' F L' U' F R U R' F' L' U' B BL L'\nAlg B' L' F U F L' F R U' R' U L F R U R' U B F' BL\nAlg B U F' D' F' U R BR' R' U' F D B BL B' F U' B'\nAlg F BL U BL' U' F' BL L U' L D BR L' U L U' BR' U D' L\nAlg B U' D' B' F BL B BL' D' BR D BR' D BL D' F' U D B'\nAlg B BL' D' B' D B BL D BR' BL BR' R D R' BR BL' BR D' B'\nAlg B F U' F' D' F' U' R BL' BR' R' BL U' F D B BL B\nAlg D BR' BL B' BL' B BL' BR' L' U' R F R' U BR' L D'\nAlg B' F' U' F' BL' D' B BR' R' U R B' BR D F U B F\nAlg B' D' B' D BR L' D F' D F D F' D' F D L D' BR' B'\nAlg D' B F D BL' D' BL B BR' B' BR B' BL' F' D\nAlg B D B' F BL L' BL' F' L BL L' BL' BR L R L' R' BR' L' D'\nAlg B U B F' BL' B' D' F' U R BR R' U' F D F U' B'\nAlg BR BL' L' F' BR U F' U' BR L' B' BR' L F' BR L' B L'\nAlg D BL' L' BL D F' D' F D' BL' D L D'\nAlg F' BL' B F U' B U B' D' F' BL' B U' B' BL U F D B'\nAlg B' F' L BL' BR' R' BL U R BR L' B' F BL' B'\nAlg BR BL' BR' BL L' F L' BL' BR BL BR' L F' L\nAlg B BL BR' F U' L F U BR' F BL D BR' BL\nAlg B' BL' B' U BR' U' BR BL' BR BL BR' B BL B\nAlg BR' U' L F U' F' U L' BL' U BL BR\nAlg B U BR R' BR U' B' BR U' B' U BR' R' BR\nAlg B BR BL L BL BR' BL' L U' BL' U BL L BL' B'\nAlg F' BR' B BL' BR' R BR' BL BR R' BR B' BR F\nAlg F' BR' B U BR' U' B' BR BL' D' BR D BL F\nAlg D' F' BR U' R' F' U F' BR' F BL' L' F' BL\nAlg B BL U' L U L' BL' U B' U'\nAlg L' F' R B F' BR L' D' F' D BR' L B' F R' F BL L\nAlg D F BL L' BL' B L B' L B L B' L BL L BL' F' D'\nAlg B BL B BR' L R' U' R BR L' B U BR' U' BR BL' BR BL BR'\nAlg B' F R U' R' F' L' B L' B' L' B BL L'\nAlg B' L' F D R' F' L' U L F R' U D' L' B BL L F' L\nAlg D' L' BL F R' BR' R B' F D' BL D B F BL' L D\nAlg B' BR' R' U' BL' U' L R' F R F' L' R U' BL BR B BL\nAlg BR L BL BR L U' D R' BL F' R BL' U' D' BR U' L\nAlg BR L B' L F R F U F' U' R' L' B L F' BR' L BL\nAlg B F U D' R BL' BR' R' BL U' D B F' BL B\nAlg L' BL L' D B D' BL' B' D' L R' D R BL' U' L U BL'\nAlg L' D BL' U' R' BL F R U D' BR L' BL' BR' L'\nAlg U BR' U' L' BL' U BR U' L' B' F R BL' U R' BL B F' L'\nAlg BR L' BL' L' B' F R BL' U R' BL B F BR F BR L'\nAlg B' F' L F BR BL B' BR' B BL' F' L' B' BR B BR' B F BL'\nAlg B D BR B' D' BL' D B F' R' BR R F BR' D' B'\nAlg D BL' L' BL' L BL L' BL F' BL' L' F L BL F BL' L D'\nAlg U' D R' F R U L D' L D L D' BL' L\nAlg U D' BR D' L' D R F BR F' BR' R' BR' D' L U' D' BL'\nAlg B' F' BR' L R' BL U R BL' BR L' B' F BL' B'\nAlg L' F BL' F' BL F' BR F BR' L\nAlg L BL F' D F D' BL' F L' F'\nAlg F' D' BR U BR' D BR' U' BR F\nAlg BR' L BL' BR BL BR L' F' BR' F\nAlg B BR F BR' B' BR F' R' BR' BL' BR R BR' BL\nAlg BR' B U BR' R BR R' U' BR B'\nAlg F' BL' BR R' BR BL BR' R BR' F\nAlg BR L' BL BR' BL' BR' L U BR U'\nAlg U BR' U' BR BL' BR BL BR'\n`,\n );\n}\n", "/* Redi cube scramble generator */\n// From https://torchlight.github.io/rediscrambler.js\n// Added to `cubing.js` under the GPL license by permission from the author (@torchlight/xyzzy).\n\n\"use strict\";\n\nimport { Alg } from \"../../alg\";\nimport { randomUIntBelowFactory } from \"../random-uint-below\";\n\nfunction counter(A) {\n let counts = [];\n for (let a of A) {\n counts[a] = (counts[a] || 0) + 1;\n }\n return counts;\n}\n\n/* Combinatoric functions */\n\nfunction factorial(n) {\n if (n < 2) {\n return n;\n }\n let f = 1;\n for (let i = 2; i <= n; i++) {\n f *= i;\n }\n return f;\n}\n\nfunction C(n, k) {\n if (k < 0 || k > n) {\n return 0;\n }\n if (k === 0 || k === n) {\n return 1;\n }\n let c = 1;\n for (let i = 0; i < k; i++) {\n c = ((c * (n - i)) / (i + 1)) | 0;\n }\n return c;\n}\n\nfunction permutation_to_index(perm) {\n perm = perm.slice();\n let n = perm.length;\n let f = factorial(n - 1);\n let ind = 0;\n while (n > 1) {\n n--;\n // invariant: f === factorial(n)\n // also, perm stores meaningful values up to perm[n]\n let e = perm[0];\n ind += e * f;\n for (let i = 0; i < n; i++) {\n let x = perm[i + 1];\n perm[i] = x - (x > e);\n }\n f /= n;\n }\n return ind;\n}\n\nfunction index_to_permutation(ind, n) {\n let perm = [];\n let f = factorial(n - 1);\n for (let i = 0; i < n; i++) {\n perm[i] = (ind / f) | 0;\n ind %= f;\n f /= n - 1 - i;\n }\n // could probably use some kind of binary tree to make this linearithmic, but I am hella lazy.\n for (let i = n - 2; i >= 0; i--) {\n for (let j = i + 1; j < n; j++) {\n perm[j] += +(perm[j] >= perm[i]);\n }\n }\n return perm;\n}\n\nfunction permutation_parity(A) {\n let n = A.length;\n let parity = 0;\n // again, there is a linearithmic algorithm to count inversions, but >lazy\n for (let i = 0; i < n - 1; i++) {\n for (let j = i; j < n; j++) {\n if (A[i] > A[j]) {\n parity ^= 1;\n }\n }\n }\n return parity;\n}\n\nfunction index_to_evenpermutation(ind, n) {\n let perm = [];\n let f = factorial(n - 1) / 2;\n let parity = 0;\n for (let i = 0; i < n - 1; i++) {\n perm[i] = (ind / f) | 0;\n ind %= f;\n f /= n - 1 - i;\n }\n perm[n - 1] = 0;\n for (let i = n - 2; i >= 0; i--) {\n for (let j = i + 1; j < n; j++) {\n if (perm[j] >= perm[i]) {\n perm[j]++;\n } else {\n parity ^= 1;\n }\n }\n }\n if (parity === 1) {\n [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];\n }\n return perm;\n}\n\nfunction evenpermutation_to_index(perm) {\n return permutation_to_index(perm) >> 1;\n}\n\nfunction comb_to_index(l) {\n let bits = l.length;\n let ones = 0;\n for (let i = 0; i < bits; i++) {\n ones += +(l[i] === 1);\n }\n let zeros = bits - ones;\n if (zeros === 0 || ones === 0 || bits === 1) {\n return 0;\n }\n let b = C(bits - 1, ones);\n let ind = 0;\n for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {\n bits--;\n if (l[i] === 0) {\n b = (b * --zeros) / bits;\n } else {\n // l[i] === 1\n ind += b;\n b = (b * ones--) / bits;\n }\n }\n return ind;\n}\n\nfunction index_to_comb(ind, ones, bits) {\n let zeros = bits - ones;\n let b = C(bits - 1, ones);\n let l = [];\n let n = bits - 1;\n for (let i = 0; i < n; i++) {\n bits--;\n if (ind < b) {\n l.push(0);\n b = (b * --zeros) / bits;\n } else {\n l.push(1);\n ind -= b;\n b = (b * ones--) / bits;\n }\n }\n l.push(ones);\n return l;\n}\n\nfunction compose(A, B) {\n let C = [];\n for (let i = 0; i < B.length; i++) {\n C[i] = A[B[i]];\n }\n return C;\n}\n\nfunction permutation_from_cycle(cycle, n) {\n let perm = [];\n for (let i = 0; i < n; i++) {\n perm[i] = i;\n }\n for (let i = 0; i < cycle.length; i++) {\n perm[cycle[i]] = cycle[(i + 1) % cycle.length];\n }\n return perm;\n}\n\nfunction unsparsify_list(d, n) {\n let l = Array(n).fill(0);\n for (let k in d) {\n l[k] = d[k];\n }\n return l;\n}\n\nfunction compose_state(state1, state2) {\n let o = Array(8).fill(0);\n for (let i = 0; i < 8; i++) {\n o[i] = (state1[1][i] + state2[1][i]) % 3;\n }\n return [compose(state1[0], state2[0]), o];\n}\n\nlet move_UL = [\n permutation_from_cycle([0, 1, 4], 12),\n unsparsify_list({ 0: 2 }, 8),\n];\nlet move_U = [\n permutation_from_cycle([1, 2, 5], 12),\n unsparsify_list({ 1: 2 }, 8),\n];\nlet move_UR = [\n permutation_from_cycle([2, 3, 6], 12),\n unsparsify_list({ 2: 2 }, 8),\n];\nlet move_F = [\n permutation_from_cycle([3, 0, 7], 12),\n unsparsify_list({ 3: 2 }, 8),\n];\nlet move_L = [\n permutation_from_cycle([9, 8, 4], 12),\n unsparsify_list({ 4: 2 }, 8),\n];\nlet move_B = [\n permutation_from_cycle([10, 9, 5], 12),\n unsparsify_list({ 5: 2 }, 8),\n];\nlet move_R = [\n permutation_from_cycle([11, 10, 6], 12),\n unsparsify_list({ 6: 2 }, 8),\n];\nlet move_D = [\n permutation_from_cycle([8, 11, 7], 12),\n unsparsify_list({ 7: 2 }, 8),\n];\n\nlet solved = [index_to_permutation(0, 12), Array(8).fill(0)];\n\nlet moves = [move_UL, move_U, move_UR, move_F, move_L, move_B, move_R, move_D];\nlet move_names = [\"UL\", \"U\", \"UR\", \"F\", \"L\", \"B\", \"R\", \"D\"];\nlet tetrad = [0, 1, 0, 1, 1, 0, 1, 0];\n\nfunction apply_move_sequence(state, move_sequence) {\n for (let [m, r] of move_sequence) {\n for (let i = 0; i < r; i++) {\n state = compose_state(state, moves[m]);\n }\n }\n return state;\n}\n\nfunction stringify_move_sequence(move_sequence) {\n let suffixes = [\"0\", \"\", \"'\"];\n let s = move_sequence.map(([m, r]) => move_names[m] + suffixes[r]);\n return s.join(\" \");\n}\n\nfunction print_move_sequence(move_sequence) {\n console.log(stringify_move_sequence(move_sequence));\n}\n\nfunction generate_random_state(randomUintBelow) {\n let p = index_to_evenpermutation(\n Math.floor(randomUintBelow(factorial(12)) / 2),\n 12,\n );\n let o = Array(8);\n for (let i = 0; i < 8; i++) {\n o[i] = randomUintBelow(3);\n }\n return [p, o];\n}\n\nfunction generate_random_state_scramble(randomUintBelow) {\n return solve(generate_random_state(randomUintBelow));\n}\n\nfunction generate_scramble_sequence() {\n return stringify_move_sequence(generate_random_state_scramble());\n}\n\nfunction solve(state) {\n let phase1_indices = index_phase1(state);\n let phase1_mtables = [\n generate_phase1_edge_mtable(),\n generate_phase1_separate_mtable(),\n ];\n let phase1_ptables = [\n generate_phase1_edge_ptable(),\n generate_phase1_separate_ptable(),\n ];\n let phase2_mtables = [\n generate_phase2_edge_mtable(),\n generate_phase2_corner_mtable(),\n ];\n let phase2_ptables = [\n generate_phase2_edge_ptable(),\n generate_phase1_corner_ptable(),\n ];\n\n let phase1gen = ida_solve_gen(phase1_indices, phase1_mtables, phase1_ptables);\n let best = undefined;\n let intermediate_states = new Set();\n let start_time = +new Date();\n for (let i = 0; i < 25; i++) {\n let { value: sol1, done } = phase1gen.next();\n let new_state = state;\n for (let [m, r] of sol1) {\n for (let i = 0; i < r; i++) {\n new_state = compose_state(new_state, moves[m]);\n }\n }\n if (intermediate_states.has(new_state.toString())) {\n // console.log(\"skip\");\n continue;\n } else {\n intermediate_states.add(new_state.toString());\n }\n let edge_ind = evenpermutation_to_index(new_state[0].slice(0, 8));\n let corner_ind = 0;\n for (let i = 0; i < 4; i++) {\n corner_ind += new_state[1][i] * 3 ** i;\n }\n let phase2_indices = [edge_ind, corner_ind];\n //let sol2 = [];\n let moves_left = best ? best.length - sol1.length - 1 : 999999;\n let sol2 = ida_solve(\n phase2_indices,\n phase2_mtables,\n phase2_ptables,\n moves_left,\n );\n if (sol2 === undefined) {\n // console.log(\"prune\");\n continue;\n }\n // console.log(\n // `to ${new_state} in ${sol1.length} moves; total move count ${\n // sol1.length + sol2.length\n // }`,\n // );\n if (best === undefined || best.length > sol1.length + sol2.length) {\n best = sol1.concat(sol2);\n }\n // bail if we've spent too much time\n if (new Date() - start_time > 300) {\n break;\n }\n }\n return best;\n}\n\nfunction index_phase1(state) {\n let edge_ind = 0;\n for (let i = 0; i < 4; i++) {\n edge_ind += state[0].indexOf(i + 8) * 12 ** i;\n }\n let corner_ind = 0;\n for (let i = 0; i < 4; i++) {\n corner_ind += state[1][i + 4] * 3 ** i;\n }\n let filtered = state[0].map((x) => Math.max(-1, x - 8));\n let separate_ind =\n comb_to_index(filtered.map((x) => +(x >= 0))) * 2 +\n permutation_parity(filtered.filter((x) => x >= 0));\n return [edge_ind, corner_ind + 81 * separate_ind];\n}\n\nlet tables = {};\n\nfunction generate_phase1_corner_mtable() {\n if (tables.phase1cm) {\n return tables.phase1cm;\n }\n let mtable = [];\n for (let i = 0; i < 81; i++) {\n mtable[i] = Array(8);\n let o = [\n i % 3,\n Math.floor(i / 3) % 3,\n Math.floor(i / 9) % 3,\n Math.floor(i / 27),\n ];\n mtable[i][0] = mtable[i][1] = mtable[i][2] = mtable[i][3] = i;\n for (let j = 0; j < 4; j++) {\n o[j] = (o[j] + 2) % 3;\n mtable[i][4 + j] = o[0] + o[1] * 3 + o[2] * 9 + o[3] * 27;\n o[j] = (o[j] + 1) % 3;\n }\n }\n return (tables.phase1cm = mtable);\n}\n\nfunction generate_phase1_corner_ptable() {\n if (tables.phase1cp) {\n return tables.phase1cp;\n }\n let ptable = Array(81);\n for (let i = 0; i < 81; i++) {\n let o = [\n i % 3,\n Math.floor(i / 3) % 3,\n Math.floor(i / 9) % 3,\n Math.floor(i / 27),\n ];\n ptable[i] = (o[0] !== 0) + (o[1] !== 0) + (o[2] !== 0) + (o[3] !== 0);\n }\n return (tables.phase1cp = ptable);\n}\n\nfunction generate_phase1_edge_mtable() {\n if (tables.phase1em) {\n return tables.phase1em;\n }\n let mtable_single = [];\n for (let i = 0; i < 12; i++) {\n mtable_single[i] = [];\n for (let m = 0; m < 8; m++) {\n mtable_single[i][m] = moves[m][0].indexOf(i);\n }\n }\n let mtable = Array(12 ** 4);\n for (let i = 0; i < 12 ** 4; i++) {\n mtable[i] = Array(8);\n for (let m = 0; m < 8; m++) {\n let I = 0;\n for (let j = 0; j < 4; j++) {\n I += mtable_single[Math.floor(i / 12 ** j) % 12][m] * 12 ** j;\n }\n mtable[i][m] = I;\n }\n }\n return (tables.phase1em = mtable);\n}\n\nfunction generate_phase1_edge_ptable() {\n if (tables.phase1ep) {\n return tables.phase1ep;\n }\n return (tables.phase1ep = bfs(generate_phase1_edge_mtable(), [\n 8 + 12 * (9 + 12 * (10 + 12 * 11)),\n ]));\n}\n\nfunction generate_phase1_separate_mtable() {\n if (tables.phase1sm) {\n return tables.phase1sm;\n }\n const C12_4 = C(12, 4);\n let mtable_c = [];\n for (let i = 0; i < C12_4; i++) {\n mtable_c[i] = [];\n let comb = index_to_comb(i, 4, 12);\n let perm = [];\n for (let j = 0, k = 0; j < 12; j++) {\n if (comb[j] === 0) {\n perm[j] = -1;\n } else {\n perm[j] = k++;\n }\n }\n for (let m = 0; m < 8; m++) {\n let new_perm = compose(perm, moves[m][0]);\n let new_comb = compose(comb, moves[m][0]);\n let parity = permutation_parity(new_perm.filter((x) => x >= 0));\n mtable_c[i][m] = comb_to_index(new_comb) * 2 + parity;\n }\n }\n let mtable_co = generate_phase1_corner_mtable();\n let mtable = [];\n for (let j = 0; j < C12_4; j++) {\n for (let i = 0; i < 81; i++) {\n let m0 = (mtable[i + 81 * (2 * j)] = []);\n let m1 = (mtable[i + 81 * (2 * j + 1)] = []);\n for (let m = 0; m < 8; m++) {\n m0[m] = mtable_co[i][m] + 81 * mtable_c[j][m];\n m1[m] = mtable_co[i][m] + 81 * (mtable_c[j][m] ^ 1);\n }\n }\n }\n return (tables.phase1sm = mtable);\n}\n\nfunction generate_phase1_separate_ptable() {\n if (tables.phase1sp) {\n return tables.phase1sp;\n }\n return (tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]));\n}\n\nfunction generate_phase2_corner_mtable() {\n if (tables.phase2cm) {\n return tables.phase2cm;\n }\n let phase1_mtable = generate_phase1_corner_mtable();\n let mtable = Array(81);\n for (let i = 0; i < 81; i++) {\n mtable[i] = phase1_mtable[i].slice(4, 8);\n }\n return (tables.phase2cm = mtable);\n}\n\nfunction generate_phase2_edge_mtable() {\n if (tables.phase2em) {\n return tables.phase2em;\n }\n const n = 8;\n const HALFFACT8 = factorial(n) / 2;\n let mtable = Array(HALFFACT8);\n let perm = [0, 1, 2, 3, 4, 5, 6, 7];\n for (let i = 0; i < HALFFACT8; i++) {\n //perm = index_to_evenpermutation(i, 8);\n mtable[i] = Array(4);\n for (let m = 0; m < 4; m++) {\n let new_perm = compose(perm, moves[m][0].slice(0, 8));\n mtable[i][m] = evenpermutation_to_index(new_perm);\n }\n\n if (i === HALFFACT8 - 1) {\n break;\n }\n // update perm to lex-next even permutation\n let parity = 0;\n do {\n for (let k = n - 2; k >= 0; k--) {\n if (perm[k] > perm[k + 1]) {\n continue;\n }\n let l = k + 1;\n for (let L = l; L < n; L++) {\n if (perm[L] > perm[k]) {\n l = L;\n }\n }\n [perm[k], perm[l]] = [perm[l], perm[k]];\n parity ^= 1;\n for (let j = 0; k + 1 + j < n - 1 - j; j++, parity ^= 1) {\n [perm[k + 1 + j], perm[n - 1 - j]] = [\n perm[n - 1 - j],\n perm[k + 1 + j],\n ];\n }\n break;\n }\n } while (parity !== 0);\n }\n return (tables.phase2em = mtable);\n}\n\nfunction generate_phase2_edge_ptable() {\n if (tables.phase2ep) {\n return tables.phase2ep;\n }\n return (tables.phase2ep = bfs(generate_phase2_edge_mtable(), [0]));\n}\n\nfunction bfs(mtable, goal_states) {\n let N = mtable.length;\n let nmoves = mtable[0].length;\n let ptable = Array(N).fill(-1);\n let queue = goal_states.slice();\n let new_queue = [];\n let depth = 0;\n while (queue.length > 0) {\n new_queue.length = 0;\n for (let state of queue) {\n if (ptable[state] !== -1) {\n continue;\n }\n ptable[state] = depth;\n for (let move_index = 0; move_index < nmoves; move_index++) {\n let new_state = mtable[state][move_index];\n while (new_state !== state) {\n new_queue.push(new_state);\n new_state = mtable[new_state][move_index];\n }\n }\n }\n [queue, new_queue] = [new_queue, queue];\n depth += 1;\n }\n return ptable;\n}\n\nfunction ida_solve(indices, mtables, ptables, max_bound) {\n max_bound = max_bound || 999999;\n let ncoords = indices.length;\n let bound = 0;\n for (let i = 0; i < ncoords; i++) {\n bound = Math.max(bound, ptables[i][indices[i]]);\n }\n while (bound <= max_bound) {\n let path = ida_search(indices, mtables, ptables, bound, -1);\n if (path !== undefined) {\n return path;\n }\n bound++;\n }\n}\n\nfunction ida_search(indices, mtables, ptables, bound, last) {\n let ncoords = indices.length;\n let nmoves = mtables[0][0].length;\n let heuristic = 0;\n for (let i = 0; i < ncoords; i++) {\n heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n }\n if (heuristic > bound) {\n return;\n }\n if (bound === 0) {\n return [];\n }\n if (heuristic === 0 && bound === 1) {\n return;\n }\n for (let m = 0; m < nmoves; m++) {\n if (m === last) {\n continue;\n }\n if (m < last && tetrad[m] === tetrad[last]) {\n continue;\n }\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][indices[c]][m];\n }\n let r = 1;\n while (indices.some((_, i) => indices[i] !== new_indices[i])) {\n let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);\n if (subpath !== undefined) {\n return [[m, r]].concat(subpath);\n }\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][new_indices[c]][m];\n }\n r++;\n }\n }\n return;\n}\n\nfunction* ida_solve_gen(indices, mtables, ptables) {\n let ncoords = indices.length;\n let bound = 0;\n for (let i = 0; i < ncoords; i++) {\n bound = Math.max(bound, ptables[i][indices[i]]);\n }\n while (true) {\n yield* ida_search_gen(indices, mtables, ptables, bound, -1);\n bound++;\n }\n}\n\nfunction* ida_search_gen(indices, mtables, ptables, bound, last) {\n let ncoords = indices.length;\n let nmoves = mtables[0][0].length;\n let heuristic = 0;\n for (let i = 0; i < ncoords; i++) {\n heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n }\n if (heuristic > bound) {\n return;\n }\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) {\n return;\n }\n for (let m = 0; m < nmoves; m++) {\n if (m === last) {\n continue;\n }\n if (m < last && tetrad[m] === tetrad[last]) {\n continue;\n }\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][indices[c]][m];\n }\n let r = 1;\n while (indices.some((_, i) => indices[i] !== new_indices[i])) {\n let subpath_gen = ida_search_gen(\n new_indices,\n mtables,\n ptables,\n bound - 1,\n m,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) {\n break;\n }\n yield [[m, r]].concat(subpath);\n }\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][new_indices[c]][m];\n }\n r++;\n }\n }\n}\n\nconst randomUintBelow = randomUIntBelowFactory();\nexport async function getRandomRediCubeScramble() {\n return new Alg(\n stringify_move_sequence(\n generate_random_state_scramble(await randomUintBelow),\n ),\n );\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAGA,IAAI,aAA4C;AAChD,eAAsB,aAAa;AACjC,SAAQ,4BAAe,mBAAmB;AAC5C;AAGA,eAAe,qBAA6C;AAC1D,SAAO;AAAA,IACL,MAAM,QAAQ,OAAO,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
6
|
+
"names": ["C", "randomUintBelow", "i"]
|
|
7
|
+
}
|