cubing 0.26.1 → 0.26.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 +1 -1
- package/dist/esm/bluetooth/index.js +3 -3
- package/dist/esm/bluetooth/index.js.map +1 -1
- package/dist/esm/{chunk-CYG3DDTX.js → chunk-3ADPLDWG.js} +17 -10
- package/dist/esm/chunk-3ADPLDWG.js.map +7 -0
- package/dist/esm/{chunk-PDVAUAMY.js → chunk-3NFDCQI2.js} +5 -40
- package/dist/esm/chunk-3NFDCQI2.js.map +7 -0
- package/dist/esm/{chunk-JIBAUV55.js → chunk-4OCHKVLJ.js} +9 -9
- package/dist/esm/chunk-4OCHKVLJ.js.map +7 -0
- package/dist/esm/{chunk-RHC3DIN3.js → chunk-BEXHMXCT.js} +1 -1
- package/dist/esm/{chunk-RHC3DIN3.js.map → chunk-BEXHMXCT.js.map} +1 -1
- package/dist/esm/{chunk-QZOJPCN5.js → chunk-DO7GZAW4.js} +1 -1
- package/dist/esm/{chunk-QZOJPCN5.js.map → chunk-DO7GZAW4.js.map} +1 -1
- package/dist/esm/{chunk-XQKTAWAA.js → chunk-ESSOEWR6.js} +15 -15
- package/dist/esm/chunk-ESSOEWR6.js.map +7 -0
- package/dist/esm/{chunk-3CEMUTUD.js → chunk-FB7SFELN.js} +2 -2
- package/dist/esm/{chunk-3CEMUTUD.js.map → chunk-FB7SFELN.js.map} +1 -1
- package/dist/esm/{chunk-ALBEW4DJ.js → chunk-GBMX6FHY.js} +1 -1
- package/dist/esm/{chunk-ALBEW4DJ.js.map → chunk-GBMX6FHY.js.map} +1 -1
- package/dist/esm/{chunk-HUCMGBEC.js → chunk-HD2CMNE4.js} +2 -2
- package/dist/esm/{chunk-HUCMGBEC.js.map → chunk-HD2CMNE4.js.map} +1 -1
- package/dist/esm/{chunk-5Q4SJSNY.js → chunk-NSLR2SC4.js} +2 -2
- package/dist/esm/{chunk-5Q4SJSNY.js.map → chunk-NSLR2SC4.js.map} +1 -1
- package/dist/esm/{chunk-V55YSWJY.js → chunk-NYAPGKCW.js} +1 -1
- package/dist/esm/{chunk-V55YSWJY.js.map → chunk-NYAPGKCW.js.map} +1 -1
- package/dist/esm/{chunk-J7OB2GEM.js → chunk-RGEST6KF.js} +13 -11
- package/dist/esm/chunk-RGEST6KF.js.map +7 -0
- package/dist/esm/chunk-YBDBUTYE.js +42 -0
- package/dist/esm/chunk-YBDBUTYE.js.map +7 -0
- package/dist/esm/{chunk-AD6PFNOU.js → chunk-ZPAGJE7S.js} +2 -2
- package/dist/esm/{chunk-AD6PFNOU.js.map → chunk-ZPAGJE7S.js.map} +1 -1
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +2 -2
- package/dist/esm/protocol/index.js +2 -2
- package/dist/esm/puzzle-geometry/index.js +6 -2
- package/dist/esm/puzzles/index.js +3 -3
- package/dist/esm/{3x3x3.kpuzzle.svg-5U7LUACF.js → puzzles-dynamic-3x3x3-NB2PEZTV.js} +115 -4
- package/dist/esm/puzzles-dynamic-3x3x3-NB2PEZTV.js.map +7 -0
- package/dist/esm/puzzles-dynamic-side-events-CXNWDLKD.js +1855 -0
- package/dist/esm/puzzles-dynamic-side-events-CXNWDLKD.js.map +7 -0
- package/dist/esm/puzzles-dynamic-unofficial-CKTRIKMY.js +399 -0
- package/dist/esm/puzzles-dynamic-unofficial-CKTRIKMY.js.map +7 -0
- package/dist/esm/scramble/index.js +9 -8
- package/dist/esm/search/index.js +9 -8
- package/dist/esm/{chunk-PMKVGKT4.js → search-dynamic-sgs-side-events-ZDPMZ4Y7.js} +322 -8
- package/dist/esm/search-dynamic-sgs-side-events-ZDPMZ4Y7.js.map +7 -0
- package/dist/esm/{fto.dynamic-ISSUUAOX.js → search-dynamic-sgs-unofficial-RAGEBTDP.js} +564 -11
- package/dist/esm/search-dynamic-sgs-unofficial-RAGEBTDP.js.map +7 -0
- package/dist/esm/{3x3x3-min2phase-GFNNX26U.js → search-dynamic-solve-3x3x3-K4TG7P3X.js} +1 -1
- package/dist/esm/{3x3x3-min2phase-GFNNX26U.js.map → search-dynamic-solve-3x3x3-K4TG7P3X.js.map} +1 -1
- package/dist/esm/{444-solver-2ECPETB3.js → search-dynamic-solve-4x4x4-W455FUFG.js} +7 -6
- package/dist/esm/{444-solver-2ECPETB3.js.map → search-dynamic-solve-4x4x4-W455FUFG.js.map} +1 -1
- package/dist/esm/{fto-solver-5EQEC77M.js → search-dynamic-solve-fto-ZM45FTCO.js} +2 -2
- package/dist/esm/{fto-solver-5EQEC77M.js.map → search-dynamic-solve-fto-ZM45FTCO.js.map} +1 -1
- package/dist/esm/{kilosolver-RP3POREU.js → search-dynamic-solve-kilominx-PAW6HKT5.js} +3 -5
- package/dist/esm/{kilosolver-RP3POREU.js.map → search-dynamic-solve-kilominx-PAW6HKT5.js.map} +1 -1
- package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js → search-dynamic-solve-master_tetraminx-3R2CJUKW.js} +2 -4
- package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js.map → search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map} +1 -1
- package/dist/esm/{sq1-solver-G73T6FTJ.js → search-dynamic-solve-sq1-RS5HN6AH.js} +2 -2
- package/dist/esm/{sq1-solver-G73T6FTJ.js.map → search-dynamic-solve-sq1-RS5HN6AH.js.map} +1 -1
- package/dist/esm/{worker-inside-generated-string-4FDHMKDI.js → search-worker-inside-generated-string-VBEHCGJ6.js} +1335 -1335
- package/dist/esm/search-worker-inside-generated-string-VBEHCGJ6.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-CZHIWNVF.js → search-worker-js-entry-5IIKIMTU.js} +50 -65
- package/dist/esm/search-worker-js-entry-5IIKIMTU.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-4WJDKASM.js → search-worker-ts-entry-BV3J54MW.js} +5 -5
- package/dist/esm/{search-worker-ts-entry-4WJDKASM.js.map → search-worker-ts-entry-BV3J54MW.js.map} +1 -1
- package/dist/esm/stream/index.js +1 -1
- package/dist/esm/stream/index.js.map +1 -1
- package/dist/esm/twisty/index.js +64 -15
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{3d-dynamic-OTQHIOVR.js → twisty-dynamic-3d-KFFJZNMZ.js} +8 -7
- package/dist/esm/{3d-dynamic-OTQHIOVR.js.map → twisty-dynamic-3d-KFFJZNMZ.js.map} +2 -2
- package/dist/types/{KPuzzleDefinition-8531b592.d.ts → KPuzzleDefinition-121e85a8.d.ts} +12 -8
- package/dist/types/{KState-ba36d9a3.d.ts → KState-73482114.d.ts} +1 -1
- package/dist/types/PuzzleLoader-9243f44d.d.ts +1177 -0
- package/dist/types/bluetooth/index.d.ts +4 -4
- package/dist/types/{bluetooth-puzzle-bc1a5264.d.ts → bluetooth-puzzle-679d8ca3.d.ts} +1 -1
- package/dist/types/kpuzzle/index.d.ts +3 -3
- package/dist/types/{outside-d6602f71.d.ts → outside-f7ba9c00.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 +6 -4
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +3 -3
- package/dist/types/twisty/index.d.ts +8 -977
- package/package.json +4 -3
- package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js +0 -96
- package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js.map +0 -7
- package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js +0 -52
- package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js.map +0 -7
- package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js +0 -122
- package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js.map +0 -7
- package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js +0 -115
- package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js.map +0 -7
- package/dist/esm/3x3x3.kpuzzle.svg-5U7LUACF.js.map +0 -7
- package/dist/esm/chunk-CRU5TVHA.js +0 -122
- package/dist/esm/chunk-CRU5TVHA.js.map +0 -7
- package/dist/esm/chunk-CYG3DDTX.js.map +0 -7
- package/dist/esm/chunk-J7OB2GEM.js.map +0 -7
- package/dist/esm/chunk-JIBAUV55.js.map +0 -7
- package/dist/esm/chunk-MC2D6L32.js +0 -103
- package/dist/esm/chunk-MC2D6L32.js.map +0 -7
- package/dist/esm/chunk-PDVAUAMY.js.map +0 -7
- package/dist/esm/chunk-PMKVGKT4.js.map +0 -7
- package/dist/esm/chunk-XQKTAWAA.js.map +0 -7
- package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js +0 -714
- package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js.map +0 -7
- package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js +0 -376
- package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js.map +0 -7
- package/dist/esm/fto.dynamic-ISSUUAOX.js.map +0 -7
- package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js +0 -102
- package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js.map +0 -7
- package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js +0 -83
- package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js.map +0 -7
- package/dist/esm/megaminx.sgs.json-NUXKWG2L.js +0 -16
- package/dist/esm/megaminx.sgs.json-NUXKWG2L.js.map +0 -7
- package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js +0 -95
- package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js.map +0 -7
- package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js +0 -14
- package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js.map +0 -7
- package/dist/esm/redi_cube-5B6YHJGL.js +0 -565
- package/dist/esm/redi_cube-5B6YHJGL.js.map +0 -7
- package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js +0 -66
- package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js.map +0 -7
- package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js +0 -160
- package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js.map +0 -7
- package/dist/esm/search-worker-js-entry-CZHIWNVF.js.map +0 -7
- package/dist/esm/skewb.sgs.json-IMR7QJQC.js +0 -16
- package/dist/esm/skewb.sgs.json-IMR7QJQC.js.map +0 -7
- package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js +0 -244
- package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js.map +0 -7
- package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js +0 -302
- package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js.map +0 -7
- package/dist/esm/worker-inside-generated-string-4FDHMKDI.js.map +0 -7
- package/dist/types/PuzzleLoader-a7faf593.d.ts +0 -172
|
@@ -1,565 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
import {
|
|
3
|
-
randomUIntBelowFactory
|
|
4
|
-
} from "./chunk-V55YSWJY.js";
|
|
5
|
-
import {
|
|
6
|
-
Alg
|
|
7
|
-
} from "./chunk-QZOJPCN5.js";
|
|
8
|
-
import "./chunk-MGJA5U5O.js";
|
|
9
|
-
|
|
10
|
-
// src/cubing/vendor/xyzzy/redi_cube.js
|
|
11
|
-
function factorial(n) {
|
|
12
|
-
if (n < 2)
|
|
13
|
-
return n;
|
|
14
|
-
let f = 1;
|
|
15
|
-
for (let i = 2; i <= n; i++)
|
|
16
|
-
f *= i;
|
|
17
|
-
return f;
|
|
18
|
-
}
|
|
19
|
-
function C(n, k) {
|
|
20
|
-
if (k < 0 || k > n)
|
|
21
|
-
return 0;
|
|
22
|
-
if (k === 0 || k === n)
|
|
23
|
-
return 1;
|
|
24
|
-
let c = 1;
|
|
25
|
-
for (let i = 0; i < k; i++) {
|
|
26
|
-
c = c * (n - i) / (i + 1) | 0;
|
|
27
|
-
}
|
|
28
|
-
return c;
|
|
29
|
-
}
|
|
30
|
-
function permutation_to_index(perm) {
|
|
31
|
-
perm = perm.slice();
|
|
32
|
-
let n = perm.length;
|
|
33
|
-
let f = factorial(n - 1);
|
|
34
|
-
let ind = 0;
|
|
35
|
-
while (n > 1) {
|
|
36
|
-
n--;
|
|
37
|
-
let e = perm[0];
|
|
38
|
-
ind += e * f;
|
|
39
|
-
for (let i = 0; i < n; i++) {
|
|
40
|
-
let x = perm[i + 1];
|
|
41
|
-
perm[i] = x - (x > e);
|
|
42
|
-
}
|
|
43
|
-
f /= n;
|
|
44
|
-
}
|
|
45
|
-
return ind;
|
|
46
|
-
}
|
|
47
|
-
function index_to_permutation(ind, n) {
|
|
48
|
-
let perm = [];
|
|
49
|
-
let f = factorial(n - 1);
|
|
50
|
-
for (let i = 0; i < n; i++) {
|
|
51
|
-
perm[i] = ind / f | 0;
|
|
52
|
-
ind %= f;
|
|
53
|
-
f /= n - 1 - i;
|
|
54
|
-
}
|
|
55
|
-
for (let i = n - 2; i >= 0; i--) {
|
|
56
|
-
for (let j = i + 1; j < n; j++) {
|
|
57
|
-
perm[j] += +(perm[j] >= perm[i]);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return perm;
|
|
61
|
-
}
|
|
62
|
-
function permutation_parity(A) {
|
|
63
|
-
let n = A.length;
|
|
64
|
-
let parity = 0;
|
|
65
|
-
for (let i = 0; i < n - 1; i++) {
|
|
66
|
-
for (let j = i; j < n; j++) {
|
|
67
|
-
if (A[i] > A[j])
|
|
68
|
-
parity ^= 1;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return parity;
|
|
72
|
-
}
|
|
73
|
-
function index_to_evenpermutation(ind, n) {
|
|
74
|
-
let perm = [];
|
|
75
|
-
let f = factorial(n - 1) / 2;
|
|
76
|
-
let parity = 0;
|
|
77
|
-
for (let i = 0; i < n - 1; i++) {
|
|
78
|
-
perm[i] = ind / f | 0;
|
|
79
|
-
ind %= f;
|
|
80
|
-
f /= n - 1 - i;
|
|
81
|
-
}
|
|
82
|
-
perm[n - 1] = 0;
|
|
83
|
-
for (let i = n - 2; i >= 0; i--) {
|
|
84
|
-
for (let j = i + 1; j < n; j++) {
|
|
85
|
-
if (perm[j] >= perm[i])
|
|
86
|
-
perm[j]++;
|
|
87
|
-
else
|
|
88
|
-
parity ^= 1;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (parity === 1)
|
|
92
|
-
[perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];
|
|
93
|
-
return perm;
|
|
94
|
-
}
|
|
95
|
-
function evenpermutation_to_index(perm) {
|
|
96
|
-
return permutation_to_index(perm) >> 1;
|
|
97
|
-
}
|
|
98
|
-
function comb_to_index(l) {
|
|
99
|
-
let bits = l.length;
|
|
100
|
-
let ones = 0;
|
|
101
|
-
for (let i = 0; i < bits; i++)
|
|
102
|
-
ones += +(l[i] === 1);
|
|
103
|
-
let zeros = bits - ones;
|
|
104
|
-
if (zeros === 0 || ones === 0 || bits === 1)
|
|
105
|
-
return 0;
|
|
106
|
-
let b = C(bits - 1, ones);
|
|
107
|
-
let ind = 0;
|
|
108
|
-
for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {
|
|
109
|
-
bits--;
|
|
110
|
-
if (l[i] === 0) {
|
|
111
|
-
b = b * --zeros / bits;
|
|
112
|
-
} else {
|
|
113
|
-
ind += b;
|
|
114
|
-
b = b * ones-- / bits;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return ind;
|
|
118
|
-
}
|
|
119
|
-
function index_to_comb(ind, ones, bits) {
|
|
120
|
-
let zeros = bits - ones;
|
|
121
|
-
let b = C(bits - 1, ones);
|
|
122
|
-
let l = [];
|
|
123
|
-
let n = bits - 1;
|
|
124
|
-
for (let i = 0; i < n; i++) {
|
|
125
|
-
bits--;
|
|
126
|
-
if (ind < b) {
|
|
127
|
-
l.push(0);
|
|
128
|
-
b = b * --zeros / bits;
|
|
129
|
-
} else {
|
|
130
|
-
l.push(1);
|
|
131
|
-
ind -= b;
|
|
132
|
-
b = b * ones-- / bits;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
l.push(ones);
|
|
136
|
-
return l;
|
|
137
|
-
}
|
|
138
|
-
function compose(A, B) {
|
|
139
|
-
let C2 = [];
|
|
140
|
-
for (let i = 0; i < B.length; i++)
|
|
141
|
-
C2[i] = A[B[i]];
|
|
142
|
-
return C2;
|
|
143
|
-
}
|
|
144
|
-
function permutation_from_cycle(cycle, n) {
|
|
145
|
-
let perm = [];
|
|
146
|
-
for (let i = 0; i < n; i++)
|
|
147
|
-
perm[i] = i;
|
|
148
|
-
for (let i = 0; i < cycle.length; i++) {
|
|
149
|
-
perm[cycle[i]] = cycle[(i + 1) % cycle.length];
|
|
150
|
-
}
|
|
151
|
-
return perm;
|
|
152
|
-
}
|
|
153
|
-
function unsparsify_list(d, n) {
|
|
154
|
-
let l = Array(n).fill(0);
|
|
155
|
-
for (let k in d)
|
|
156
|
-
l[k] = d[k];
|
|
157
|
-
return l;
|
|
158
|
-
}
|
|
159
|
-
function compose_state(state1, state2) {
|
|
160
|
-
let o = Array(8).fill(0);
|
|
161
|
-
for (let i = 0; i < 8; i++)
|
|
162
|
-
o[i] = (state1[1][i] + state2[1][i]) % 3;
|
|
163
|
-
return [compose(state1[0], state2[0]), o];
|
|
164
|
-
}
|
|
165
|
-
var move_UL = [
|
|
166
|
-
permutation_from_cycle([0, 1, 4], 12),
|
|
167
|
-
unsparsify_list({ 0: 2 }, 8)
|
|
168
|
-
];
|
|
169
|
-
var move_U = [
|
|
170
|
-
permutation_from_cycle([1, 2, 5], 12),
|
|
171
|
-
unsparsify_list({ 1: 2 }, 8)
|
|
172
|
-
];
|
|
173
|
-
var move_UR = [
|
|
174
|
-
permutation_from_cycle([2, 3, 6], 12),
|
|
175
|
-
unsparsify_list({ 2: 2 }, 8)
|
|
176
|
-
];
|
|
177
|
-
var move_F = [
|
|
178
|
-
permutation_from_cycle([3, 0, 7], 12),
|
|
179
|
-
unsparsify_list({ 3: 2 }, 8)
|
|
180
|
-
];
|
|
181
|
-
var move_L = [
|
|
182
|
-
permutation_from_cycle([9, 8, 4], 12),
|
|
183
|
-
unsparsify_list({ 4: 2 }, 8)
|
|
184
|
-
];
|
|
185
|
-
var move_B = [
|
|
186
|
-
permutation_from_cycle([10, 9, 5], 12),
|
|
187
|
-
unsparsify_list({ 5: 2 }, 8)
|
|
188
|
-
];
|
|
189
|
-
var move_R = [
|
|
190
|
-
permutation_from_cycle([11, 10, 6], 12),
|
|
191
|
-
unsparsify_list({ 6: 2 }, 8)
|
|
192
|
-
];
|
|
193
|
-
var move_D = [
|
|
194
|
-
permutation_from_cycle([8, 11, 7], 12),
|
|
195
|
-
unsparsify_list({ 7: 2 }, 8)
|
|
196
|
-
];
|
|
197
|
-
var solved = [index_to_permutation(0, 12), Array(8).fill(0)];
|
|
198
|
-
var moves = [move_UL, move_U, move_UR, move_F, move_L, move_B, move_R, move_D];
|
|
199
|
-
var move_names = ["UL", "U", "UR", "F", "L", "B", "R", "D"];
|
|
200
|
-
var tetrad = [0, 1, 0, 1, 1, 0, 1, 0];
|
|
201
|
-
function stringify_move_sequence(move_sequence) {
|
|
202
|
-
let suffixes = ["0", "", "'"];
|
|
203
|
-
let s = move_sequence.map(([m, r]) => move_names[m] + suffixes[r]);
|
|
204
|
-
return s.join(" ");
|
|
205
|
-
}
|
|
206
|
-
function generate_random_state(randomUintBelow2) {
|
|
207
|
-
let p = index_to_evenpermutation(Math.floor(randomUintBelow2(factorial(12)) / 2), 12);
|
|
208
|
-
let o = Array(8);
|
|
209
|
-
for (let i = 0; i < 8; i++)
|
|
210
|
-
o[i] = randomUintBelow2(3);
|
|
211
|
-
return [p, o];
|
|
212
|
-
}
|
|
213
|
-
function generate_random_state_scramble(randomUintBelow2) {
|
|
214
|
-
return solve(generate_random_state(randomUintBelow2));
|
|
215
|
-
}
|
|
216
|
-
function solve(state) {
|
|
217
|
-
let phase1_indices = index_phase1(state);
|
|
218
|
-
let phase1_mtables = [
|
|
219
|
-
generate_phase1_edge_mtable(),
|
|
220
|
-
generate_phase1_separate_mtable()
|
|
221
|
-
];
|
|
222
|
-
let phase1_ptables = [
|
|
223
|
-
generate_phase1_edge_ptable(),
|
|
224
|
-
generate_phase1_separate_ptable()
|
|
225
|
-
];
|
|
226
|
-
let phase2_mtables = [
|
|
227
|
-
generate_phase2_edge_mtable(),
|
|
228
|
-
generate_phase2_corner_mtable()
|
|
229
|
-
];
|
|
230
|
-
let phase2_ptables = [
|
|
231
|
-
generate_phase2_edge_ptable(),
|
|
232
|
-
generate_phase1_corner_ptable()
|
|
233
|
-
];
|
|
234
|
-
let phase1gen = ida_solve_gen(phase1_indices, phase1_mtables, phase1_ptables);
|
|
235
|
-
let best = void 0;
|
|
236
|
-
let intermediate_states = /* @__PURE__ */ new Set();
|
|
237
|
-
let start_time = +new Date();
|
|
238
|
-
for (let i = 0; i < 25; i++) {
|
|
239
|
-
let { value: sol1, done } = phase1gen.next();
|
|
240
|
-
let new_state = state;
|
|
241
|
-
for (let [m, r] of sol1) {
|
|
242
|
-
for (let i2 = 0; i2 < r; i2++)
|
|
243
|
-
new_state = compose_state(new_state, moves[m]);
|
|
244
|
-
}
|
|
245
|
-
if (intermediate_states.has(new_state.toString())) {
|
|
246
|
-
continue;
|
|
247
|
-
} else
|
|
248
|
-
intermediate_states.add(new_state.toString());
|
|
249
|
-
let edge_ind = evenpermutation_to_index(new_state[0].slice(0, 8));
|
|
250
|
-
let corner_ind = 0;
|
|
251
|
-
for (let i2 = 0; i2 < 4; i2++)
|
|
252
|
-
corner_ind += new_state[1][i2] * 3 ** i2;
|
|
253
|
-
let phase2_indices = [edge_ind, corner_ind];
|
|
254
|
-
let moves_left = best ? best.length - sol1.length - 1 : 999999;
|
|
255
|
-
let sol2 = ida_solve(phase2_indices, phase2_mtables, phase2_ptables, moves_left);
|
|
256
|
-
if (sol2 === void 0) {
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
if (best === void 0 || best.length > sol1.length + sol2.length) {
|
|
260
|
-
best = sol1.concat(sol2);
|
|
261
|
-
}
|
|
262
|
-
if (new Date() - start_time > 300)
|
|
263
|
-
break;
|
|
264
|
-
}
|
|
265
|
-
return best;
|
|
266
|
-
}
|
|
267
|
-
function index_phase1(state) {
|
|
268
|
-
let edge_ind = 0;
|
|
269
|
-
for (let i = 0; i < 4; i++)
|
|
270
|
-
edge_ind += state[0].indexOf(i + 8) * 12 ** i;
|
|
271
|
-
let corner_ind = 0;
|
|
272
|
-
for (let i = 0; i < 4; i++)
|
|
273
|
-
corner_ind += state[1][i + 4] * 3 ** i;
|
|
274
|
-
let filtered = state[0].map((x) => Math.max(-1, x - 8));
|
|
275
|
-
let separate_ind = comb_to_index(filtered.map((x) => +(x >= 0))) * 2 + permutation_parity(filtered.filter((x) => x >= 0));
|
|
276
|
-
return [edge_ind, corner_ind + 81 * separate_ind];
|
|
277
|
-
}
|
|
278
|
-
var tables = {};
|
|
279
|
-
function generate_phase1_corner_mtable() {
|
|
280
|
-
if (tables.phase1cm)
|
|
281
|
-
return tables.phase1cm;
|
|
282
|
-
let mtable = [];
|
|
283
|
-
for (let i = 0; i < 81; i++) {
|
|
284
|
-
mtable[i] = Array(8);
|
|
285
|
-
let o = [
|
|
286
|
-
i % 3,
|
|
287
|
-
Math.floor(i / 3) % 3,
|
|
288
|
-
Math.floor(i / 9) % 3,
|
|
289
|
-
Math.floor(i / 27)
|
|
290
|
-
];
|
|
291
|
-
mtable[i][0] = mtable[i][1] = mtable[i][2] = mtable[i][3] = i;
|
|
292
|
-
for (let j = 0; j < 4; j++) {
|
|
293
|
-
o[j] = (o[j] + 2) % 3;
|
|
294
|
-
mtable[i][4 + j] = o[0] + o[1] * 3 + o[2] * 9 + o[3] * 27;
|
|
295
|
-
o[j] = (o[j] + 1) % 3;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return tables.phase1cm = mtable;
|
|
299
|
-
}
|
|
300
|
-
function generate_phase1_corner_ptable() {
|
|
301
|
-
if (tables.phase1cp)
|
|
302
|
-
return tables.phase1cp;
|
|
303
|
-
let ptable = Array(81);
|
|
304
|
-
for (let i = 0; i < 81; i++) {
|
|
305
|
-
let o = [
|
|
306
|
-
i % 3,
|
|
307
|
-
Math.floor(i / 3) % 3,
|
|
308
|
-
Math.floor(i / 9) % 3,
|
|
309
|
-
Math.floor(i / 27)
|
|
310
|
-
];
|
|
311
|
-
ptable[i] = (o[0] !== 0) + (o[1] !== 0) + (o[2] !== 0) + (o[3] !== 0);
|
|
312
|
-
}
|
|
313
|
-
return tables.phase1cp = ptable;
|
|
314
|
-
}
|
|
315
|
-
function generate_phase1_edge_mtable() {
|
|
316
|
-
if (tables.phase1em)
|
|
317
|
-
return tables.phase1em;
|
|
318
|
-
let mtable_single = [];
|
|
319
|
-
for (let i = 0; i < 12; i++) {
|
|
320
|
-
mtable_single[i] = [];
|
|
321
|
-
for (let m = 0; m < 8; m++) {
|
|
322
|
-
mtable_single[i][m] = moves[m][0].indexOf(i);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
let mtable = Array(12 ** 4);
|
|
326
|
-
for (let i = 0; i < 12 ** 4; i++) {
|
|
327
|
-
mtable[i] = Array(8);
|
|
328
|
-
for (let m = 0; m < 8; m++) {
|
|
329
|
-
let I = 0;
|
|
330
|
-
for (let j = 0; j < 4; j++) {
|
|
331
|
-
I += mtable_single[Math.floor(i / 12 ** j) % 12][m] * 12 ** j;
|
|
332
|
-
}
|
|
333
|
-
mtable[i][m] = I;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
return tables.phase1em = mtable;
|
|
337
|
-
}
|
|
338
|
-
function generate_phase1_edge_ptable() {
|
|
339
|
-
if (tables.phase1ep)
|
|
340
|
-
return tables.phase1ep;
|
|
341
|
-
return tables.phase1ep = bfs(generate_phase1_edge_mtable(), [
|
|
342
|
-
8 + 12 * (9 + 12 * (10 + 12 * 11))
|
|
343
|
-
]);
|
|
344
|
-
}
|
|
345
|
-
function generate_phase1_separate_mtable() {
|
|
346
|
-
if (tables.phase1sm)
|
|
347
|
-
return tables.phase1sm;
|
|
348
|
-
const C12_4 = C(12, 4);
|
|
349
|
-
let mtable_c = [];
|
|
350
|
-
for (let i = 0; i < C12_4; i++) {
|
|
351
|
-
mtable_c[i] = [];
|
|
352
|
-
let comb = index_to_comb(i, 4, 12), perm = [];
|
|
353
|
-
for (let j = 0, k = 0; j < 12; j++) {
|
|
354
|
-
if (comb[j] === 0)
|
|
355
|
-
perm[j] = -1;
|
|
356
|
-
else
|
|
357
|
-
perm[j] = k++;
|
|
358
|
-
}
|
|
359
|
-
for (let m = 0; m < 8; m++) {
|
|
360
|
-
let new_perm = compose(perm, moves[m][0]);
|
|
361
|
-
let new_comb = compose(comb, moves[m][0]);
|
|
362
|
-
let parity = permutation_parity(new_perm.filter((x) => x >= 0));
|
|
363
|
-
mtable_c[i][m] = comb_to_index(new_comb) * 2 + parity;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
let mtable_co = generate_phase1_corner_mtable();
|
|
367
|
-
let mtable = [];
|
|
368
|
-
for (let j = 0; j < C12_4; j++) {
|
|
369
|
-
for (let i = 0; i < 81; i++) {
|
|
370
|
-
let m0 = mtable[i + 81 * (2 * j)] = [];
|
|
371
|
-
let m1 = mtable[i + 81 * (2 * j + 1)] = [];
|
|
372
|
-
for (let m = 0; m < 8; m++) {
|
|
373
|
-
m0[m] = mtable_co[i][m] + 81 * mtable_c[j][m];
|
|
374
|
-
m1[m] = mtable_co[i][m] + 81 * (mtable_c[j][m] ^ 1);
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
return tables.phase1sm = mtable;
|
|
379
|
-
}
|
|
380
|
-
function generate_phase1_separate_ptable() {
|
|
381
|
-
if (tables.phase1sp)
|
|
382
|
-
return tables.phase1sp;
|
|
383
|
-
return tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]);
|
|
384
|
-
}
|
|
385
|
-
function generate_phase2_corner_mtable() {
|
|
386
|
-
if (tables.phase2cm)
|
|
387
|
-
return tables.phase2cm;
|
|
388
|
-
let phase1_mtable = generate_phase1_corner_mtable();
|
|
389
|
-
let mtable = Array(81);
|
|
390
|
-
for (let i = 0; i < 81; i++) {
|
|
391
|
-
mtable[i] = phase1_mtable[i].slice(4, 8);
|
|
392
|
-
}
|
|
393
|
-
return tables.phase2cm = mtable;
|
|
394
|
-
}
|
|
395
|
-
function generate_phase2_edge_mtable() {
|
|
396
|
-
if (tables.phase2em)
|
|
397
|
-
return tables.phase2em;
|
|
398
|
-
const n = 8;
|
|
399
|
-
const HALFFACT8 = factorial(n) / 2;
|
|
400
|
-
let mtable = Array(HALFFACT8);
|
|
401
|
-
let perm = [0, 1, 2, 3, 4, 5, 6, 7];
|
|
402
|
-
for (let i = 0; i < HALFFACT8; i++) {
|
|
403
|
-
mtable[i] = Array(4);
|
|
404
|
-
for (let m = 0; m < 4; m++) {
|
|
405
|
-
let new_perm = compose(perm, moves[m][0].slice(0, 8));
|
|
406
|
-
mtable[i][m] = evenpermutation_to_index(new_perm);
|
|
407
|
-
}
|
|
408
|
-
if (i === HALFFACT8 - 1)
|
|
409
|
-
break;
|
|
410
|
-
let parity = 0;
|
|
411
|
-
do {
|
|
412
|
-
for (let k = n - 2; k >= 0; k--) {
|
|
413
|
-
if (perm[k] > perm[k + 1])
|
|
414
|
-
continue;
|
|
415
|
-
let l = k + 1;
|
|
416
|
-
for (let L = l; L < n; L++)
|
|
417
|
-
if (perm[L] > perm[k])
|
|
418
|
-
l = L;
|
|
419
|
-
[perm[k], perm[l]] = [perm[l], perm[k]];
|
|
420
|
-
parity ^= 1;
|
|
421
|
-
for (let j = 0; k + 1 + j < n - 1 - j; j++, parity ^= 1) {
|
|
422
|
-
[perm[k + 1 + j], perm[n - 1 - j]] = [
|
|
423
|
-
perm[n - 1 - j],
|
|
424
|
-
perm[k + 1 + j]
|
|
425
|
-
];
|
|
426
|
-
}
|
|
427
|
-
break;
|
|
428
|
-
}
|
|
429
|
-
} while (parity !== 0);
|
|
430
|
-
}
|
|
431
|
-
return tables.phase2em = mtable;
|
|
432
|
-
}
|
|
433
|
-
function generate_phase2_edge_ptable() {
|
|
434
|
-
if (tables.phase2ep)
|
|
435
|
-
return tables.phase2ep;
|
|
436
|
-
return tables.phase2ep = bfs(generate_phase2_edge_mtable(), [0]);
|
|
437
|
-
}
|
|
438
|
-
function bfs(mtable, goal_states) {
|
|
439
|
-
let N = mtable.length;
|
|
440
|
-
let nmoves = mtable[0].length;
|
|
441
|
-
let ptable = Array(N).fill(-1);
|
|
442
|
-
let queue = goal_states.slice(), new_queue = [];
|
|
443
|
-
let depth = 0;
|
|
444
|
-
while (queue.length > 0) {
|
|
445
|
-
new_queue.length = 0;
|
|
446
|
-
for (let state of queue) {
|
|
447
|
-
if (ptable[state] !== -1)
|
|
448
|
-
continue;
|
|
449
|
-
ptable[state] = depth;
|
|
450
|
-
for (let move_index = 0; move_index < nmoves; move_index++) {
|
|
451
|
-
let new_state = mtable[state][move_index];
|
|
452
|
-
while (new_state != state) {
|
|
453
|
-
new_queue.push(new_state);
|
|
454
|
-
new_state = mtable[new_state][move_index];
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
[queue, new_queue] = [new_queue, queue];
|
|
459
|
-
depth += 1;
|
|
460
|
-
}
|
|
461
|
-
return ptable;
|
|
462
|
-
}
|
|
463
|
-
function ida_solve(indices, mtables, ptables, max_bound) {
|
|
464
|
-
max_bound = max_bound || 999999;
|
|
465
|
-
let ncoords = indices.length;
|
|
466
|
-
let bound = 0;
|
|
467
|
-
for (let i = 0; i < ncoords; i++)
|
|
468
|
-
bound = Math.max(bound, ptables[i][indices[i]]);
|
|
469
|
-
while (bound <= max_bound) {
|
|
470
|
-
let path = ida_search(indices, mtables, ptables, bound, -1);
|
|
471
|
-
if (path !== void 0)
|
|
472
|
-
return path;
|
|
473
|
-
bound++;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
function ida_search(indices, mtables, ptables, bound, last) {
|
|
477
|
-
let ncoords = indices.length;
|
|
478
|
-
let nmoves = mtables[0][0].length;
|
|
479
|
-
let heuristic = 0;
|
|
480
|
-
for (let i = 0; i < ncoords; i++)
|
|
481
|
-
heuristic = Math.max(heuristic, ptables[i][indices[i]]);
|
|
482
|
-
if (heuristic > bound)
|
|
483
|
-
return;
|
|
484
|
-
if (bound === 0)
|
|
485
|
-
return [];
|
|
486
|
-
if (heuristic === 0 && bound === 1)
|
|
487
|
-
return;
|
|
488
|
-
for (let m = 0; m < nmoves; m++) {
|
|
489
|
-
if (m === last)
|
|
490
|
-
continue;
|
|
491
|
-
if (m < last && tetrad[m] == tetrad[last])
|
|
492
|
-
continue;
|
|
493
|
-
let new_indices = indices.slice();
|
|
494
|
-
for (let c = 0; c < ncoords; c++)
|
|
495
|
-
new_indices[c] = mtables[c][indices[c]][m];
|
|
496
|
-
let r = 1;
|
|
497
|
-
while (indices.some((_, i) => indices[i] != new_indices[i])) {
|
|
498
|
-
let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);
|
|
499
|
-
if (subpath !== void 0)
|
|
500
|
-
return [[m, r]].concat(subpath);
|
|
501
|
-
for (let c = 0; c < ncoords; c++) {
|
|
502
|
-
new_indices[c] = mtables[c][new_indices[c]][m];
|
|
503
|
-
}
|
|
504
|
-
r++;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
return;
|
|
508
|
-
}
|
|
509
|
-
function* ida_solve_gen(indices, mtables, ptables) {
|
|
510
|
-
let ncoords = indices.length;
|
|
511
|
-
let bound = 0;
|
|
512
|
-
for (let i = 0; i < ncoords; i++)
|
|
513
|
-
bound = Math.max(bound, ptables[i][indices[i]]);
|
|
514
|
-
while (true) {
|
|
515
|
-
yield* ida_search_gen(indices, mtables, ptables, bound, -1);
|
|
516
|
-
bound++;
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
function* ida_search_gen(indices, mtables, ptables, bound, last) {
|
|
520
|
-
let ncoords = indices.length;
|
|
521
|
-
let nmoves = mtables[0][0].length;
|
|
522
|
-
let heuristic = 0;
|
|
523
|
-
for (let i = 0; i < ncoords; i++)
|
|
524
|
-
heuristic = Math.max(heuristic, ptables[i][indices[i]]);
|
|
525
|
-
if (heuristic > bound)
|
|
526
|
-
return;
|
|
527
|
-
if (bound === 0) {
|
|
528
|
-
yield [];
|
|
529
|
-
return;
|
|
530
|
-
}
|
|
531
|
-
if (heuristic === 0 && bound === 1)
|
|
532
|
-
return;
|
|
533
|
-
for (let m = 0; m < nmoves; m++) {
|
|
534
|
-
if (m === last)
|
|
535
|
-
continue;
|
|
536
|
-
if (m < last && tetrad[m] == tetrad[last])
|
|
537
|
-
continue;
|
|
538
|
-
let new_indices = indices.slice();
|
|
539
|
-
for (let c = 0; c < ncoords; c++)
|
|
540
|
-
new_indices[c] = mtables[c][indices[c]][m];
|
|
541
|
-
let r = 1;
|
|
542
|
-
while (indices.some((_, i) => indices[i] != new_indices[i])) {
|
|
543
|
-
let subpath_gen = ida_search_gen(new_indices, mtables, ptables, bound - 1, m);
|
|
544
|
-
while (true) {
|
|
545
|
-
let { value: subpath, done } = subpath_gen.next();
|
|
546
|
-
if (done)
|
|
547
|
-
break;
|
|
548
|
-
yield [[m, r]].concat(subpath);
|
|
549
|
-
}
|
|
550
|
-
for (let c = 0; c < ncoords; c++) {
|
|
551
|
-
new_indices[c] = mtables[c][new_indices[c]][m];
|
|
552
|
-
}
|
|
553
|
-
r++;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
var randomUintBelow = randomUIntBelowFactory();
|
|
558
|
-
async function getRandomRediCubeScramble() {
|
|
559
|
-
return new Alg(stringify_move_sequence(generate_random_state_scramble(await randomUintBelow)));
|
|
560
|
-
}
|
|
561
|
-
"use strict";
|
|
562
|
-
export {
|
|
563
|
-
getRandomRediCubeScramble
|
|
564
|
-
};
|
|
565
|
-
//# sourceMappingURL=redi_cube-5B6YHJGL.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/cubing/vendor/xyzzy/redi_cube.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable */\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) counts[a] = (counts[a] || 0) + 1;\n return counts;\n}\n\n/* Combinatoric functions */\n\nfunction factorial(n) {\n if (n < 2) return n;\n let f = 1;\n for (let i = 2; i <= n; i++) f *= i;\n return f;\n}\n\nfunction C(n, k) {\n if (k < 0 || k > n) return 0;\n if (k === 0 || k === n) return 1;\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]) parity ^= 1;\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]) perm[j]++;\n else parity ^= 1;\n }\n }\n if (parity === 1) [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];\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++) ones += +(l[i] === 1);\n let zeros = bits - ones;\n if (zeros === 0 || ones === 0 || bits === 1) return 0;\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 } // l[i] === 1\n else {\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++) C[i] = A[B[i]];\n return C;\n}\n\nfunction permutation_from_cycle(cycle, n) {\n let perm = [];\n for (let i = 0; i < n; i++) perm[i] = i;\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) l[k] = d[k];\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++) o[i] = (state1[1][i] + state2[1][i]) % 3;\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++) state = compose_state(state, moves[m]);\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++) o[i] = randomUintBelow(3);\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 if (intermediate_states.has(new_state.toString())) {\n // console.log(\"skip\");\n continue;\n } else intermediate_states.add(new_state.toString());\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++) corner_ind += new_state[1][i] * 3 ** i;\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) break;\n }\n return best;\n}\n\nfunction index_phase1(state) {\n let edge_ind = 0;\n for (let i = 0; i < 4; i++) edge_ind += state[0].indexOf(i + 8) * 12 ** i;\n let corner_ind = 0;\n for (let i = 0; i < 4; i++) corner_ind += state[1][i + 4] * 3 ** i;\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) return tables.phase1cm;\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) return tables.phase1cp;\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) return tables.phase1em;\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) return tables.phase1ep;\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) return tables.phase1sm;\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 perm = [];\n for (let j = 0, k = 0; j < 12; j++) {\n if (comb[j] === 0) perm[j] = -1;\n else perm[j] = k++;\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) return tables.phase1sp;\n return (tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]));\n}\n\nfunction generate_phase2_corner_mtable() {\n if (tables.phase2cm) return tables.phase2cm;\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) return tables.phase2em;\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) break;\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]) continue;\n let l = k + 1;\n for (let L = l; L < n; L++) if (perm[L] > perm[k]) l = L;\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) return tables.phase2ep;\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 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) continue;\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 while (bound <= max_bound) {\n let path = ida_search(indices, mtables, ptables, bound, -1);\n if (path !== undefined) return path;\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 if (heuristic > bound) return;\n if (bound === 0) return [];\n if (heuristic === 0 && bound === 1) return;\n for (let m = 0; m < nmoves; m++) {\n if (m === last) continue;\n if (m < last && tetrad[m] == tetrad[last]) continue;\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++)\n new_indices[c] = mtables[c][indices[c]][m];\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) return [[m, r]].concat(subpath);\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 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 if (heuristic > bound) return;\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) return;\n for (let m = 0; m < nmoves; m++) {\n if (m === last) continue;\n if (m < last && tetrad[m] == tetrad[last]) continue;\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++)\n new_indices[c] = mtables[c][indices[c]][m];\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) break;\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": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import "./chunk-MGJA5U5O.js";
|
|
2
|
-
|
|
3
|
-
// src/cubing/puzzles/implementations/redi-cube/redi_cube.kpuzzle.json.ts
|
|
4
|
-
var rediCubeKPuzzleDefinition = {
|
|
5
|
-
name: "redi_cube",
|
|
6
|
-
orbits: {
|
|
7
|
-
EDGES: { numPieces: 12, numOrientations: 2 },
|
|
8
|
-
CORNERS: { numPieces: 8, numOrientations: 3 }
|
|
9
|
-
},
|
|
10
|
-
startStateData: {
|
|
11
|
-
EDGES: {
|
|
12
|
-
pieces: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
|
|
13
|
-
orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
14
|
-
},
|
|
15
|
-
CORNERS: {
|
|
16
|
-
pieces: [0, 1, 2, 3, 4, 5, 6, 7],
|
|
17
|
-
orientation: [0, 0, 0, 0, 0, 0, 0, 0]
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
moves: {
|
|
21
|
-
F: {
|
|
22
|
-
EDGES: {
|
|
23
|
-
permutation: [8, 0, 2, 3, 4, 5, 6, 7, 1, 9, 10, 11],
|
|
24
|
-
orientation: [0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
|
|
25
|
-
},
|
|
26
|
-
CORNERS: {
|
|
27
|
-
permutation: [0, 1, 2, 3, 4, 5, 6, 7],
|
|
28
|
-
orientation: [1, 0, 0, 0, 0, 0, 0, 0]
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
x: {
|
|
32
|
-
EDGES: {
|
|
33
|
-
permutation: [4, 8, 0, 9, 6, 10, 2, 11, 5, 7, 1, 3],
|
|
34
|
-
orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]
|
|
35
|
-
},
|
|
36
|
-
CORNERS: {
|
|
37
|
-
permutation: [4, 0, 3, 5, 7, 6, 2, 1],
|
|
38
|
-
orientation: [2, 1, 2, 1, 1, 2, 1, 2]
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
y: {
|
|
42
|
-
EDGES: {
|
|
43
|
-
permutation: [1, 2, 3, 0, 5, 6, 7, 4, 10, 8, 11, 9],
|
|
44
|
-
orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
|
|
45
|
-
},
|
|
46
|
-
CORNERS: {
|
|
47
|
-
permutation: [1, 2, 3, 0, 7, 4, 5, 6],
|
|
48
|
-
orientation: [0, 0, 0, 0, 0, 0, 0, 0]
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
experimentalDerivedMoves: {
|
|
53
|
-
z: "[x: y]",
|
|
54
|
-
UR: "[y: F]",
|
|
55
|
-
U: "[y2: F]",
|
|
56
|
-
UL: "[y': F]",
|
|
57
|
-
D: "[x: F]",
|
|
58
|
-
L: "[z2: F]",
|
|
59
|
-
R: "[x2: F]",
|
|
60
|
-
B: "[y2 x: F]"
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
export {
|
|
64
|
-
rediCubeKPuzzleDefinition
|
|
65
|
-
};
|
|
66
|
-
//# sourceMappingURL=redi_cube.kpuzzle.json-VGO74GBL.js.map
|