@cubingcenter/scrambler 0.5.3 → 0.6.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 +24 -9
- package/dist/cli/index.js +0 -0
- package/dist/core/api.d.ts.map +1 -1
- package/dist/core/api.js +11 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/puzzles/cube4/index.d.ts +4 -2
- package/dist/puzzles/cube4/index.d.ts.map +1 -1
- package/dist/puzzles/cube4/index.js +3 -1
- package/dist/puzzles/cube4/random-state.d.ts +16 -0
- package/dist/puzzles/cube4/random-state.d.ts.map +1 -0
- package/dist/puzzles/cube4/random-state.js +76 -0
- package/dist/puzzles/cube4/reduction/browser-loader.d.ts +18 -0
- package/dist/puzzles/cube4/reduction/browser-loader.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/browser-loader.js +95 -0
- package/dist/puzzles/cube4/reduction/center1.d.ts +65 -0
- package/dist/puzzles/cube4/reduction/center1.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/center1.js +245 -0
- package/dist/puzzles/cube4/reduction/center2.d.ts +91 -0
- package/dist/puzzles/cube4/reduction/center2.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/center2.js +449 -0
- package/dist/puzzles/cube4/reduction/center3.d.ts +47 -0
- package/dist/puzzles/cube4/reduction/center3.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/center3.js +278 -0
- package/dist/puzzles/cube4/reduction/edge3.d.ts +100 -0
- package/dist/puzzles/cube4/reduction/edge3.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/edge3.js +511 -0
- package/dist/puzzles/cube4/reduction/generated/center1-distance.bin +1 -0
- package/dist/puzzles/cube4/reduction/generated/center1-manifest.json +46 -0
- package/dist/puzzles/cube4/reduction/generated/center1-move-maps.bin +0 -0
- package/dist/puzzles/cube4/reduction/generated/center2-ct-move.bin +0 -0
- package/dist/puzzles/cube4/reduction/generated/center2-manifest.json +87 -0
- package/dist/puzzles/cube4/reduction/generated/center2-pruning.bin +1 -0
- package/dist/puzzles/cube4/reduction/generated/center2-rl-move.bin +0 -0
- package/dist/puzzles/cube4/reduction/generated/center3-manifest.json +40 -0
- package/dist/puzzles/cube4/reduction/generated/center3-move.bin +0 -0
- package/dist/puzzles/cube4/reduction/generated/center3-pruning.bin +0 -0
- package/dist/puzzles/cube4/reduction/generated/edge3-distances.bin +1 -0
- package/dist/puzzles/cube4/reduction/generated/edge3-manifest.json +12 -0
- package/dist/puzzles/cube4/reduction/geometry.d.ts +33 -0
- package/dist/puzzles/cube4/reduction/geometry.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/geometry.js +302 -0
- package/dist/puzzles/cube4/reduction/node-loader.d.ts +17 -0
- package/dist/puzzles/cube4/reduction/node-loader.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/node-loader.js +98 -0
- package/dist/puzzles/cube4/reduction/pairing-coordinate.d.ts +130 -0
- package/dist/puzzles/cube4/reduction/pairing-coordinate.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/pairing-coordinate.js +281 -0
- package/dist/puzzles/cube4/reduction/phase3-search.d.ts +42 -0
- package/dist/puzzles/cube4/reduction/phase3-search.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/phase3-search.js +133 -0
- package/dist/puzzles/cube4/reduction/phase3.d.ts +34 -0
- package/dist/puzzles/cube4/reduction/phase3.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/phase3.js +83 -0
- package/dist/puzzles/cube4/reduction/phase4.d.ts +35 -0
- package/dist/puzzles/cube4/reduction/phase4.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/phase4.js +82 -0
- package/dist/puzzles/cube4/reduction/solve.d.ts +31 -0
- package/dist/puzzles/cube4/reduction/solve.d.ts.map +1 -0
- package/dist/puzzles/cube4/reduction/solve.js +311 -0
- package/dist/puzzles/cube4/scrambler.d.ts +9 -1
- package/dist/puzzles/cube4/scrambler.d.ts.map +1 -1
- package/dist/puzzles/cube4/scrambler.js +123 -81
- package/dist/puzzles/cube4/types.d.ts +6 -0
- package/dist/puzzles/cube4/types.d.ts.map +1 -1
- package/dist/puzzles/cube4/validation.d.ts +6 -0
- package/dist/puzzles/cube4/validation.d.ts.map +1 -0
- package/dist/puzzles/cube4/validation.js +91 -0
- package/dist/puzzles/fto/coordinates.d.ts +53 -0
- package/dist/puzzles/fto/coordinates.d.ts.map +1 -0
- package/dist/puzzles/fto/coordinates.js +228 -0
- package/dist/puzzles/fto/facelets.d.ts +6 -0
- package/dist/puzzles/fto/facelets.d.ts.map +1 -0
- package/dist/puzzles/fto/facelets.js +99 -0
- package/dist/puzzles/fto/index.d.ts +12 -0
- package/dist/puzzles/fto/index.d.ts.map +1 -0
- package/dist/puzzles/fto/index.js +13 -0
- package/dist/puzzles/fto/moves.d.ts +12 -0
- package/dist/puzzles/fto/moves.d.ts.map +1 -0
- package/dist/puzzles/fto/moves.js +115 -0
- package/dist/puzzles/fto/random-state.d.ts +17 -0
- package/dist/puzzles/fto/random-state.d.ts.map +1 -0
- package/dist/puzzles/fto/random-state.js +40 -0
- package/dist/puzzles/fto/scrambler.d.ts +6 -0
- package/dist/puzzles/fto/scrambler.d.ts.map +1 -0
- package/dist/puzzles/fto/scrambler.js +49 -0
- package/dist/puzzles/fto/solver/engine.d.ts +18 -0
- package/dist/puzzles/fto/solver/engine.d.ts.map +1 -0
- package/dist/puzzles/fto/solver/engine.js +1168 -0
- package/dist/puzzles/fto/solver/index.d.ts +2 -0
- package/dist/puzzles/fto/solver/index.d.ts.map +1 -0
- package/dist/puzzles/fto/solver/index.js +1 -0
- package/dist/puzzles/fto/state.d.ts +16 -0
- package/dist/puzzles/fto/state.d.ts.map +1 -0
- package/dist/puzzles/fto/state.js +61 -0
- package/dist/puzzles/fto/types.d.ts +32 -0
- package/dist/puzzles/fto/types.d.ts.map +1 -0
- package/dist/puzzles/fto/types.js +46 -0
- package/dist/puzzles/fto/validation.d.ts +19 -0
- package/dist/puzzles/fto/validation.d.ts.map +1 -0
- package/dist/puzzles/fto/validation.js +143 -0
- package/dist/puzzles/index.d.ts +2 -0
- package/dist/puzzles/index.d.ts.map +1 -1
- package/dist/puzzles/index.js +6 -0
- package/dist/puzzles/skewb/index.d.ts +1 -1
- package/dist/puzzles/skewb/index.d.ts.map +1 -1
- package/dist/puzzles/skewb/index.js +1 -1
- package/dist/puzzles/skewb/random-state.d.ts.map +1 -1
- package/dist/puzzles/skewb/random-state.js +4 -1
- package/dist/puzzles/sq1/facelets.d.ts +12 -0
- package/dist/puzzles/sq1/facelets.d.ts.map +1 -0
- package/dist/puzzles/sq1/facelets.js +26 -0
- package/dist/puzzles/sq1/index.d.ts +10 -0
- package/dist/puzzles/sq1/index.d.ts.map +1 -0
- package/dist/puzzles/sq1/index.js +11 -0
- package/dist/puzzles/sq1/moves.d.ts +55 -0
- package/dist/puzzles/sq1/moves.d.ts.map +1 -0
- package/dist/puzzles/sq1/moves.js +220 -0
- package/dist/puzzles/sq1/random-state.d.ts +6 -0
- package/dist/puzzles/sq1/random-state.d.ts.map +1 -0
- package/dist/puzzles/sq1/random-state.js +49 -0
- package/dist/puzzles/sq1/scrambler.d.ts +10 -0
- package/dist/puzzles/sq1/scrambler.d.ts.map +1 -0
- package/dist/puzzles/sq1/scrambler.js +90 -0
- package/dist/puzzles/sq1/solver/browser-loader.d.ts +5 -0
- package/dist/puzzles/sq1/solver/browser-loader.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/browser-loader.js +92 -0
- package/dist/puzzles/sq1/solver/full-cube.d.ts +53 -0
- package/dist/puzzles/sq1/solver/full-cube.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/full-cube.js +281 -0
- package/dist/puzzles/sq1/solver/generated/manifest.json +50 -0
- package/dist/puzzles/sq1/solver/generated/shape-bottom-move.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/shape-idx.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/shape-prun.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/shape-top-move.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/shape-twist-move.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/square-bottom-move.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/square-prun.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/square-top-move.bin +0 -0
- package/dist/puzzles/sq1/solver/generated/square-twist-move.bin +0 -0
- package/dist/puzzles/sq1/solver/index.d.ts +5 -0
- package/dist/puzzles/sq1/solver/index.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/index.js +4 -0
- package/dist/puzzles/sq1/solver/node-loader.d.ts +4 -0
- package/dist/puzzles/sq1/solver/node-loader.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/node-loader.js +113 -0
- package/dist/puzzles/sq1/solver/search.d.ts +27 -0
- package/dist/puzzles/sq1/solver/search.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/search.js +225 -0
- package/dist/puzzles/sq1/solver/shape.d.ts +22 -0
- package/dist/puzzles/sq1/solver/shape.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/shape.js +185 -0
- package/dist/puzzles/sq1/solver/square.d.ts +10 -0
- package/dist/puzzles/sq1/solver/square.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/square.js +90 -0
- package/dist/puzzles/sq1/solver/table-metadata.d.ts +48 -0
- package/dist/puzzles/sq1/solver/table-metadata.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/table-metadata.js +47 -0
- package/dist/puzzles/sq1/solver/tables.d.ts +17 -0
- package/dist/puzzles/sq1/solver/tables.d.ts.map +1 -0
- package/dist/puzzles/sq1/solver/tables.js +66 -0
- package/dist/puzzles/sq1/state.d.ts +10 -0
- package/dist/puzzles/sq1/state.d.ts.map +1 -0
- package/dist/puzzles/sq1/state.js +74 -0
- package/dist/puzzles/sq1/types.d.ts +32 -0
- package/dist/puzzles/sq1/types.d.ts.map +1 -0
- package/dist/puzzles/sq1/types.js +1 -0
- package/dist/puzzles/sq1/validation.d.ts +7 -0
- package/dist/puzzles/sq1/validation.d.ts.map +1 -0
- package/dist/puzzles/sq1/validation.js +64 -0
- package/dist/random/prng.d.ts.map +1 -1
- package/dist/random/prng.js +9 -4
- package/dist-cjs/core/api.js +11 -1
- package/dist-cjs/puzzles/cube4/index.js +11 -4
- package/dist-cjs/puzzles/cube4/random-state.js +79 -0
- package/dist-cjs/puzzles/cube4/reduction/browser-loader.js +100 -0
- package/dist-cjs/puzzles/cube4/reduction/center1.js +258 -0
- package/dist-cjs/puzzles/cube4/reduction/center2.js +462 -0
- package/dist-cjs/puzzles/cube4/reduction/center3.js +284 -0
- package/dist-cjs/puzzles/cube4/reduction/edge3.js +522 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center1-distance.bin +1 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center1-manifest.json +46 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center1-move-maps.bin +0 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center2-ct-move.bin +0 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center2-manifest.json +87 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center2-pruning.bin +1 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center2-rl-move.bin +0 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center3-manifest.json +40 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center3-move.bin +0 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/center3-pruning.bin +0 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/edge3-distances.bin +1 -0
- package/dist-cjs/puzzles/cube4/reduction/generated/edge3-manifest.json +12 -0
- package/dist-cjs/puzzles/cube4/reduction/geometry.js +308 -0
- package/dist-cjs/puzzles/cube4/reduction/node-loader.js +104 -0
- package/dist-cjs/puzzles/cube4/reduction/pairing-coordinate.js +294 -0
- package/dist-cjs/puzzles/cube4/reduction/phase3-search.js +138 -0
- package/dist-cjs/puzzles/cube4/reduction/phase3.js +86 -0
- package/dist-cjs/puzzles/cube4/reduction/phase4.js +87 -0
- package/dist-cjs/puzzles/cube4/reduction/solve.js +314 -0
- package/dist-cjs/puzzles/cube4/scrambler.js +122 -79
- package/dist-cjs/puzzles/cube4/validation.js +97 -0
- package/dist-cjs/puzzles/fto/coordinates.js +240 -0
- package/dist-cjs/puzzles/fto/facelets.js +104 -0
- package/dist-cjs/puzzles/fto/index.js +68 -0
- package/dist-cjs/puzzles/fto/moves.js +126 -0
- package/dist-cjs/puzzles/fto/random-state.js +43 -0
- package/dist-cjs/puzzles/fto/scrambler.js +53 -0
- package/dist-cjs/puzzles/fto/solver/engine.js +1175 -0
- package/dist-cjs/puzzles/fto/solver/index.js +9 -0
- package/dist-cjs/puzzles/fto/state.js +69 -0
- package/dist-cjs/puzzles/fto/types.js +49 -0
- package/dist-cjs/puzzles/fto/validation.js +147 -0
- package/dist-cjs/puzzles/index.js +7 -1
- package/dist-cjs/puzzles/skewb/index.js +2 -1
- package/dist-cjs/puzzles/skewb/random-state.js +4 -1
- package/dist-cjs/puzzles/sq1/facelets.js +30 -0
- package/dist-cjs/puzzles/sq1/index.js +52 -0
- package/dist-cjs/puzzles/sq1/moves.js +234 -0
- package/dist-cjs/puzzles/sq1/random-state.js +52 -0
- package/dist-cjs/puzzles/sq1/scrambler.js +95 -0
- package/dist-cjs/puzzles/sq1/solver/browser-loader.js +97 -0
- package/dist-cjs/puzzles/sq1/solver/full-cube.js +289 -0
- package/dist-cjs/puzzles/sq1/solver/generated/manifest.json +50 -0
- package/dist-cjs/puzzles/sq1/solver/generated/shape-bottom-move.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/shape-idx.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/shape-prun.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/shape-top-move.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/shape-twist-move.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/square-bottom-move.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/square-prun.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/square-top-move.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/generated/square-twist-move.bin +0 -0
- package/dist-cjs/puzzles/sq1/solver/index.js +18 -0
- package/dist-cjs/puzzles/sq1/solver/node-loader.js +120 -0
- package/dist-cjs/puzzles/sq1/solver/search.js +229 -0
- package/dist-cjs/puzzles/sq1/solver/shape.js +191 -0
- package/dist-cjs/puzzles/sq1/solver/square.js +93 -0
- package/dist-cjs/puzzles/sq1/solver/table-metadata.js +50 -0
- package/dist-cjs/puzzles/sq1/solver/tables.js +106 -0
- package/dist-cjs/puzzles/sq1/state.js +81 -0
- package/dist-cjs/puzzles/sq1/types.js +2 -0
- package/dist-cjs/puzzles/sq1/validation.js +68 -0
- package/dist-cjs/random/prng.js +9 -4
- package/package.json +43 -14
|
@@ -0,0 +1,106 @@
|
|
|
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.areSquare1TablesLoaded = areSquare1TablesLoaded;
|
|
37
|
+
exports.getSquare1SolverTablesSync = getSquare1SolverTablesSync;
|
|
38
|
+
exports.ensureSquare1TablesLoaded = ensureSquare1TablesLoaded;
|
|
39
|
+
exports.generateSquare1SolverTables = generateSquare1SolverTables;
|
|
40
|
+
exports.setCachedSquare1Tables = setCachedSquare1Tables;
|
|
41
|
+
const shape_js_1 = require("./shape.js");
|
|
42
|
+
const square_js_1 = require("./square.js");
|
|
43
|
+
let cachedTables;
|
|
44
|
+
let tableLoadPromise;
|
|
45
|
+
function areSquare1TablesLoaded() {
|
|
46
|
+
return cachedTables !== undefined;
|
|
47
|
+
}
|
|
48
|
+
function getSquare1SolverTablesSync() {
|
|
49
|
+
if (!cachedTables) {
|
|
50
|
+
// Check if running in Node.js
|
|
51
|
+
if (typeof process !== "undefined" && process.versions?.node) {
|
|
52
|
+
try {
|
|
53
|
+
const { readGeneratedSquare1SolverTables } = require("./node-loader.js");
|
|
54
|
+
cachedTables = readGeneratedSquare1SolverTables();
|
|
55
|
+
return cachedTables;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Fall back to on-the-fly generation
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Generate on the fly
|
|
62
|
+
cachedTables = generateSquare1SolverTables();
|
|
63
|
+
}
|
|
64
|
+
return cachedTables;
|
|
65
|
+
}
|
|
66
|
+
async function ensureSquare1TablesLoaded(baseUrl) {
|
|
67
|
+
if (cachedTables) {
|
|
68
|
+
return cachedTables;
|
|
69
|
+
}
|
|
70
|
+
if (tableLoadPromise) {
|
|
71
|
+
return tableLoadPromise;
|
|
72
|
+
}
|
|
73
|
+
tableLoadPromise = (async () => {
|
|
74
|
+
if (typeof window !== "undefined" || typeof self !== "undefined" && typeof self.importScripts === "function") {
|
|
75
|
+
try {
|
|
76
|
+
const { loadBrowserTables } = await Promise.resolve().then(() => __importStar(require("./browser-loader.js")));
|
|
77
|
+
cachedTables = await loadBrowserTables(baseUrl);
|
|
78
|
+
return cachedTables;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Fall back to on-the-fly generation
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
cachedTables = getSquare1SolverTablesSync();
|
|
85
|
+
return cachedTables;
|
|
86
|
+
})();
|
|
87
|
+
return tableLoadPromise;
|
|
88
|
+
}
|
|
89
|
+
function generateSquare1SolverTables() {
|
|
90
|
+
const shape = (0, shape_js_1.generateShapeTables)();
|
|
91
|
+
const square = (0, square_js_1.generateSquareTables)();
|
|
92
|
+
return {
|
|
93
|
+
shapeIdx: shape.shapeIdx,
|
|
94
|
+
shapePrun: shape.shapePrun,
|
|
95
|
+
shapeTopMove: shape.shapeTopMove,
|
|
96
|
+
shapeBottomMove: shape.shapeBottomMove,
|
|
97
|
+
shapeTwistMove: shape.shapeTwistMove,
|
|
98
|
+
squareTwistMove: square.squareTwistMove,
|
|
99
|
+
squareTopMove: square.squareTopMove,
|
|
100
|
+
squareBottomMove: square.squareBottomMove,
|
|
101
|
+
squarePrun: square.squarePrun
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function setCachedSquare1Tables(tables) {
|
|
105
|
+
cachedTables = tables;
|
|
106
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WEDGE_DEFS = void 0;
|
|
4
|
+
exports.createSolvedSquare1State = createSolvedSquare1State;
|
|
5
|
+
exports.cloneSquare1State = cloneSquare1State;
|
|
6
|
+
exports.statesEqual = statesEqual;
|
|
7
|
+
exports.isSolvedSquare1State = isSolvedSquare1State;
|
|
8
|
+
exports.WEDGE_DEFS = [
|
|
9
|
+
// Top layer (0..11) - Yellow (D in WCA_COLORS):
|
|
10
|
+
{ pieceId: 0, isCorner: true, partIndex: 0, faceColor: "D", sideColor: "R" }, // 0
|
|
11
|
+
{ pieceId: 0, isCorner: true, partIndex: 1, faceColor: "D", sideColor: "B" }, // 1
|
|
12
|
+
{ pieceId: 9, isCorner: false, partIndex: 0, faceColor: "D", sideColor: "B" }, // 2
|
|
13
|
+
{ pieceId: 1, isCorner: true, partIndex: 0, faceColor: "D", sideColor: "B" }, // 3
|
|
14
|
+
{ pieceId: 1, isCorner: true, partIndex: 1, faceColor: "D", sideColor: "L" }, // 4
|
|
15
|
+
{ pieceId: 10, isCorner: false, partIndex: 0, faceColor: "D", sideColor: "L" }, // 5
|
|
16
|
+
{ pieceId: 2, isCorner: true, partIndex: 0, faceColor: "D", sideColor: "L" }, // 6
|
|
17
|
+
{ pieceId: 2, isCorner: true, partIndex: 1, faceColor: "D", sideColor: "F" }, // 7
|
|
18
|
+
{ pieceId: 11, isCorner: false, partIndex: 0, faceColor: "D", sideColor: "F" }, // 8
|
|
19
|
+
{ pieceId: 3, isCorner: true, partIndex: 0, faceColor: "D", sideColor: "F" }, // 9
|
|
20
|
+
{ pieceId: 3, isCorner: true, partIndex: 1, faceColor: "D", sideColor: "R" }, // 10
|
|
21
|
+
{ pieceId: 8, isCorner: false, partIndex: 0, faceColor: "D", sideColor: "R" }, // 11
|
|
22
|
+
// Bottom layer (12..23) - White (U in WCA_COLORS):
|
|
23
|
+
{ pieceId: 12, isCorner: false, partIndex: 0, faceColor: "U", sideColor: "R" }, // 12
|
|
24
|
+
{ pieceId: 4, isCorner: true, partIndex: 0, faceColor: "U", sideColor: "R" }, // 13
|
|
25
|
+
{ pieceId: 4, isCorner: true, partIndex: 1, faceColor: "U", sideColor: "F" }, // 14
|
|
26
|
+
{ pieceId: 13, isCorner: false, partIndex: 0, faceColor: "U", sideColor: "F" }, // 15
|
|
27
|
+
{ pieceId: 5, isCorner: true, partIndex: 0, faceColor: "U", sideColor: "F" }, // 16
|
|
28
|
+
{ pieceId: 5, isCorner: true, partIndex: 1, faceColor: "U", sideColor: "L" }, // 17
|
|
29
|
+
{ pieceId: 14, isCorner: false, partIndex: 0, faceColor: "U", sideColor: "L" }, // 18
|
|
30
|
+
{ pieceId: 6, isCorner: true, partIndex: 0, faceColor: "U", sideColor: "L" }, // 19
|
|
31
|
+
{ pieceId: 6, isCorner: true, partIndex: 1, faceColor: "U", sideColor: "B" }, // 20
|
|
32
|
+
{ pieceId: 15, isCorner: false, partIndex: 0, faceColor: "U", sideColor: "B" }, // 21
|
|
33
|
+
{ pieceId: 7, isCorner: true, partIndex: 0, faceColor: "U", sideColor: "B" }, // 22
|
|
34
|
+
{ pieceId: 7, isCorner: true, partIndex: 1, faceColor: "U", sideColor: "R" }, // 23
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Creates a solved Square-1 state aligned with the standard WCA visualization.
|
|
38
|
+
*/
|
|
39
|
+
function createSolvedSquare1State() {
|
|
40
|
+
const top = Array.from({ length: 12 }, (_, i) => ({ ...exports.WEDGE_DEFS[i] }));
|
|
41
|
+
const bottom = Array.from({ length: 12 }, (_, i) => ({ ...exports.WEDGE_DEFS[12 + i] }));
|
|
42
|
+
return {
|
|
43
|
+
top,
|
|
44
|
+
bottom,
|
|
45
|
+
middle: 0,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function cloneSquare1State(state) {
|
|
49
|
+
return {
|
|
50
|
+
top: state.top.map((s) => ({ ...s })),
|
|
51
|
+
bottom: state.bottom.map((s) => ({ ...s })),
|
|
52
|
+
middle: state.middle,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function statesEqual(a, b) {
|
|
56
|
+
if (a.middle !== b.middle)
|
|
57
|
+
return false;
|
|
58
|
+
for (let i = 0; i < 12; i++) {
|
|
59
|
+
const at = a.top[i];
|
|
60
|
+
const bt = b.top[i];
|
|
61
|
+
if (at.pieceId !== bt.pieceId ||
|
|
62
|
+
at.partIndex !== bt.partIndex ||
|
|
63
|
+
at.faceColor !== bt.faceColor ||
|
|
64
|
+
at.sideColor !== bt.sideColor) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const ab = a.bottom[i];
|
|
68
|
+
const bb = b.bottom[i];
|
|
69
|
+
if (ab.pieceId !== bb.pieceId ||
|
|
70
|
+
ab.partIndex !== bb.partIndex ||
|
|
71
|
+
ab.faceColor !== bb.faceColor ||
|
|
72
|
+
ab.sideColor !== bb.sideColor) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
function isSolvedSquare1State(state) {
|
|
79
|
+
const solved = createSolvedSquare1State();
|
|
80
|
+
return statesEqual(state, solved);
|
|
81
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSquare1State = validateSquare1State;
|
|
4
|
+
exports.isTrivialSquare1State = isTrivialSquare1State;
|
|
5
|
+
const state_js_1 = require("./state.js");
|
|
6
|
+
/**
|
|
7
|
+
* Validates whether a given Square-1 state is physically and mathematically legal.
|
|
8
|
+
*/
|
|
9
|
+
function validateSquare1State(state) {
|
|
10
|
+
const errors = [];
|
|
11
|
+
if (!state || !Array.isArray(state.top) || !Array.isArray(state.bottom)) {
|
|
12
|
+
return { valid: false, errors: ["Invalid state structure: top and bottom must be arrays."] };
|
|
13
|
+
}
|
|
14
|
+
if (state.top.length !== 12) {
|
|
15
|
+
errors.push(`Top layer must have 12 slots, found ${state.top.length}.`);
|
|
16
|
+
}
|
|
17
|
+
if (state.bottom.length !== 12) {
|
|
18
|
+
errors.push(`Bottom layer must have 12 slots, found ${state.bottom.length}.`);
|
|
19
|
+
}
|
|
20
|
+
if (state.middle !== 0 && state.middle !== 1) {
|
|
21
|
+
errors.push(`Middle layer must be 0 or 1, found ${state.middle}.`);
|
|
22
|
+
}
|
|
23
|
+
if (errors.length > 0) {
|
|
24
|
+
return { valid: false, errors };
|
|
25
|
+
}
|
|
26
|
+
// Count pieces
|
|
27
|
+
const cornerParts = {};
|
|
28
|
+
const edges = {};
|
|
29
|
+
const checkSlot = (slot, layer, idx) => {
|
|
30
|
+
if (typeof slot.pieceId !== "number" || typeof slot.isCorner !== "boolean") {
|
|
31
|
+
errors.push(`Invalid slot at ${layer}[${idx}].`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (slot.isCorner) {
|
|
35
|
+
if (slot.pieceId < 0 || slot.pieceId > 7) {
|
|
36
|
+
errors.push(`Invalid corner pieceId ${slot.pieceId} at ${layer}[${idx}].`);
|
|
37
|
+
}
|
|
38
|
+
cornerParts[slot.pieceId] = (cornerParts[slot.pieceId] || 0) + 1;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
if (slot.pieceId < 8 || slot.pieceId > 15) {
|
|
42
|
+
errors.push(`Invalid edge pieceId ${slot.pieceId} at ${layer}[${idx}].`);
|
|
43
|
+
}
|
|
44
|
+
edges[slot.pieceId] = (edges[slot.pieceId] || 0) + 1;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
for (let i = 0; i < 12; i++)
|
|
48
|
+
checkSlot(state.top[i], "top", i);
|
|
49
|
+
for (let i = 0; i < 12; i++)
|
|
50
|
+
checkSlot(state.bottom[i], "bottom", i);
|
|
51
|
+
for (let c = 0; c < 8; c++) {
|
|
52
|
+
if (cornerParts[c] !== 2) {
|
|
53
|
+
errors.push(`Corner ${c} must appear exactly twice (2 parts), found ${cornerParts[c] || 0}.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
for (let e = 8; e <= 15; e++) {
|
|
57
|
+
if (edges[e] !== 1) {
|
|
58
|
+
errors.push(`Edge ${e} must appear exactly once, found ${edges[e] || 0}.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (errors.length > 0) {
|
|
62
|
+
return { valid: false, errors };
|
|
63
|
+
}
|
|
64
|
+
return { valid: true, errors: [] };
|
|
65
|
+
}
|
|
66
|
+
function isTrivialSquare1State(state) {
|
|
67
|
+
return (0, state_js_1.isSolvedSquare1State)(state);
|
|
68
|
+
}
|
package/dist-cjs/random/prng.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createRandomSource = createRandomSource;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
4
|
// 4096 bytes per refill (~682 values per syscall).
|
|
6
5
|
const CRYPTO_BUFFER_BYTES = 4096;
|
|
7
6
|
// Shared unseeded source: the crypto refill costs a syscall per buffer, so a
|
|
@@ -19,10 +18,16 @@ class CryptoRandomSource {
|
|
|
19
18
|
buffer = null;
|
|
20
19
|
offset = 0;
|
|
21
20
|
next() {
|
|
22
|
-
// Batch the crypto calls: one randomBytes per move is ~2 orders of
|
|
23
|
-
// magnitude slower in Node (syscall per call). Refill lazily.
|
|
24
21
|
if (this.buffer === null || this.offset + 6 > CRYPTO_BUFFER_BYTES) {
|
|
25
|
-
this.buffer =
|
|
22
|
+
this.buffer = new Uint8Array(CRYPTO_BUFFER_BYTES);
|
|
23
|
+
if (typeof globalThis.crypto?.getRandomValues === "function") {
|
|
24
|
+
globalThis.crypto.getRandomValues(this.buffer);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
for (let i = 0; i < CRYPTO_BUFFER_BYTES; i++) {
|
|
28
|
+
this.buffer[i] = Math.floor(Math.random() * 256);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
26
31
|
this.offset = 0;
|
|
27
32
|
}
|
|
28
33
|
const bytes = this.buffer;
|
package/package.json
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cubingcenter/scrambler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Extensible scramble generation toolkit for CubingCenter projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "CubingCenter",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/diegoagdiaz/cubingcenter-scrambler.git"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/diegoagdiaz/cubingcenter-scrambler#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/diegoagdiaz/cubingcenter-scrambler/issues"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"cubing",
|
|
21
|
+
"scrambler",
|
|
22
|
+
"wca",
|
|
23
|
+
"rubiks-cube",
|
|
24
|
+
"speedcubing",
|
|
25
|
+
"rubiks",
|
|
26
|
+
"puzzle"
|
|
27
|
+
],
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"module": "./dist/index.js",
|
|
8
30
|
"bin": {
|
|
9
31
|
"cubingcenter-scrambler": "./dist/cli/index.js"
|
|
10
32
|
},
|
|
@@ -29,12 +51,18 @@
|
|
|
29
51
|
"examples",
|
|
30
52
|
"README.md"
|
|
31
53
|
],
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@cubingcenter/viz": "link:../cubingcenter-viz",
|
|
56
|
+
"@types/node": "^24.0.0",
|
|
57
|
+
"tsx": "^4.20.0",
|
|
58
|
+
"typescript": "^5.9.0"
|
|
59
|
+
},
|
|
32
60
|
"scripts": {
|
|
33
61
|
"build": "node scripts/clean.cjs && tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && node scripts/write-cjs-package.cjs && node scripts/copy-assets.cjs",
|
|
34
62
|
"test": "node --test --import tsx test/*.test.ts",
|
|
35
63
|
"lint": "tsc -p tsconfig.json --noEmit",
|
|
36
64
|
"package:check": "pnpm build && node scripts/check-package.cjs",
|
|
37
|
-
"verify": "pnpm lint && pnpm test && pnpm build && pnpm cube3:tables:check && pnpm cube2:tables:check && pnpm pyraminx:tables:check && pnpm skewb:tables:check && pnpm package:check",
|
|
65
|
+
"verify": "pnpm lint && pnpm test && pnpm build && pnpm cube3:tables:check && pnpm cube2:tables:check && pnpm pyraminx:tables:check && pnpm skewb:tables:check && pnpm sq1:tables:check && pnpm package:check",
|
|
38
66
|
"dev": "tsx src/cli/index.ts",
|
|
39
67
|
"cube3:tables": "node --import tsx scripts/generate-cube3-solver-tables.ts",
|
|
40
68
|
"cube3:tables:check": "node --import tsx scripts/check-cube3-solver-tables.ts",
|
|
@@ -44,6 +72,16 @@
|
|
|
44
72
|
"pyraminx:tables:check": "node --import tsx scripts/check-pyraminx-solver-tables.ts",
|
|
45
73
|
"skewb:tables": "node --import tsx scripts/generate-skewb-solver-tables.ts",
|
|
46
74
|
"skewb:tables:check": "node --import tsx scripts/check-skewb-solver-tables.ts",
|
|
75
|
+
"sq1:tables": "node --import tsx scripts/generate-sq1-solver-tables.ts",
|
|
76
|
+
"sq1:tables:check": "node --import tsx scripts/check-sq1-solver-tables.ts",
|
|
77
|
+
"cube4:center1:tables": "node --import tsx scripts/generate-center1-solver-tables.ts",
|
|
78
|
+
"cube4:center1:tables:check": "node --import tsx scripts/check-center1-solver-tables.ts",
|
|
79
|
+
"cube4:center2:tables": "node --import tsx scripts/generate-center2-solver-tables.ts",
|
|
80
|
+
"cube4:center2:tables:check": "node --import tsx scripts/check-center2-solver-tables.ts",
|
|
81
|
+
"cube4:center3:tables": "node --import tsx scripts/generate-center3-solver-tables.ts",
|
|
82
|
+
"cube4:center3:tables:check": "node --import tsx scripts/check-center3-solver-tables.ts",
|
|
83
|
+
"cube4:edge3:tables": "node --import tsx scripts/generate-edge3-solver-tables.ts",
|
|
84
|
+
"cube4:edge3:tables:check": "node --import tsx scripts/check-edge3-solver-tables.ts",
|
|
47
85
|
"tables:web:sync": "node --import tsx scripts/sync-web-tables.ts",
|
|
48
86
|
"verify:scrambles": "node --import tsx scripts/verify-scrambles.ts",
|
|
49
87
|
"verify:pyraminx:exhaustive": "node --import tsx scripts/verify-pyraminx-exhaustive.ts",
|
|
@@ -52,16 +90,7 @@
|
|
|
52
90
|
"bench:cube3": "node --import tsx bench-cube3.ts",
|
|
53
91
|
"bench:skewb": "node --import tsx bench-skewb.ts",
|
|
54
92
|
"bench:pyraminx": "node --import tsx bench-pyraminx.ts",
|
|
55
|
-
"bench:phases": "node --import tsx bench-phases.ts"
|
|
56
|
-
|
|
57
|
-
"devDependencies": {
|
|
58
|
-
"@cubingcenter/viz": "link:../cubingcenter-viz",
|
|
59
|
-
"@types/node": "^24.0.0",
|
|
60
|
-
"tsx": "^4.20.0",
|
|
61
|
-
"typescript": "^5.9.0"
|
|
62
|
-
},
|
|
63
|
-
"packageManager": "pnpm@10.33.0",
|
|
64
|
-
"dependencies": {
|
|
65
|
-
"cubing": "^0.63.3"
|
|
93
|
+
"bench:phases": "node --import tsx bench-phases.ts",
|
|
94
|
+
"bench:uniformity": "node --import tsx bench-uniformity.ts"
|
|
66
95
|
}
|
|
67
|
-
}
|
|
96
|
+
}
|