@cubingcenter/scrambler 0.4.0 → 0.4.1
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 +46 -3
- package/dist/core/api.d.ts.map +1 -1
- package/dist/core/api.js +13 -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/index.d.ts +1 -0
- package/dist/puzzles/skewb/index.d.ts.map +1 -1
- package/dist/puzzles/skewb/index.js +4 -0
- package/dist-cjs/core/api.js +46 -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/index.js +13 -4
- package/package.json +17 -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-cjs/puzzles/pyraminx/solver.js +0 -170
|
@@ -7,6 +7,17 @@ exports.permutationParity = permutationParity;
|
|
|
7
7
|
const types_js_1 = require("./types.js");
|
|
8
8
|
const moves_js_1 = require("./moves.js");
|
|
9
9
|
const state_js_1 = require("./state.js");
|
|
10
|
+
const tables_js_1 = require("./solver/tables.js");
|
|
11
|
+
// Precomputed coordinate encodings of every single-move state, so the
|
|
12
|
+
// "one move from solved" check is a couple of O(n) encodings + 18 comparisons
|
|
13
|
+
// instead of 18 full state applications.
|
|
14
|
+
const ONE_MOVE_FROM_SOLVED_ENCODED = types_js_1.CUBE2_MOVES.map((move) => {
|
|
15
|
+
const state = (0, moves_js_1.applyCube2Move)((0, state_js_1.createSolvedCube2State)(), move);
|
|
16
|
+
return {
|
|
17
|
+
p: (0, tables_js_1.encodePermutation)(state.corners.permutation),
|
|
18
|
+
o: (0, tables_js_1.encodeOrientation)(state.corners.orientation)
|
|
19
|
+
};
|
|
20
|
+
});
|
|
10
21
|
function validateCube2State(state) {
|
|
11
22
|
const errors = [
|
|
12
23
|
...validatePermutation("corner", state.corners.permutation, types_js_1.CORNER_COUNT),
|
|
@@ -24,8 +35,9 @@ function validateCube2State(state) {
|
|
|
24
35
|
};
|
|
25
36
|
}
|
|
26
37
|
function isOneMoveFromSolvedCube2State(state) {
|
|
27
|
-
const
|
|
28
|
-
|
|
38
|
+
const p = (0, tables_js_1.encodePermutation)(state.corners.permutation);
|
|
39
|
+
const o = (0, tables_js_1.encodeOrientation)(state.corners.orientation);
|
|
40
|
+
return ONE_MOVE_FROM_SOLVED_ENCODED.some((entry) => entry.p === p && entry.o === o);
|
|
29
41
|
}
|
|
30
42
|
function isAllowedRandomCube2State(state) {
|
|
31
43
|
return validateCube2State(state).valid &&
|
|
@@ -33,7 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.solver = exports.toCube3Facelets = exports.getCube3FaceOrder = exports.formatCube3Facelets = exports.generateCube3Scramble = exports.cube3ScrambleGenerator = exports.generateRandomCube3State = exports.validateCube3State = exports.permutationParity = exports.isOneMoveFromSolvedCube3State = exports.isAllowedRandomCube3State = exports.isSolvedCube3State = exports.cube3StatesEqual = exports.createSolvedCube3State = exports.cloneCube3State = exports.parseCube3Move = exports.parseCube3Algorithm = exports.invertCube3Move = exports.invertCube3Algorithm = exports.formatCube3Algorithm = exports.applyCube3Move = exports.applyCube3Algorithm = exports.EDGE_COUNT = exports.CORNER_COUNT = exports.CUBE3_MOVES = void 0;
|
|
36
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.solver = exports.toCube3Facelets = exports.getCube3FaceOrder = exports.formatCube3Facelets = exports.generateCube3Scramble = exports.cube3ScrambleGenerator = exports.generateRandomCube3State = exports.validateCube3State = exports.permutationParity = exports.isOneMoveFromSolvedCube3State = exports.isAllowedRandomCube3State = exports.isSolvedCube3State = exports.cube3StatesEqual = exports.createSolvedCube3State = exports.cloneCube3State = exports.parseCube3Move = exports.parseCube3Algorithm = exports.invertCube3Move = exports.invertCube3Algorithm = exports.formatCube3Algorithm = exports.applyCube3Move = exports.applyCube3Algorithm = exports.EDGE_COUNT = exports.CORNER_COUNT = exports.CUBE3_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.cube3ScrambleGenerator);
|
|
37
40
|
var types_js_1 = require("./types.js");
|
|
38
41
|
Object.defineProperty(exports, "CUBE3_MOVES", { enumerable: true, get: function () { return types_js_1.CUBE3_MOVES; } });
|
|
39
42
|
Object.defineProperty(exports, "CORNER_COUNT", { enumerable: true, get: function () { return types_js_1.CORNER_COUNT; } });
|
|
@@ -58,11 +61,17 @@ Object.defineProperty(exports, "permutationParity", { enumerable: true, get: fun
|
|
|
58
61
|
Object.defineProperty(exports, "validateCube3State", { enumerable: true, get: function () { return validation_js_1.validateCube3State; } });
|
|
59
62
|
var random_state_js_1 = require("./random-state.js");
|
|
60
63
|
Object.defineProperty(exports, "generateRandomCube3State", { enumerable: true, get: function () { return random_state_js_1.generateRandomCube3State; } });
|
|
61
|
-
var
|
|
62
|
-
Object.defineProperty(exports, "cube3ScrambleGenerator", { enumerable: true, get: function () { return
|
|
63
|
-
Object.defineProperty(exports, "generateCube3Scramble", { enumerable: true, get: function () { return
|
|
64
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
65
|
+
Object.defineProperty(exports, "cube3ScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.cube3ScrambleGenerator; } });
|
|
66
|
+
Object.defineProperty(exports, "generateCube3Scramble", { enumerable: true, get: function () { return scrambler_js_2.generateCube3Scramble; } });
|
|
64
67
|
var facelets_js_1 = require("./facelets.js");
|
|
65
68
|
Object.defineProperty(exports, "formatCube3Facelets", { enumerable: true, get: function () { return facelets_js_1.formatCube3Facelets; } });
|
|
66
69
|
Object.defineProperty(exports, "getCube3FaceOrder", { enumerable: true, get: function () { return facelets_js_1.getCube3FaceOrder; } });
|
|
67
70
|
Object.defineProperty(exports, "toCube3Facelets", { enumerable: true, get: function () { return facelets_js_1.toCube3Facelets; } });
|
|
68
71
|
exports.solver = __importStar(require("./solver/index.js"));
|
|
72
|
+
var index_js_2 = require("../../core/index.js");
|
|
73
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_2.generateScramble; } });
|
|
74
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_2.generateScrambles; } });
|
|
75
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_2.getEventInfo; } });
|
|
76
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_2.getSupportedEvents; } });
|
|
77
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_2.initializeScrambler; } });
|
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getCachedBrowserTables = getCachedBrowserTables;
|
|
4
4
|
exports.clearCachedBrowserTables = clearCachedBrowserTables;
|
|
5
5
|
exports.loadBrowserTables = loadBrowserTables;
|
|
6
|
+
const compressed_fetch_js_1 = require("../../shared/compressed-fetch.js");
|
|
7
|
+
const TABLES_DIR = "puzzles/cube3/solver/generated";
|
|
8
|
+
const CACHE_NAME = "cubingcenter-scrambler-tables-v1";
|
|
6
9
|
let browserTables;
|
|
7
10
|
function resolveBaseUrl(provided) {
|
|
8
11
|
if (provided) {
|
|
@@ -54,31 +57,6 @@ async function loadBrowserTables(baseUrl) {
|
|
|
54
57
|
};
|
|
55
58
|
return browserTables;
|
|
56
59
|
}
|
|
57
|
-
const CACHE_NAME = "cubingcenter-scrambler-tables-v1";
|
|
58
|
-
async function cachedFetch(url) {
|
|
59
|
-
// Try Cache API first
|
|
60
|
-
if (typeof caches !== "undefined") {
|
|
61
|
-
try {
|
|
62
|
-
const cache = await caches.open(CACHE_NAME);
|
|
63
|
-
const cached = await cache.match(url);
|
|
64
|
-
if (cached) {
|
|
65
|
-
return cached.arrayBuffer();
|
|
66
|
-
}
|
|
67
|
-
const response = await fetch(url);
|
|
68
|
-
if (response.ok) {
|
|
69
|
-
// Clone before reading so we can store the clone
|
|
70
|
-
await cache.put(url, response.clone());
|
|
71
|
-
}
|
|
72
|
-
return response.arrayBuffer();
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
// Cache API failed (e.g. quota exceeded, private mode) — fall through
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Fallback: plain fetch
|
|
79
|
-
const response = await fetch(url);
|
|
80
|
-
return response.arrayBuffer();
|
|
81
|
-
}
|
|
82
60
|
async function fetchManifest(baseUrl) {
|
|
83
61
|
const url = `${baseUrl}/puzzles/cube3/solver/generated/manifest.json`;
|
|
84
62
|
const response = await fetch(url);
|
|
@@ -92,8 +70,7 @@ async function fetchManifest(baseUrl) {
|
|
|
92
70
|
return manifest;
|
|
93
71
|
}
|
|
94
72
|
async function fetchMoveTable(baseUrl, entry) {
|
|
95
|
-
const
|
|
96
|
-
const buffer = await cachedFetch(url);
|
|
73
|
+
const buffer = await (0, compressed_fetch_js_1.fetchTableBuffer)(baseUrl, TABLES_DIR, entry.file, { cacheName: CACHE_NAME, compressed: entry.compressed !== false });
|
|
97
74
|
const expectedBytes = entry.range * entry.moves.length * 4;
|
|
98
75
|
if (buffer.byteLength !== expectedBytes) {
|
|
99
76
|
throw new Error(`Invalid byte size for ${entry.coordinate} move table.`);
|
|
@@ -113,8 +90,7 @@ async function fetchMoveTable(baseUrl, entry) {
|
|
|
113
90
|
};
|
|
114
91
|
}
|
|
115
92
|
async function fetchPruningTable(baseUrl, entry) {
|
|
116
|
-
const
|
|
117
|
-
const buffer = await cachedFetch(url);
|
|
93
|
+
const buffer = await (0, compressed_fetch_js_1.fetchTableBuffer)(baseUrl, TABLES_DIR, entry.file, { cacheName: CACHE_NAME, compressed: entry.compressed !== false });
|
|
118
94
|
const expectedBytes = Math.ceil(entry.range / 2);
|
|
119
95
|
if (buffer.byteLength !== expectedBytes) {
|
|
120
96
|
throw new Error(`Invalid byte size for ${entry.coordinate} pruning table.`);
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
// cube4 barrel exports
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getCube4FaceOrder = exports.formatCube4Facelets = exports.toCube4Facelets = exports.generateCube4Scramble = exports.cube4ScrambleGenerator = exports.FACE_MOVE_EFFECTS = exports.parseMove = exports.parseCube4Move = exports.parseCube4Algorithm = exports.formatCube4Algorithm = exports.invertCube4Algorithm = exports.invertCube4Move = exports.applyCube4Algorithm = exports.applyCube4Move = exports.areWingsPaired = exports.areCentersReduced = exports.isSolvedCube4State = exports.cube4StatesEqual = exports.cloneCube4State = exports.createSolvedCube4State = exports.CUBE4_OUTER_MOVES = exports.CUBE4_ALL_MOVES = exports.CUBE4_FACE_MOVES = exports.B = exports.L = exports.D = exports.F = exports.R = exports.U = exports.CENTERS_PER_FACE = exports.FACE_COUNT = exports.CENTER_COUNT = exports.WING_COUNT = exports.CORNER_COUNT = void 0;
|
|
6
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.getCube4FaceOrder = exports.formatCube4Facelets = exports.toCube4Facelets = exports.generateCube4Scramble = exports.cube4ScrambleGenerator = exports.FACE_MOVE_EFFECTS = exports.parseMove = exports.parseCube4Move = exports.parseCube4Algorithm = exports.formatCube4Algorithm = exports.invertCube4Algorithm = exports.invertCube4Move = exports.applyCube4Algorithm = exports.applyCube4Move = exports.areWingsPaired = exports.areCentersReduced = exports.isSolvedCube4State = exports.cube4StatesEqual = exports.cloneCube4State = exports.createSolvedCube4State = exports.CUBE4_OUTER_MOVES = exports.CUBE4_ALL_MOVES = exports.CUBE4_FACE_MOVES = exports.B = exports.L = exports.D = exports.F = exports.R = exports.U = exports.CENTERS_PER_FACE = exports.FACE_COUNT = exports.CENTER_COUNT = exports.WING_COUNT = exports.CORNER_COUNT = void 0;
|
|
7
|
+
const index_js_1 = require("../../core/index.js");
|
|
8
|
+
const scrambler_js_1 = require("./scrambler.js");
|
|
9
|
+
(0, index_js_1.registerScrambleGenerator)(scrambler_js_1.cube4ScrambleGenerator);
|
|
7
10
|
var types_js_1 = require("./types.js");
|
|
8
11
|
Object.defineProperty(exports, "CORNER_COUNT", { enumerable: true, get: function () { return types_js_1.CORNER_COUNT; } });
|
|
9
12
|
Object.defineProperty(exports, "WING_COUNT", { enumerable: true, get: function () { return types_js_1.WING_COUNT; } });
|
|
@@ -36,10 +39,16 @@ Object.defineProperty(exports, "parseCube4Algorithm", { enumerable: true, get: f
|
|
|
36
39
|
Object.defineProperty(exports, "parseCube4Move", { enumerable: true, get: function () { return moves_js_1.parseCube4Move; } });
|
|
37
40
|
Object.defineProperty(exports, "parseMove", { enumerable: true, get: function () { return moves_js_1.parseMove; } });
|
|
38
41
|
Object.defineProperty(exports, "FACE_MOVE_EFFECTS", { enumerable: true, get: function () { return moves_js_1.FACE_MOVE_EFFECTS; } });
|
|
39
|
-
var
|
|
40
|
-
Object.defineProperty(exports, "cube4ScrambleGenerator", { enumerable: true, get: function () { return
|
|
41
|
-
Object.defineProperty(exports, "generateCube4Scramble", { enumerable: true, get: function () { return
|
|
42
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
43
|
+
Object.defineProperty(exports, "cube4ScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.cube4ScrambleGenerator; } });
|
|
44
|
+
Object.defineProperty(exports, "generateCube4Scramble", { enumerable: true, get: function () { return scrambler_js_2.generateCube4Scramble; } });
|
|
42
45
|
var facelets_js_1 = require("./facelets.js");
|
|
43
46
|
Object.defineProperty(exports, "toCube4Facelets", { enumerable: true, get: function () { return facelets_js_1.toCube4Facelets; } });
|
|
44
47
|
Object.defineProperty(exports, "formatCube4Facelets", { enumerable: true, get: function () { return facelets_js_1.formatCube4Facelets; } });
|
|
45
48
|
Object.defineProperty(exports, "getCube4FaceOrder", { enumerable: true, get: function () { return facelets_js_1.getCube4FaceOrder; } });
|
|
49
|
+
var index_js_2 = require("../../core/index.js");
|
|
50
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_2.generateScramble; } });
|
|
51
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_2.generateScrambles; } });
|
|
52
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_2.getEventInfo; } });
|
|
53
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_2.getSupportedEvents; } });
|
|
54
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_2.initializeScrambler; } });
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateCube5Scramble = exports.cube5ScrambleGenerator = exports.SCRAMBLE_LENGTH = exports.CUBE5_ALL_MOVES = void 0;
|
|
3
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.generateCube5Scramble = exports.cube5ScrambleGenerator = exports.SCRAMBLE_LENGTH = exports.CUBE5_ALL_MOVES = void 0;
|
|
4
|
+
const index_js_1 = require("../../core/index.js");
|
|
5
|
+
const scrambler_js_1 = require("./scrambler.js");
|
|
6
|
+
(0, index_js_1.registerScrambleGenerator)(scrambler_js_1.cube5ScrambleGenerator);
|
|
4
7
|
var types_js_1 = require("./types.js");
|
|
5
8
|
Object.defineProperty(exports, "CUBE5_ALL_MOVES", { enumerable: true, get: function () { return types_js_1.CUBE5_ALL_MOVES; } });
|
|
6
9
|
Object.defineProperty(exports, "SCRAMBLE_LENGTH", { enumerable: true, get: function () { return types_js_1.SCRAMBLE_LENGTH; } });
|
|
7
|
-
var
|
|
8
|
-
Object.defineProperty(exports, "cube5ScrambleGenerator", { enumerable: true, get: function () { return
|
|
9
|
-
Object.defineProperty(exports, "generateCube5Scramble", { enumerable: true, get: function () { return
|
|
10
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
11
|
+
Object.defineProperty(exports, "cube5ScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.cube5ScrambleGenerator; } });
|
|
12
|
+
Object.defineProperty(exports, "generateCube5Scramble", { enumerable: true, get: function () { return scrambler_js_2.generateCube5Scramble; } });
|
|
13
|
+
var index_js_2 = require("../../core/index.js");
|
|
14
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_2.generateScramble; } });
|
|
15
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_2.generateScrambles; } });
|
|
16
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_2.getEventInfo; } });
|
|
17
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_2.getSupportedEvents; } });
|
|
18
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_2.initializeScrambler; } });
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateCube6Scramble = exports.cube6ScrambleGenerator = exports.SCRAMBLE_LENGTH = exports.CUBE6_ALL_MOVES = void 0;
|
|
3
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.generateCube6Scramble = exports.cube6ScrambleGenerator = exports.SCRAMBLE_LENGTH = exports.CUBE6_ALL_MOVES = void 0;
|
|
4
|
+
const index_js_1 = require("../../core/index.js");
|
|
5
|
+
const scrambler_js_1 = require("./scrambler.js");
|
|
6
|
+
(0, index_js_1.registerScrambleGenerator)(scrambler_js_1.cube6ScrambleGenerator);
|
|
4
7
|
var types_js_1 = require("./types.js");
|
|
5
8
|
Object.defineProperty(exports, "CUBE6_ALL_MOVES", { enumerable: true, get: function () { return types_js_1.CUBE6_ALL_MOVES; } });
|
|
6
9
|
Object.defineProperty(exports, "SCRAMBLE_LENGTH", { enumerable: true, get: function () { return types_js_1.SCRAMBLE_LENGTH; } });
|
|
7
|
-
var
|
|
8
|
-
Object.defineProperty(exports, "cube6ScrambleGenerator", { enumerable: true, get: function () { return
|
|
9
|
-
Object.defineProperty(exports, "generateCube6Scramble", { enumerable: true, get: function () { return
|
|
10
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
11
|
+
Object.defineProperty(exports, "cube6ScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.cube6ScrambleGenerator; } });
|
|
12
|
+
Object.defineProperty(exports, "generateCube6Scramble", { enumerable: true, get: function () { return scrambler_js_2.generateCube6Scramble; } });
|
|
13
|
+
var index_js_2 = require("../../core/index.js");
|
|
14
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_2.generateScramble; } });
|
|
15
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_2.generateScrambles; } });
|
|
16
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_2.getEventInfo; } });
|
|
17
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_2.getSupportedEvents; } });
|
|
18
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_2.initializeScrambler; } });
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateCube7Scramble = exports.cube7ScrambleGenerator = exports.SCRAMBLE_LENGTH = exports.CUBE7_ALL_MOVES = void 0;
|
|
3
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.generateCube7Scramble = exports.cube7ScrambleGenerator = exports.SCRAMBLE_LENGTH = exports.CUBE7_ALL_MOVES = void 0;
|
|
4
|
+
const index_js_1 = require("../../core/index.js");
|
|
5
|
+
const scrambler_js_1 = require("./scrambler.js");
|
|
6
|
+
(0, index_js_1.registerScrambleGenerator)(scrambler_js_1.cube7ScrambleGenerator);
|
|
4
7
|
var types_js_1 = require("./types.js");
|
|
5
8
|
Object.defineProperty(exports, "CUBE7_ALL_MOVES", { enumerable: true, get: function () { return types_js_1.CUBE7_ALL_MOVES; } });
|
|
6
9
|
Object.defineProperty(exports, "SCRAMBLE_LENGTH", { enumerable: true, get: function () { return types_js_1.SCRAMBLE_LENGTH; } });
|
|
7
|
-
var
|
|
8
|
-
Object.defineProperty(exports, "cube7ScrambleGenerator", { enumerable: true, get: function () { return
|
|
9
|
-
Object.defineProperty(exports, "generateCube7Scramble", { enumerable: true, get: function () { return
|
|
10
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
11
|
+
Object.defineProperty(exports, "cube7ScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.cube7ScrambleGenerator; } });
|
|
12
|
+
Object.defineProperty(exports, "generateCube7Scramble", { enumerable: true, get: function () { return scrambler_js_2.generateCube7Scramble; } });
|
|
13
|
+
var index_js_2 = require("../../core/index.js");
|
|
14
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_2.generateScramble; } });
|
|
15
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_2.generateScrambles; } });
|
|
16
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_2.getEventInfo; } });
|
|
17
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_2.getSupportedEvents; } });
|
|
18
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_2.initializeScrambler; } });
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateMegaminxScramble = exports.megaminxScrambleGenerator = exports.MOVES_PER_LINE = exports.SCRAMBLE_LINES = exports.MEGAMINX_D_MOVES = exports.MEGAMINX_R_MOVES = void 0;
|
|
3
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.generateMegaminxScramble = exports.megaminxScrambleGenerator = exports.MOVES_PER_LINE = exports.SCRAMBLE_LINES = exports.MEGAMINX_D_MOVES = exports.MEGAMINX_R_MOVES = void 0;
|
|
4
|
+
const index_js_1 = require("../../core/index.js");
|
|
5
|
+
const scrambler_js_1 = require("./scrambler.js");
|
|
6
|
+
(0, index_js_1.registerScrambleGenerator)(scrambler_js_1.megaminxScrambleGenerator);
|
|
4
7
|
var types_js_1 = require("./types.js");
|
|
5
8
|
Object.defineProperty(exports, "MEGAMINX_R_MOVES", { enumerable: true, get: function () { return types_js_1.MEGAMINX_R_MOVES; } });
|
|
6
9
|
Object.defineProperty(exports, "MEGAMINX_D_MOVES", { enumerable: true, get: function () { return types_js_1.MEGAMINX_D_MOVES; } });
|
|
7
10
|
Object.defineProperty(exports, "SCRAMBLE_LINES", { enumerable: true, get: function () { return types_js_1.SCRAMBLE_LINES; } });
|
|
8
11
|
Object.defineProperty(exports, "MOVES_PER_LINE", { enumerable: true, get: function () { return types_js_1.MOVES_PER_LINE; } });
|
|
9
|
-
var
|
|
10
|
-
Object.defineProperty(exports, "megaminxScrambleGenerator", { enumerable: true, get: function () { return
|
|
11
|
-
Object.defineProperty(exports, "generateMegaminxScramble", { enumerable: true, get: function () { return
|
|
12
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
13
|
+
Object.defineProperty(exports, "megaminxScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.megaminxScrambleGenerator; } });
|
|
14
|
+
Object.defineProperty(exports, "generateMegaminxScramble", { enumerable: true, get: function () { return scrambler_js_2.generateMegaminxScramble; } });
|
|
15
|
+
var index_js_2 = require("../../core/index.js");
|
|
16
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_2.generateScramble; } });
|
|
17
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_2.generateScrambles; } });
|
|
18
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_2.getEventInfo; } });
|
|
19
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_2.getSupportedEvents; } });
|
|
20
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_2.initializeScrambler; } });
|
|
@@ -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.solvePyraminx = exports.toPyraminxFacelets = exports.getPyraminxFaceOrder = exports.formatPyraminxFacelets = exports.createSolvedPyraminxFacelets = exports.generatePyraminxScramble = exports.pyraminxScrambleGenerator = exports.generateRandomPyraminxState = exports.isAllowedRandomPyraminxState = exports.validatePyraminxState = exports.permutationParity = exports.isSolvedPyraminxState = exports.pyraminxStatesEqual = exports.createSolvedPyraminxState = exports.clonePyraminxState = exports.parsePyraminxMove = exports.parsePyraminxAlgorithm = exports.invertPyraminxMove = exports.invertPyraminxAlgorithm = exports.formatPyraminxAlgorithm = exports.applyPyraminxMove = exports.applyPyraminxAlgorithm = exports.PYRAMINX_TIPS = exports.PYRAMINX_CORE_MOVES = void 0;
|
|
36
|
+
exports.initializeScrambler = exports.getSupportedEvents = exports.getEventInfo = exports.generateScrambles = exports.generateScramble = exports.solver = exports.solvePyraminxWithInfo = exports.solvePyraminx = exports.toPyraminxFacelets = exports.getPyraminxFaceOrder = exports.formatPyraminxFacelets = exports.createSolvedPyraminxFacelets = exports.generatePyraminxScramble = exports.pyraminxScrambleGenerator = exports.generateRandomPyraminxState = exports.isAllowedRandomPyraminxState = exports.validatePyraminxState = exports.permutationParity = exports.isSolvedPyraminxState = exports.pyraminxStatesEqual = exports.createSolvedPyraminxState = exports.clonePyraminxState = exports.parsePyraminxMove = exports.parsePyraminxAlgorithm = exports.invertPyraminxMove = exports.invertPyraminxAlgorithm = exports.formatPyraminxAlgorithm = exports.applyPyraminxMove = exports.applyPyraminxAlgorithm = exports.PYRAMINX_TIPS = exports.PYRAMINX_CORE_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.pyraminxScrambleGenerator);
|
|
4
40
|
var types_js_1 = require("./types.js");
|
|
5
41
|
Object.defineProperty(exports, "PYRAMINX_CORE_MOVES", { enumerable: true, get: function () { return types_js_1.PYRAMINX_CORE_MOVES; } });
|
|
6
42
|
Object.defineProperty(exports, "PYRAMINX_TIPS", { enumerable: true, get: function () { return types_js_1.PYRAMINX_TIPS; } });
|
|
@@ -23,13 +59,21 @@ Object.defineProperty(exports, "validatePyraminxState", { enumerable: true, get:
|
|
|
23
59
|
Object.defineProperty(exports, "isAllowedRandomPyraminxState", { enumerable: true, get: function () { return validation_js_1.isAllowedRandomPyraminxState; } });
|
|
24
60
|
var random_state_js_1 = require("./random-state.js");
|
|
25
61
|
Object.defineProperty(exports, "generateRandomPyraminxState", { enumerable: true, get: function () { return random_state_js_1.generateRandomPyraminxState; } });
|
|
26
|
-
var
|
|
27
|
-
Object.defineProperty(exports, "pyraminxScrambleGenerator", { enumerable: true, get: function () { return
|
|
28
|
-
Object.defineProperty(exports, "generatePyraminxScramble", { enumerable: true, get: function () { return
|
|
62
|
+
var scrambler_js_2 = require("./scrambler.js");
|
|
63
|
+
Object.defineProperty(exports, "pyraminxScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_2.pyraminxScrambleGenerator; } });
|
|
64
|
+
Object.defineProperty(exports, "generatePyraminxScramble", { enumerable: true, get: function () { return scrambler_js_2.generatePyraminxScramble; } });
|
|
29
65
|
var facelets_js_1 = require("./facelets.js");
|
|
30
66
|
Object.defineProperty(exports, "createSolvedPyraminxFacelets", { enumerable: true, get: function () { return facelets_js_1.createSolvedPyraminxFacelets; } });
|
|
31
67
|
Object.defineProperty(exports, "formatPyraminxFacelets", { enumerable: true, get: function () { return facelets_js_1.formatPyraminxFacelets; } });
|
|
32
68
|
Object.defineProperty(exports, "getPyraminxFaceOrder", { enumerable: true, get: function () { return facelets_js_1.getPyraminxFaceOrder; } });
|
|
33
69
|
Object.defineProperty(exports, "toPyraminxFacelets", { enumerable: true, get: function () { return facelets_js_1.toPyraminxFacelets; } });
|
|
34
|
-
var
|
|
35
|
-
Object.defineProperty(exports, "solvePyraminx", { enumerable: true, get: function () { return
|
|
70
|
+
var index_js_2 = require("./solver/index.js");
|
|
71
|
+
Object.defineProperty(exports, "solvePyraminx", { enumerable: true, get: function () { return index_js_2.solvePyraminx; } });
|
|
72
|
+
Object.defineProperty(exports, "solvePyraminxWithInfo", { enumerable: true, get: function () { return index_js_2.solvePyraminxWithInfo; } });
|
|
73
|
+
exports.solver = __importStar(require("./solver/index.js"));
|
|
74
|
+
var index_js_3 = require("../../core/index.js");
|
|
75
|
+
Object.defineProperty(exports, "generateScramble", { enumerable: true, get: function () { return index_js_3.generateScramble; } });
|
|
76
|
+
Object.defineProperty(exports, "generateScrambles", { enumerable: true, get: function () { return index_js_3.generateScrambles; } });
|
|
77
|
+
Object.defineProperty(exports, "getEventInfo", { enumerable: true, get: function () { return index_js_3.getEventInfo; } });
|
|
78
|
+
Object.defineProperty(exports, "getSupportedEvents", { enumerable: true, get: function () { return index_js_3.getSupportedEvents; } });
|
|
79
|
+
Object.defineProperty(exports, "initializeScrambler", { enumerable: true, get: function () { return index_js_3.initializeScrambler; } });
|
|
@@ -3,18 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.pyraminxScrambleGenerator = void 0;
|
|
4
4
|
exports.generatePyraminxScramble = generatePyraminxScramble;
|
|
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");
|
|
9
|
+
const types_js_1 = require("./types.js");
|
|
10
|
+
// Face -> tip index (U,L,R,B order, same as PYRAMINX_TIPS).
|
|
11
|
+
const FACE_TIP_INDEX = { U: 0, L: 1, R: 2, B: 3 };
|
|
10
12
|
exports.pyraminxScrambleGenerator = {
|
|
11
13
|
info: {
|
|
12
14
|
eventId: "pymx",
|
|
13
15
|
name: "Pyraminx",
|
|
14
16
|
puzzle: "pyraminx",
|
|
15
17
|
quality: "random-state",
|
|
16
|
-
generator: "pyraminx-
|
|
17
|
-
description: "Random-state Pyraminx scramble generated by an optimal
|
|
18
|
+
generator: "pyraminx-optimal",
|
|
19
|
+
description: "Random-state Pyraminx scramble generated by an optimal solver with precalculated tables."
|
|
18
20
|
},
|
|
19
21
|
generate(options = {}) {
|
|
20
22
|
return generatePyraminxScramble(options);
|
|
@@ -23,30 +25,32 @@ exports.pyraminxScrambleGenerator = {
|
|
|
23
25
|
async function generatePyraminxScramble(options = {}) {
|
|
24
26
|
const state = (0, random_state_js_1.generateRandomPyraminxState)(options);
|
|
25
27
|
// Solve the core edges and centers
|
|
26
|
-
const solution = (0,
|
|
28
|
+
const solution = await (0, index_js_1.solvePyraminx)(state);
|
|
27
29
|
const scrambleMoves = (0, moves_js_1.invertPyraminxAlgorithm)(solution);
|
|
28
30
|
// Append tips: layer moves already rotate tips, so we need the delta
|
|
29
31
|
// between the target tips and the tips produced by the core scramble.
|
|
30
|
-
|
|
32
|
+
// Computed arithmetically from the move sequence (no state replay).
|
|
33
|
+
const coreTips = [0, 0, 0, 0];
|
|
34
|
+
for (const move of scrambleMoves) {
|
|
35
|
+
const isInverse = move.endsWith("'");
|
|
36
|
+
const face = isInverse ? move.slice(0, -1) : move;
|
|
37
|
+
const tipIndex = FACE_TIP_INDEX[face];
|
|
38
|
+
if (tipIndex !== undefined) {
|
|
39
|
+
coreTips[tipIndex] = (coreTips[tipIndex] + (isInverse ? 2 : 1)) % 3;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
31
42
|
const finalMoves = [...scrambleMoves];
|
|
32
|
-
const tipsNotation = ["u", "l", "r", "b"];
|
|
33
43
|
for (let i = 0; i < 4; i++) {
|
|
34
|
-
const delta = (state.tips[i] -
|
|
44
|
+
const delta = (state.tips[i] - coreTips[i] + 3) % 3;
|
|
35
45
|
if (delta === 1) {
|
|
36
|
-
finalMoves.push(
|
|
46
|
+
finalMoves.push(types_js_1.PYRAMINX_TIPS[i]);
|
|
37
47
|
}
|
|
38
48
|
else if (delta === 2) {
|
|
39
|
-
finalMoves.push(`${
|
|
49
|
+
finalMoves.push(`${types_js_1.PYRAMINX_TIPS[i]}'`);
|
|
40
50
|
}
|
|
41
51
|
}
|
|
42
|
-
if (!options.skipValidation) {
|
|
43
|
-
|
|
44
|
-
if (scrambledState.edgesPerm.toString() !== state.edgesPerm.toString() ||
|
|
45
|
-
scrambledState.edgesOrient.toString() !== state.edgesOrient.toString() ||
|
|
46
|
-
scrambledState.centers.toString() !== state.centers.toString() ||
|
|
47
|
-
scrambledState.tips.toString() !== state.tips.toString()) {
|
|
48
|
-
throw new Error("Generated Pyraminx scramble does not reproduce the target random state.");
|
|
49
|
-
}
|
|
52
|
+
if (!options.skipValidation && !(0, index_js_1.verifyPyraminxScramble)(state, finalMoves)) {
|
|
53
|
+
throw new Error("Generated Pyraminx scramble does not reproduce the target random state.");
|
|
50
54
|
}
|
|
51
55
|
const facelets = (0, facelets_js_1.toPyraminxFacelets)(state);
|
|
52
56
|
return {
|
|
@@ -54,7 +58,7 @@ async function generatePyraminxScramble(options = {}) {
|
|
|
54
58
|
scramble: finalMoves.join(" "),
|
|
55
59
|
moves: finalMoves,
|
|
56
60
|
quality: "random-state",
|
|
57
|
-
generator: "pyraminx-
|
|
61
|
+
generator: "pyraminx-optimal",
|
|
58
62
|
metadata: {
|
|
59
63
|
state,
|
|
60
64
|
facelets,
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
let cachedBrowserTables;
|
|
9
|
+
function getCachedBrowserTables() {
|
|
10
|
+
return cachedBrowserTables;
|
|
11
|
+
}
|
|
12
|
+
function clearCachedBrowserTables() {
|
|
13
|
+
cachedBrowserTables = undefined;
|
|
14
|
+
}
|
|
15
|
+
async function loadBrowserTables(baseUrl) {
|
|
16
|
+
if (cachedBrowserTables)
|
|
17
|
+
return cachedBrowserTables;
|
|
18
|
+
const resolved = resolveBaseUrl(baseUrl);
|
|
19
|
+
const manifest = await fetchManifest(resolved);
|
|
20
|
+
const [centersTable, permutationTable, orientationTable, policyTable] = await Promise.all([
|
|
21
|
+
fetchUint8Table(resolved, manifest.files.centersTable, table_metadata_js_1.PYRAMINX_SOLVER_TABLE_METADATA.centersTable.entries),
|
|
22
|
+
fetchUint16Table(resolved, manifest.files.permutationTable, table_metadata_js_1.PYRAMINX_SOLVER_TABLE_METADATA.permutationTable.entries),
|
|
23
|
+
fetchUint8Table(resolved, manifest.files.orientationTable, table_metadata_js_1.PYRAMINX_SOLVER_TABLE_METADATA.orientationTable.entries),
|
|
24
|
+
fetchUint8Table(resolved, manifest.files.policyTable, table_metadata_js_1.PYRAMINX_SOLVER_TABLE_METADATA.policyTable.entries)
|
|
25
|
+
]);
|
|
26
|
+
cachedBrowserTables = { centersTable, permutationTable, orientationTable, policyTable };
|
|
27
|
+
return cachedBrowserTables;
|
|
28
|
+
}
|
|
29
|
+
function resolveBaseUrl(provided) {
|
|
30
|
+
if (provided)
|
|
31
|
+
return provided.replace(/\/$/, "");
|
|
32
|
+
if (typeof document !== "undefined") {
|
|
33
|
+
const script = document.currentScript;
|
|
34
|
+
if (script?.src) {
|
|
35
|
+
const base = new URL(".", script.src).href;
|
|
36
|
+
return base.replace(/\/$/, "");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return ".";
|
|
40
|
+
}
|
|
41
|
+
async function fetchManifest(baseUrl) {
|
|
42
|
+
const url = `${baseUrl}/puzzles/pyraminx/solver/generated/manifest.json`;
|
|
43
|
+
const response = await fetch(url);
|
|
44
|
+
if (!response.ok)
|
|
45
|
+
throw new Error(`Failed to load pyraminx solver table manifest from ${url}: ${response.status} ${response.statusText}`);
|
|
46
|
+
const manifest = (await response.json());
|
|
47
|
+
if (manifest.version !== 1)
|
|
48
|
+
throw new Error(`Unsupported pyraminx solver table manifest version: ${manifest.version}`);
|
|
49
|
+
return manifest;
|
|
50
|
+
}
|
|
51
|
+
const TABLES_DIR = "puzzles/pyraminx/solver/generated";
|
|
52
|
+
const CACHE_NAME = "cubingcenter-scrambler-tables-v1";
|
|
53
|
+
async function fetchUint8Table(baseUrl, entry, expectedEntries) {
|
|
54
|
+
const buffer = await (0, compressed_fetch_js_1.fetchTableBuffer)(baseUrl, TABLES_DIR, entry.file, { cacheName: CACHE_NAME, compressed: entry.compressed !== false });
|
|
55
|
+
if (buffer.byteLength !== expectedEntries)
|
|
56
|
+
throw new Error(`Invalid byte size for ${entry.file}`);
|
|
57
|
+
return new Uint8Array(buffer);
|
|
58
|
+
}
|
|
59
|
+
async function fetchUint16Table(baseUrl, entry, expectedEntries) {
|
|
60
|
+
const buffer = await (0, compressed_fetch_js_1.fetchTableBuffer)(baseUrl, TABLES_DIR, entry.file, { cacheName: CACHE_NAME, compressed: entry.compressed !== false });
|
|
61
|
+
if (buffer.byteLength !== expectedEntries * 2)
|
|
62
|
+
throw new Error(`Invalid byte size for ${entry.file}`);
|
|
63
|
+
const values = new Uint16Array(expectedEntries);
|
|
64
|
+
const view = new DataView(buffer);
|
|
65
|
+
for (let i = 0; i < values.length; i++)
|
|
66
|
+
values[i] = view.getUint16(i * 2, true);
|
|
67
|
+
return values;
|
|
68
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"files": {
|
|
4
|
+
"centersTable": {
|
|
5
|
+
"file": "centers-table.bin",
|
|
6
|
+
"entries": 648,
|
|
7
|
+
"checksum": 4058180805
|
|
8
|
+
},
|
|
9
|
+
"permutationTable": {
|
|
10
|
+
"file": "permutation-table.bin",
|
|
11
|
+
"entries": 2880,
|
|
12
|
+
"checksum": 4161414597
|
|
13
|
+
},
|
|
14
|
+
"orientationTable": {
|
|
15
|
+
"file": "orientation-table.bin",
|
|
16
|
+
"entries": 256,
|
|
17
|
+
"checksum": 3608176069
|
|
18
|
+
},
|
|
19
|
+
"policyTable": {
|
|
20
|
+
"file": "policy.bin",
|
|
21
|
+
"entries": 349920,
|
|
22
|
+
"checksum": 4047562730,
|
|
23
|
+
"maxDepth": 11
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
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.loadGeneratedPyraminxSolverTables = loadGeneratedPyraminxSolverTables;
|
|
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 loadGeneratedPyraminxSolverTables() {
|
|
43
|
+
if (isBrowser()) {
|
|
44
|
+
const browserTables = (0, browser_loader_js_1.getCachedBrowserTables)();
|
|
45
|
+
if (browserTables)
|
|
46
|
+
return browserTables;
|
|
47
|
+
throw new Error("Pyraminx 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.readGeneratedPyraminxSolverTables();
|
|
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.loadGeneratedPyraminxSolverTables = exports.PYRAMINX_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, "PYRAMINX_SOLVER_TABLE_METADATA", { enumerable: true, get: function () { return table_metadata_js_1.PYRAMINX_SOLVER_TABLE_METADATA; } });
|
|
22
|
+
var generated_assets_js_1 = require("./generated-assets.js");
|
|
23
|
+
Object.defineProperty(exports, "loadGeneratedPyraminxSolverTables", { enumerable: true, get: function () { return generated_assets_js_1.loadGeneratedPyraminxSolverTables; } });
|