@cubingcenter/scrambler 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -3
- package/dist/core/api.d.ts.map +1 -1
- package/dist/core/api.js +18 -6
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/types.d.ts +7 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/puzzles/clock/index.d.ts +1 -0
- package/dist/puzzles/clock/index.d.ts.map +1 -1
- package/dist/puzzles/clock/index.js +4 -0
- package/dist/puzzles/cube2/index.d.ts +1 -0
- package/dist/puzzles/cube2/index.d.ts.map +1 -1
- package/dist/puzzles/cube2/index.js +4 -0
- package/dist/puzzles/cube2/scrambler.d.ts.map +1 -1
- package/dist/puzzles/cube2/scrambler.js +4 -6
- package/dist/puzzles/cube2/solver/browser-loader.d.ts.map +1 -1
- package/dist/puzzles/cube2/solver/browser-loader.js +4 -12
- package/dist/puzzles/cube2/solver/index.d.ts +1 -1
- package/dist/puzzles/cube2/solver/index.d.ts.map +1 -1
- package/dist/puzzles/cube2/solver/index.js +1 -1
- package/dist/puzzles/cube2/solver/search.d.ts +2 -0
- package/dist/puzzles/cube2/solver/search.d.ts.map +1 -1
- package/dist/puzzles/cube2/solver/search.js +26 -0
- package/dist/puzzles/cube2/validation.d.ts.map +1 -1
- package/dist/puzzles/cube2/validation.js +15 -3
- package/dist/puzzles/cube3/index.d.ts +1 -0
- package/dist/puzzles/cube3/index.d.ts.map +1 -1
- package/dist/puzzles/cube3/index.js +4 -0
- package/dist/puzzles/cube3/solver/browser-loader.d.ts.map +1 -1
- package/dist/puzzles/cube3/solver/browser-loader.js +5 -29
- package/dist/puzzles/cube4/index.d.ts +1 -0
- package/dist/puzzles/cube4/index.d.ts.map +1 -1
- package/dist/puzzles/cube4/index.js +4 -0
- package/dist/puzzles/cube5x5/index.d.ts +1 -0
- package/dist/puzzles/cube5x5/index.d.ts.map +1 -1
- package/dist/puzzles/cube5x5/index.js +4 -0
- package/dist/puzzles/cube6x6/index.d.ts +1 -0
- package/dist/puzzles/cube6x6/index.d.ts.map +1 -1
- package/dist/puzzles/cube6x6/index.js +4 -0
- package/dist/puzzles/cube7x7/index.d.ts +1 -0
- package/dist/puzzles/cube7x7/index.d.ts.map +1 -1
- package/dist/puzzles/cube7x7/index.js +4 -0
- package/dist/puzzles/megaminx/index.d.ts +1 -0
- package/dist/puzzles/megaminx/index.d.ts.map +1 -1
- package/dist/puzzles/megaminx/index.js +4 -0
- package/dist/puzzles/pyraminx/index.d.ts +3 -1
- package/dist/puzzles/pyraminx/index.d.ts.map +1 -1
- package/dist/puzzles/pyraminx/index.js +6 -1
- package/dist/puzzles/pyraminx/scrambler.d.ts.map +1 -1
- package/dist/puzzles/pyraminx/scrambler.js +24 -20
- package/dist/puzzles/pyraminx/solver/browser-loader.d.ts +14 -0
- package/dist/puzzles/pyraminx/solver/browser-loader.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/browser-loader.js +63 -0
- package/dist/puzzles/pyraminx/solver/generated/centers-table.bin +0 -0
- package/dist/puzzles/pyraminx/solver/generated/manifest.json +26 -0
- package/dist/puzzles/pyraminx/solver/generated/orientation-table.bin +0 -0
- package/dist/puzzles/pyraminx/solver/generated/permutation-table.bin +0 -0
- package/dist/puzzles/pyraminx/solver/generated/policy.bin +0 -0
- package/dist/puzzles/pyraminx/solver/generated-assets.d.ts +7 -0
- package/dist/puzzles/pyraminx/solver/generated-assets.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/generated-assets.js +24 -0
- package/dist/puzzles/pyraminx/solver/index.d.ts +5 -0
- package/dist/puzzles/pyraminx/solver/index.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/index.js +4 -0
- package/dist/puzzles/pyraminx/solver/node-loader.d.ts +7 -0
- package/dist/puzzles/pyraminx/solver/node-loader.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/node-loader.js +73 -0
- package/dist/puzzles/pyraminx/solver/search.d.ts +10 -0
- package/dist/puzzles/pyraminx/solver/search.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/search.js +82 -0
- package/dist/puzzles/pyraminx/solver/table-metadata.d.ts +20 -0
- package/dist/puzzles/pyraminx/solver/table-metadata.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/table-metadata.js +19 -0
- package/dist/puzzles/pyraminx/solver/tables.d.ts +43 -0
- package/dist/puzzles/pyraminx/solver/tables.d.ts.map +1 -0
- package/dist/puzzles/pyraminx/solver/tables.js +300 -0
- package/dist/puzzles/shared/compressed-fetch.d.ts +12 -0
- package/dist/puzzles/shared/compressed-fetch.d.ts.map +1 -0
- package/dist/puzzles/shared/compressed-fetch.js +68 -0
- package/dist/puzzles/skewb/facelets.d.ts.map +1 -1
- package/dist/puzzles/skewb/facelets.js +46 -23
- package/dist/puzzles/skewb/index.d.ts +3 -1
- package/dist/puzzles/skewb/index.d.ts.map +1 -1
- package/dist/puzzles/skewb/index.js +6 -1
- package/dist/puzzles/skewb/random-state.d.ts +1 -1
- package/dist/puzzles/skewb/random-state.d.ts.map +1 -1
- package/dist/puzzles/skewb/random-state.js +25 -18
- package/dist/puzzles/skewb/scrambler.d.ts.map +1 -1
- package/dist/puzzles/skewb/scrambler.js +10 -13
- package/dist/puzzles/skewb/solver/browser-loader.d.ts +20 -0
- package/dist/puzzles/skewb/solver/browser-loader.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/browser-loader.js +86 -0
- package/dist/puzzles/skewb/solver/generated/centers-table.bin +0 -0
- package/dist/puzzles/skewb/solver/generated/helpers.bin +0 -0
- package/dist/puzzles/skewb/solver/generated/manifest.json +31 -0
- package/dist/puzzles/skewb/solver/generated/orientation-table.bin +0 -0
- package/dist/puzzles/skewb/solver/generated/permutation-table.bin +0 -0
- package/dist/puzzles/skewb/solver/generated/policy.bin +0 -0
- package/dist/puzzles/skewb/solver/generated-assets.d.ts +10 -0
- package/dist/puzzles/skewb/solver/generated-assets.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/generated-assets.js +24 -0
- package/dist/puzzles/skewb/solver/index.d.ts +5 -0
- package/dist/puzzles/skewb/solver/index.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/index.js +4 -0
- package/dist/puzzles/skewb/solver/node-loader.d.ts +10 -0
- package/dist/puzzles/skewb/solver/node-loader.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/node-loader.js +91 -0
- package/dist/puzzles/skewb/solver/search.d.ts +11 -0
- package/dist/puzzles/skewb/solver/search.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/search.js +80 -0
- package/dist/puzzles/skewb/solver/table-metadata.d.ts +27 -0
- package/dist/puzzles/skewb/solver/table-metadata.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/table-metadata.js +26 -0
- package/dist/puzzles/skewb/solver/tables.d.ts +68 -0
- package/dist/puzzles/skewb/solver/tables.d.ts.map +1 -0
- package/dist/puzzles/skewb/solver/tables.js +508 -0
- package/dist/random/prng.js +10 -1
- package/dist-cjs/core/api.js +51 -6
- package/dist-cjs/puzzles/clock/index.js +13 -4
- package/dist-cjs/puzzles/cube2/index.js +13 -4
- package/dist-cjs/puzzles/cube2/scrambler.js +2 -4
- package/dist-cjs/puzzles/cube2/solver/browser-loader.js +4 -12
- package/dist-cjs/puzzles/cube2/solver/index.js +3 -1
- package/dist-cjs/puzzles/cube2/solver/search.js +28 -0
- package/dist-cjs/puzzles/cube2/validation.js +14 -2
- package/dist-cjs/puzzles/cube3/index.js +13 -4
- package/dist-cjs/puzzles/cube3/solver/browser-loader.js +5 -29
- package/dist-cjs/puzzles/cube4/index.js +13 -4
- package/dist-cjs/puzzles/cube5x5/index.js +13 -4
- package/dist-cjs/puzzles/cube6x6/index.js +13 -4
- package/dist-cjs/puzzles/cube7x7/index.js +13 -4
- package/dist-cjs/puzzles/megaminx/index.js +13 -4
- package/dist-cjs/puzzles/pyraminx/index.js +50 -6
- package/dist-cjs/puzzles/pyraminx/scrambler.js +23 -19
- package/dist-cjs/puzzles/pyraminx/solver/browser-loader.js +68 -0
- package/dist-cjs/puzzles/pyraminx/solver/generated/centers-table.bin +0 -0
- package/dist-cjs/puzzles/pyraminx/solver/generated/manifest.json +26 -0
- package/dist-cjs/puzzles/pyraminx/solver/generated/orientation-table.bin +0 -0
- package/dist-cjs/puzzles/pyraminx/solver/generated/permutation-table.bin +0 -0
- package/dist-cjs/puzzles/pyraminx/solver/generated/policy.bin +0 -0
- package/dist-cjs/puzzles/pyraminx/solver/generated-assets.js +60 -0
- package/dist-cjs/puzzles/pyraminx/solver/index.js +23 -0
- package/dist-cjs/puzzles/pyraminx/solver/node-loader.js +79 -0
- package/dist-cjs/puzzles/pyraminx/solver/search.js +88 -0
- package/dist-cjs/puzzles/pyraminx/solver/table-metadata.js +22 -0
- package/dist-cjs/puzzles/pyraminx/solver/tables.js +327 -0
- package/dist-cjs/puzzles/shared/compressed-fetch.js +71 -0
- package/dist-cjs/puzzles/skewb/facelets.js +46 -23
- package/dist-cjs/puzzles/skewb/index.js +55 -8
- package/dist-cjs/puzzles/skewb/random-state.js +25 -18
- package/dist-cjs/puzzles/skewb/scrambler.js +9 -12
- package/dist-cjs/puzzles/skewb/solver/browser-loader.js +91 -0
- package/dist-cjs/puzzles/skewb/solver/generated/centers-table.bin +0 -0
- package/dist-cjs/puzzles/skewb/solver/generated/helpers.bin +0 -0
- package/dist-cjs/puzzles/skewb/solver/generated/manifest.json +31 -0
- package/dist-cjs/puzzles/skewb/solver/generated/orientation-table.bin +0 -0
- package/dist-cjs/puzzles/skewb/solver/generated/permutation-table.bin +0 -0
- package/dist-cjs/puzzles/skewb/solver/generated/policy.bin +0 -0
- package/dist-cjs/puzzles/skewb/solver/generated-assets.js +60 -0
- package/dist-cjs/puzzles/skewb/solver/index.js +23 -0
- package/dist-cjs/puzzles/skewb/solver/node-loader.js +97 -0
- package/dist-cjs/puzzles/skewb/solver/search.js +87 -0
- package/dist-cjs/puzzles/skewb/solver/table-metadata.js +29 -0
- package/dist-cjs/puzzles/skewb/solver/tables.js +539 -0
- package/dist-cjs/random/prng.js +10 -1
- package/package.json +20 -6
- package/dist/puzzles/pyraminx/solver.d.ts +0 -10
- package/dist/puzzles/pyraminx/solver.d.ts.map +0 -1
- package/dist/puzzles/pyraminx/solver.js +0 -160
- package/dist/puzzles/skewb/solver.d.ts +0 -11
- package/dist/puzzles/skewb/solver.d.ts.map +0 -1
- package/dist/puzzles/skewb/solver.js +0 -149
- package/dist-cjs/puzzles/pyraminx/solver.js +0 -170
- package/dist-cjs/puzzles/skewb/solver.js +0 -160
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Shared browser-only helper to fetch solver tables, preferring the
|
|
3
|
+
// precompressed .br/.gz variants (decompressed with DecompressionStream)
|
|
4
|
+
// and falling back to the raw .bin file.
|
|
5
|
+
//
|
|
6
|
+
// Node never uses this module: node-loader.ts reads the .bin files directly
|
|
7
|
+
// from the filesystem.
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.fetchTableBuffer = fetchTableBuffer;
|
|
10
|
+
// DecompressionStream only guarantees "gzip"/"deflate"; "br" support varies,
|
|
11
|
+
// so probe once and never attempt formats the runtime cannot decompress.
|
|
12
|
+
const SUPPORTED_FORMATS = (() => {
|
|
13
|
+
if (typeof DecompressionStream === "undefined")
|
|
14
|
+
return [];
|
|
15
|
+
const supported = [];
|
|
16
|
+
for (const [suffix, format] of [["br", "br"], ["gz", "gzip"]]) {
|
|
17
|
+
try {
|
|
18
|
+
new DecompressionStream(format);
|
|
19
|
+
supported.push([suffix, format]);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// format not supported by this runtime
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return supported;
|
|
26
|
+
})();
|
|
27
|
+
async function fetchTableBuffer(baseUrl, dir, file, options = {}) {
|
|
28
|
+
const urlFor = (name) => `${baseUrl}/${dir}/${name}`;
|
|
29
|
+
const cachedFetch = options.cacheName === undefined ? undefined : makeCachedFetch(options.cacheName);
|
|
30
|
+
if (options.compressed !== false && SUPPORTED_FORMATS.length > 0) {
|
|
31
|
+
for (const [suffix, format] of SUPPORTED_FORMATS) {
|
|
32
|
+
try {
|
|
33
|
+
const response = await (cachedFetch ? cachedFetch(urlFor(`${file}.${suffix}`)) : fetch(urlFor(`${file}.${suffix}`)));
|
|
34
|
+
if (response.ok && response.body) {
|
|
35
|
+
const stream = response.body.pipeThrough(new DecompressionStream(format));
|
|
36
|
+
return await new Response(stream).arrayBuffer();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// try the next candidate
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const response = await (cachedFetch ? cachedFetch(urlFor(file)) : fetch(urlFor(file)));
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
throw new Error(`Failed to load ${file}: ${response.status} ${response.statusText}`);
|
|
47
|
+
}
|
|
48
|
+
return response.arrayBuffer();
|
|
49
|
+
}
|
|
50
|
+
function makeCachedFetch(cacheName) {
|
|
51
|
+
return async (url) => {
|
|
52
|
+
if (typeof caches === "undefined") {
|
|
53
|
+
return fetch(url);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const cache = await caches.open(cacheName);
|
|
57
|
+
const cached = await cache.match(url);
|
|
58
|
+
if (cached) {
|
|
59
|
+
return cached;
|
|
60
|
+
}
|
|
61
|
+
const response = await fetch(url);
|
|
62
|
+
if (response.ok) {
|
|
63
|
+
await cache.put(url, response.clone());
|
|
64
|
+
}
|
|
65
|
+
return response;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return fetch(url);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -7,6 +7,7 @@ exports.getSkewbFaceOrder = getSkewbFaceOrder;
|
|
|
7
7
|
// Facelets model matching cubingcenter-viz/src/puzzles/skewb.ts
|
|
8
8
|
// Each face has 5 stickers: 0=center, 1=TL,2=TR,3=BL,4=BR (net layout)
|
|
9
9
|
const FACE_ORDER = ["U", "R", "F", "D", "L", "B"];
|
|
10
|
+
const FACE_INDEX = { U: 0, R: 1, F: 2, D: 3, L: 4, B: 5 };
|
|
10
11
|
// Canonical sticker faces per corner position: [UD sticker, RL sticker, FB sticker]
|
|
11
12
|
const CORNER_STICKERS = [
|
|
12
13
|
["U", "R", "F"],
|
|
@@ -29,43 +30,65 @@ const CORNER_SLOTS = [
|
|
|
29
30
|
[["D", 4], ["R", 4], ["B", 3]],
|
|
30
31
|
[["D", 3], ["L", 3], ["B", 4]],
|
|
31
32
|
];
|
|
33
|
+
// For each (position, piece, orientation) the three facelet writes, flattened:
|
|
34
|
+
// face index, sticker slot index and sticker color index, so the hot loop is
|
|
35
|
+
// pure table lookups (no tuple destructuring, no modulo).
|
|
36
|
+
const CORNER_WRITE_COUNT = 8 * 8 * 3 * 3;
|
|
37
|
+
const WRITE_FACE = new Int8Array(CORNER_WRITE_COUNT);
|
|
38
|
+
const WRITE_SLOT = new Int8Array(CORNER_WRITE_COUNT);
|
|
39
|
+
const WRITE_COLOR = new Int8Array(CORNER_WRITE_COUNT);
|
|
40
|
+
for (let pos = 0; pos < 8; pos++) {
|
|
41
|
+
const slots = CORNER_SLOTS[pos];
|
|
42
|
+
for (let piece = 0; piece < 8; piece++) {
|
|
43
|
+
const stickers = CORNER_STICKERS[piece];
|
|
44
|
+
for (let ori = 0; ori < 3; ori++) {
|
|
45
|
+
const base = ((pos * 8 + piece) * 3 + ori) * 3;
|
|
46
|
+
for (let i = 0; i < 3; i++) {
|
|
47
|
+
const [face, idx] = slots[i];
|
|
48
|
+
const color = stickers[(i + 3 - ori) % 3];
|
|
49
|
+
WRITE_FACE[base + i] = FACE_INDEX[face];
|
|
50
|
+
WRITE_SLOT[base + i] = idx;
|
|
51
|
+
WRITE_COLOR[base + i] = FACE_INDEX[color];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
32
56
|
function createSolvedSkewbFacelets() {
|
|
33
57
|
return {
|
|
34
|
-
U:
|
|
35
|
-
R:
|
|
36
|
-
F:
|
|
37
|
-
D:
|
|
38
|
-
L:
|
|
39
|
-
B:
|
|
58
|
+
U: ["U", "U", "U", "U", "U"],
|
|
59
|
+
R: ["R", "R", "R", "R", "R"],
|
|
60
|
+
F: ["F", "F", "F", "F", "F"],
|
|
61
|
+
D: ["D", "D", "D", "D", "D"],
|
|
62
|
+
L: ["L", "L", "L", "L", "L"],
|
|
63
|
+
B: ["B", "B", "B", "B", "B"],
|
|
40
64
|
};
|
|
41
65
|
}
|
|
42
66
|
function createEmptySkewbFacelets() {
|
|
43
67
|
return {
|
|
44
|
-
U:
|
|
45
|
-
R:
|
|
46
|
-
F:
|
|
47
|
-
D:
|
|
48
|
-
L:
|
|
49
|
-
B:
|
|
68
|
+
U: ["?", "?", "?", "?", "?"],
|
|
69
|
+
R: ["?", "?", "?", "?", "?"],
|
|
70
|
+
F: ["?", "?", "?", "?", "?"],
|
|
71
|
+
D: ["?", "?", "?", "?", "?"],
|
|
72
|
+
L: ["?", "?", "?", "?", "?"],
|
|
73
|
+
B: ["?", "?", "?", "?", "?"],
|
|
50
74
|
};
|
|
51
75
|
}
|
|
52
76
|
function toSkewbFacelets(state) {
|
|
53
77
|
const facelets = createEmptySkewbFacelets();
|
|
78
|
+
const faces = [facelets.U, facelets.R, facelets.F, facelets.D, facelets.L, facelets.B];
|
|
79
|
+
const perm = state.corners.permutation;
|
|
80
|
+
const orient = state.corners.orientation;
|
|
81
|
+
const centers = state.centers;
|
|
54
82
|
// centers
|
|
55
83
|
for (let face = 0; face < 6; face++) {
|
|
56
|
-
|
|
57
|
-
facelets[targetFace][0] = FACE_ORDER[state.centers[face]];
|
|
84
|
+
faces[face][0] = FACE_ORDER[centers[face]];
|
|
58
85
|
}
|
|
59
|
-
// corners
|
|
86
|
+
// corners (unrolled 3 writes per position)
|
|
60
87
|
for (let pos = 0; pos < 8; pos++) {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
for (let i = 0; i < 3; i++) {
|
|
66
|
-
const [face, idx] = slots[i];
|
|
67
|
-
facelets[face][idx] = stickers[(i + 3 - ori) % 3];
|
|
68
|
-
}
|
|
88
|
+
const base = ((pos * 8 + perm[pos]) * 3 + orient[pos]) * 3;
|
|
89
|
+
faces[WRITE_FACE[base]][WRITE_SLOT[base]] = FACE_ORDER[WRITE_COLOR[base]];
|
|
90
|
+
faces[WRITE_FACE[base + 1]][WRITE_SLOT[base + 1]] = FACE_ORDER[WRITE_COLOR[base + 1]];
|
|
91
|
+
faces[WRITE_FACE[base + 2]][WRITE_SLOT[base + 2]] = FACE_ORDER[WRITE_COLOR[base + 2]];
|
|
69
92
|
}
|
|
70
93
|
return facelets;
|
|
71
94
|
}
|
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.skewbScrambleGenerator = exports.generateSkewbScramble = exports.getStateFromIndex = exports.getStateIndex = exports.solveSkewb = exports.toSkewbFacelets = exports.getSkewbFaceOrder = exports.formatSkewbFacelets = exports.createSolvedSkewbFacelets = exports.generateRandomSkewbState = exports.isOneMoveFromSolvedSkewbState = exports.isAllowedRandomSkewbState = exports.validateSkewbState = exports.permutationParity = exports.skewbStatesEqual = exports.isSolvedSkewbState = exports.createSolvedSkewbState = exports.cloneSkewbState = exports.parseSkewbMove = exports.parseSkewbAlgorithm = exports.invertSkewbMove = exports.invertSkewbAlgorithm = exports.formatSkewbAlgorithm = exports.applySkewbMove = exports.applySkewbAlgorithm = exports.SKEWB_FACES = exports.SKEWB_MOVES = void 0;
|
|
36
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.skewbScrambleGenerator = exports.generateSkewbScramble = exports.solver = exports.getStateFromIndex = exports.getStateIndex = exports.verifySkewbSolution = exports.verifySkewbScramble = exports.solveSkewbSync = exports.solveSkewbWithInfo = exports.solveSkewb = exports.toSkewbFacelets = exports.getSkewbFaceOrder = exports.formatSkewbFacelets = exports.createSolvedSkewbFacelets = exports.generateRandomSkewbState = exports.isOneMoveFromSolvedSkewbState = exports.isAllowedRandomSkewbState = exports.validateSkewbState = exports.permutationParity = exports.skewbStatesEqual = exports.isSolvedSkewbState = exports.createSolvedSkewbState = exports.cloneSkewbState = exports.parseSkewbMove = exports.parseSkewbAlgorithm = exports.invertSkewbMove = exports.invertSkewbAlgorithm = exports.formatSkewbAlgorithm = exports.applySkewbMove = exports.applySkewbAlgorithm = exports.SKEWB_FACES = exports.SKEWB_MOVES = void 0;
|
|
37
|
+
const index_js_1 = require("../../core/index.js");
|
|
38
|
+
const scrambler_js_1 = require("./scrambler.js");
|
|
39
|
+
(0, index_js_1.registerScrambleGenerator)(scrambler_js_1.skewbScrambleGenerator);
|
|
4
40
|
var types_js_1 = require("./types.js");
|
|
5
41
|
Object.defineProperty(exports, "SKEWB_MOVES", { enumerable: true, get: function () { return types_js_1.SKEWB_MOVES; } });
|
|
6
42
|
Object.defineProperty(exports, "SKEWB_FACES", { enumerable: true, get: function () { return types_js_1.SKEWB_FACES; } });
|
|
@@ -29,10 +65,21 @@ Object.defineProperty(exports, "createSolvedSkewbFacelets", { enumerable: true,
|
|
|
29
65
|
Object.defineProperty(exports, "formatSkewbFacelets", { enumerable: true, get: function () { return facelets_js_1.formatSkewbFacelets; } });
|
|
30
66
|
Object.defineProperty(exports, "getSkewbFaceOrder", { enumerable: true, get: function () { return facelets_js_1.getSkewbFaceOrder; } });
|
|
31
67
|
Object.defineProperty(exports, "toSkewbFacelets", { enumerable: true, get: function () { return facelets_js_1.toSkewbFacelets; } });
|
|
32
|
-
var
|
|
33
|
-
Object.defineProperty(exports, "solveSkewb", { enumerable: true, get: function () { return
|
|
34
|
-
Object.defineProperty(exports, "
|
|
35
|
-
Object.defineProperty(exports, "
|
|
36
|
-
|
|
37
|
-
Object.defineProperty(exports, "
|
|
38
|
-
Object.defineProperty(exports, "
|
|
68
|
+
var index_js_2 = require("./solver/index.js");
|
|
69
|
+
Object.defineProperty(exports, "solveSkewb", { enumerable: true, get: function () { return index_js_2.solveSkewb; } });
|
|
70
|
+
Object.defineProperty(exports, "solveSkewbWithInfo", { enumerable: true, get: function () { return index_js_2.solveSkewbWithInfo; } });
|
|
71
|
+
Object.defineProperty(exports, "solveSkewbSync", { enumerable: true, get: function () { return index_js_2.solveSkewbSync; } });
|
|
72
|
+
Object.defineProperty(exports, "verifySkewbScramble", { enumerable: true, get: function () { return index_js_2.verifySkewbScramble; } });
|
|
73
|
+
Object.defineProperty(exports, "verifySkewbSolution", { enumerable: true, get: function () { return index_js_2.verifySkewbSolution; } });
|
|
74
|
+
Object.defineProperty(exports, "getStateIndex", { enumerable: true, get: function () { return index_js_2.getStateIndex; } });
|
|
75
|
+
Object.defineProperty(exports, "getStateFromIndex", { enumerable: true, get: function () { return index_js_2.getStateFromIndex; } });
|
|
76
|
+
exports.solver = __importStar(require("./solver/index.js"));
|
|
77
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
78
|
+
Object.defineProperty(exports, "generateSkewbScramble", { enumerable: true, get: function () { return scrambler_js_2.generateSkewbScramble; } });
|
|
79
|
+
Object.defineProperty(exports, "skewbScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.skewbScrambleGenerator; } });
|
|
80
|
+
var index_js_3 = require("../../core/index.js");
|
|
81
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_3.generateScramble; } });
|
|
82
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_3.generateScrambles; } });
|
|
83
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_3.getEventInfo; } });
|
|
84
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_3.getSupportedEvents; } });
|
|
85
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_3.initializeScrambler; } });
|
|
@@ -2,29 +2,36 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateRandomSkewbState = generateRandomSkewbState;
|
|
4
4
|
const index_js_1 = require("../../random/index.js");
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const types_js_1 = require("./types.js");
|
|
9
|
-
function generateRandomSkewbState(options = {}) {
|
|
5
|
+
const index_js_2 = require("./solver/index.js");
|
|
6
|
+
async function generateRandomSkewbState(options = {}) {
|
|
7
|
+
await (0, index_js_2.ensureTablesLoaded)();
|
|
10
8
|
const random = (0, index_js_1.createRandomSource)(options.seed);
|
|
11
9
|
const rejectTrivial = options.rejectTrivial ?? true;
|
|
10
|
+
const trivialRanks = rejectTrivial ? getTrivialRanks() : null;
|
|
11
|
+
// Exact uniform sampling: the compact rank is a bijection over the
|
|
12
|
+
// 3,149,280 reachable states, so a uniform rank gives every state exactly
|
|
13
|
+
// the same probability (unlike a finite random walk, which only approaches
|
|
14
|
+
// uniformity). Trivial states (solved / one move from solved) are rejected
|
|
15
|
+
// and resampled, which keeps the conditional distribution uniform.
|
|
12
16
|
for (let attempt = 0; attempt < 100; attempt++) {
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
15
|
-
|
|
17
|
+
const rank = random.nextInt(index_js_2.STATE_COUNT);
|
|
18
|
+
if (trivialRanks && trivialRanks.has(rank))
|
|
19
|
+
continue;
|
|
20
|
+
return (0, index_js_2.getStateFromRank)(rank);
|
|
16
21
|
}
|
|
17
22
|
throw new Error("Unable to generate a non-trivial random Skewb state.");
|
|
18
23
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
let trivialRanks = null;
|
|
25
|
+
function getTrivialRanks() {
|
|
26
|
+
if (!trivialRanks) {
|
|
27
|
+
const ranks = new Set([index_js_2.SOLVED_RANK]);
|
|
28
|
+
for (let m = 0; m < index_js_2.MOVE_COUNT; m++) {
|
|
29
|
+
const r7 = (0, index_js_2.getPermutationTransition)(0, m);
|
|
30
|
+
const rO = (0, index_js_2.getOrientationTransition)(0, m);
|
|
31
|
+
const rC = (0, index_js_2.getCentersTransition)(0, m);
|
|
32
|
+
ranks.add((0, index_js_2.rankFromComponents)(r7, rO, rC));
|
|
33
|
+
}
|
|
34
|
+
trivialRanks = ranks;
|
|
28
35
|
}
|
|
29
|
-
return
|
|
36
|
+
return trivialRanks;
|
|
30
37
|
}
|
|
@@ -3,9 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.skewbScrambleGenerator = void 0;
|
|
4
4
|
exports.generateSkewbScramble = generateSkewbScramble;
|
|
5
5
|
const random_state_js_1 = require("./random-state.js");
|
|
6
|
-
const state_js_1 = require("./state.js");
|
|
7
6
|
const moves_js_1 = require("./moves.js");
|
|
8
|
-
const
|
|
7
|
+
const index_js_1 = require("./solver/index.js");
|
|
9
8
|
const facelets_js_1 = require("./facelets.js");
|
|
10
9
|
exports.skewbScrambleGenerator = {
|
|
11
10
|
info: {
|
|
@@ -13,25 +12,23 @@ exports.skewbScrambleGenerator = {
|
|
|
13
12
|
name: "Skewb",
|
|
14
13
|
puzzle: "skewb",
|
|
15
14
|
quality: "random-state",
|
|
16
|
-
generator: "skewb-
|
|
17
|
-
description: "Random-state Skewb scramble generated by an optimal
|
|
15
|
+
generator: "skewb-optimal",
|
|
16
|
+
description: "Random-state Skewb scramble generated by an optimal solver with precalculated tables.",
|
|
18
17
|
},
|
|
19
18
|
generate(options = {}) {
|
|
20
19
|
return generateSkewbScramble(options);
|
|
21
20
|
},
|
|
22
21
|
};
|
|
23
22
|
async function generateSkewbScramble(options = {}) {
|
|
24
|
-
const state = (0, random_state_js_1.generateRandomSkewbState)(options);
|
|
25
|
-
const solution = (0,
|
|
23
|
+
const state = await (0, random_state_js_1.generateRandomSkewbState)(options);
|
|
24
|
+
const solution = await (0, index_js_1.solveSkewb)(state);
|
|
26
25
|
const scrambleMoves = (0, moves_js_1.invertSkewbAlgorithm)(solution);
|
|
27
26
|
if (!options.skipValidation) {
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
// If the scramble reproduces the target state, its inverse (the
|
|
28
|
+
// solution) solves it by construction, so a single walk suffices.
|
|
29
|
+
if (!(0, index_js_1.verifySkewbScramble)(state, scrambleMoves)) {
|
|
30
30
|
throw new Error("Generated Skewb scramble does not reproduce the target random state.");
|
|
31
31
|
}
|
|
32
|
-
if (!(0, state_js_1.isSolvedSkewbState)((0, moves_js_1.applySkewbAlgorithm)(state, solution))) {
|
|
33
|
-
throw new Error("Generated Skewb solution does not solve the target random state.");
|
|
34
|
-
}
|
|
35
32
|
if (scrambleMoves.length < 2)
|
|
36
33
|
throw new Error("Generated Skewb scramble is too short.");
|
|
37
34
|
}
|
|
@@ -41,7 +38,7 @@ async function generateSkewbScramble(options = {}) {
|
|
|
41
38
|
scramble: (0, moves_js_1.formatSkewbAlgorithm)(scrambleMoves),
|
|
42
39
|
moves: scrambleMoves,
|
|
43
40
|
quality: "random-state",
|
|
44
|
-
generator: "skewb-
|
|
41
|
+
generator: "skewb-optimal",
|
|
45
42
|
metadata: {
|
|
46
43
|
state,
|
|
47
44
|
facelets,
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCachedBrowserTables = getCachedBrowserTables;
|
|
4
|
+
exports.clearCachedBrowserTables = clearCachedBrowserTables;
|
|
5
|
+
exports.loadBrowserTables = loadBrowserTables;
|
|
6
|
+
const table_metadata_js_1 = require("./table-metadata.js");
|
|
7
|
+
const compressed_fetch_js_1 = require("../../shared/compressed-fetch.js");
|
|
8
|
+
const TABLES_DIR = "puzzles/skewb/solver/generated";
|
|
9
|
+
let cachedBrowserTables;
|
|
10
|
+
function getCachedBrowserTables() {
|
|
11
|
+
return cachedBrowserTables;
|
|
12
|
+
}
|
|
13
|
+
function clearCachedBrowserTables() {
|
|
14
|
+
cachedBrowserTables = undefined;
|
|
15
|
+
}
|
|
16
|
+
async function loadBrowserTables(baseUrl) {
|
|
17
|
+
if (cachedBrowserTables) {
|
|
18
|
+
return cachedBrowserTables;
|
|
19
|
+
}
|
|
20
|
+
const resolved = resolveBaseUrl(baseUrl);
|
|
21
|
+
const manifest = await fetchManifest(resolved);
|
|
22
|
+
const [permTable, orientTable, centersTable, helpers, policy] = await Promise.all([
|
|
23
|
+
fetchUint16Table(resolved, manifest.files.permutationTable, table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA.permutationTable.entries),
|
|
24
|
+
fetchUint16Table(resolved, manifest.files.orientationTable, table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA.orientationTable.entries),
|
|
25
|
+
fetchUint16Table(resolved, manifest.files.centersTable, table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA.centersTable.entries),
|
|
26
|
+
fetchUint8Table(resolved, manifest.files.helpers, table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA.helpers.entries),
|
|
27
|
+
fetchUint8Table(resolved, manifest.files.policyTable, table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA.policyTable.entries)
|
|
28
|
+
]);
|
|
29
|
+
const helpersOffset = table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA.helpers;
|
|
30
|
+
const evenCenterRank = new Uint16Array(helpersOffset.evenCenterRankBytes / 2);
|
|
31
|
+
const rankView = new DataView(helpers.buffer, helpers.byteOffset);
|
|
32
|
+
for (let i = 0; i < evenCenterRank.length; i++) {
|
|
33
|
+
evenCenterRank[i] = rankView.getUint16(i * 2, true);
|
|
34
|
+
}
|
|
35
|
+
const orientClass = helpers.subarray(helpersOffset.evenCenterRankBytes, helpersOffset.evenCenterRankBytes + helpersOffset.orientClassBytes);
|
|
36
|
+
const r7Sets = new Uint16Array(helpersOffset.r7SetsEntries);
|
|
37
|
+
const view = new DataView(helpers.buffer, helpers.byteOffset + helpersOffset.evenCenterRankBytes + helpersOffset.orientClassBytes);
|
|
38
|
+
for (let i = 0; i < r7Sets.length; i++) {
|
|
39
|
+
r7Sets[i] = view.getUint16(i * 2, true);
|
|
40
|
+
}
|
|
41
|
+
cachedBrowserTables = {
|
|
42
|
+
permutationTable: permTable,
|
|
43
|
+
orientationTable: orientTable,
|
|
44
|
+
centersTable,
|
|
45
|
+
policyTable: policy,
|
|
46
|
+
evenCenterRank,
|
|
47
|
+
orientClass,
|
|
48
|
+
r7Sets
|
|
49
|
+
};
|
|
50
|
+
return cachedBrowserTables;
|
|
51
|
+
}
|
|
52
|
+
function resolveBaseUrl(provided) {
|
|
53
|
+
if (provided) {
|
|
54
|
+
return provided.replace(/\/$/, "");
|
|
55
|
+
}
|
|
56
|
+
if (typeof document !== "undefined") {
|
|
57
|
+
const script = document.currentScript;
|
|
58
|
+
if (script?.src) {
|
|
59
|
+
const base = new URL(".", script.src).href;
|
|
60
|
+
return base.replace(/\/$/, "");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return ".";
|
|
64
|
+
}
|
|
65
|
+
async function fetchManifest(baseUrl) {
|
|
66
|
+
const url = `${baseUrl}/puzzles/skewb/solver/generated/manifest.json`;
|
|
67
|
+
const response = await fetch(url);
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
throw new Error(`Failed to load skewb solver table manifest from ${url}: ${response.status} ${response.statusText}`);
|
|
70
|
+
}
|
|
71
|
+
return await response.json();
|
|
72
|
+
}
|
|
73
|
+
async function fetchUint16Table(baseUrl, entry, expectedEntries) {
|
|
74
|
+
const buffer = await (0, compressed_fetch_js_1.fetchTableBuffer)(baseUrl, TABLES_DIR, entry.file, { compressed: entry.compressed !== false });
|
|
75
|
+
if (buffer.byteLength !== expectedEntries * 2) {
|
|
76
|
+
throw new Error(`Invalid byte size for ${entry.file}`);
|
|
77
|
+
}
|
|
78
|
+
const values = new Uint16Array(expectedEntries);
|
|
79
|
+
const view = new DataView(buffer);
|
|
80
|
+
for (let i = 0; i < values.length; i++) {
|
|
81
|
+
values[i] = view.getUint16(i * 2, true);
|
|
82
|
+
}
|
|
83
|
+
return values;
|
|
84
|
+
}
|
|
85
|
+
async function fetchUint8Table(baseUrl, entry, expectedEntries) {
|
|
86
|
+
const buffer = await (0, compressed_fetch_js_1.fetchTableBuffer)(baseUrl, TABLES_DIR, entry.file, { compressed: entry.compressed !== false });
|
|
87
|
+
if (buffer.byteLength !== expectedEntries) {
|
|
88
|
+
throw new Error(`Invalid byte size for ${entry.file}`);
|
|
89
|
+
}
|
|
90
|
+
return new Uint8Array(buffer);
|
|
91
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"files": {
|
|
4
|
+
"permutationTable": {
|
|
5
|
+
"file": "permutation-table.bin",
|
|
6
|
+
"entries": 40320,
|
|
7
|
+
"checksum": 3073532981
|
|
8
|
+
},
|
|
9
|
+
"orientationTable": {
|
|
10
|
+
"file": "orientation-table.bin",
|
|
11
|
+
"entries": 17496,
|
|
12
|
+
"checksum": 2128852053
|
|
13
|
+
},
|
|
14
|
+
"centersTable": {
|
|
15
|
+
"file": "centers-table.bin",
|
|
16
|
+
"entries": 5760,
|
|
17
|
+
"checksum": 360885765
|
|
18
|
+
},
|
|
19
|
+
"helpers": {
|
|
20
|
+
"file": "helpers.bin",
|
|
21
|
+
"entries": 29547,
|
|
22
|
+
"checksum": 4284555735
|
|
23
|
+
},
|
|
24
|
+
"policyTable": {
|
|
25
|
+
"file": "policy.bin",
|
|
26
|
+
"entries": 1180980,
|
|
27
|
+
"checksum": 1294485891,
|
|
28
|
+
"maxDepth": 11
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadGeneratedSkewbSolverTables = loadGeneratedSkewbSolverTables;
|
|
37
|
+
const browser_loader_js_1 = require("./browser-loader.js");
|
|
38
|
+
let cachedTables;
|
|
39
|
+
function isBrowser() {
|
|
40
|
+
return typeof self !== "undefined";
|
|
41
|
+
}
|
|
42
|
+
async function loadGeneratedSkewbSolverTables() {
|
|
43
|
+
if (isBrowser()) {
|
|
44
|
+
const browserTables = (0, browser_loader_js_1.getCachedBrowserTables)();
|
|
45
|
+
if (browserTables)
|
|
46
|
+
return browserTables;
|
|
47
|
+
throw new Error("Skewb solver tables are not loaded. " +
|
|
48
|
+
"In browser environments, call `initializeScrambler(baseUrl)` " +
|
|
49
|
+
"before generating scrambles.");
|
|
50
|
+
}
|
|
51
|
+
cachedTables ??= await loadNodeTables();
|
|
52
|
+
return cachedTables;
|
|
53
|
+
}
|
|
54
|
+
async function loadNodeTables() {
|
|
55
|
+
const loader = await Promise.resolve().then(() => __importStar(require(
|
|
56
|
+
/* webpackIgnore: true */
|
|
57
|
+
/* @vite-ignore */
|
|
58
|
+
"./node-loader.js")));
|
|
59
|
+
return loader.readGeneratedSkewbSolverTables();
|
|
60
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.loadGeneratedSkewbSolverTables = exports.SKEWB_SOLVER_TABLE_METADATA = void 0;
|
|
18
|
+
__exportStar(require("./tables.js"), exports);
|
|
19
|
+
__exportStar(require("./search.js"), exports);
|
|
20
|
+
var table_metadata_js_1 = require("./table-metadata.js");
|
|
21
|
+
Object.defineProperty(exports, "SKEWB_SOLVER_TABLE_METADATA", { enumerable: true, get: function () { return table_metadata_js_1.SKEWB_SOLVER_TABLE_METADATA; } });
|
|
22
|
+
var generated_assets_js_1 = require("./generated-assets.js");
|
|
23
|
+
Object.defineProperty(exports, "loadGeneratedSkewbSolverTables", { enumerable: true, get: function () { return generated_assets_js_1.loadGeneratedSkewbSolverTables; } });
|