@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.
Files changed (244) hide show
  1. package/README.md +24 -9
  2. package/dist/cli/index.js +0 -0
  3. package/dist/core/api.d.ts.map +1 -1
  4. package/dist/core/api.js +11 -1
  5. package/dist/core/types.d.ts +1 -1
  6. package/dist/core/types.d.ts.map +1 -1
  7. package/dist/puzzles/cube4/index.d.ts +4 -2
  8. package/dist/puzzles/cube4/index.d.ts.map +1 -1
  9. package/dist/puzzles/cube4/index.js +3 -1
  10. package/dist/puzzles/cube4/random-state.d.ts +16 -0
  11. package/dist/puzzles/cube4/random-state.d.ts.map +1 -0
  12. package/dist/puzzles/cube4/random-state.js +76 -0
  13. package/dist/puzzles/cube4/reduction/browser-loader.d.ts +18 -0
  14. package/dist/puzzles/cube4/reduction/browser-loader.d.ts.map +1 -0
  15. package/dist/puzzles/cube4/reduction/browser-loader.js +95 -0
  16. package/dist/puzzles/cube4/reduction/center1.d.ts +65 -0
  17. package/dist/puzzles/cube4/reduction/center1.d.ts.map +1 -0
  18. package/dist/puzzles/cube4/reduction/center1.js +245 -0
  19. package/dist/puzzles/cube4/reduction/center2.d.ts +91 -0
  20. package/dist/puzzles/cube4/reduction/center2.d.ts.map +1 -0
  21. package/dist/puzzles/cube4/reduction/center2.js +449 -0
  22. package/dist/puzzles/cube4/reduction/center3.d.ts +47 -0
  23. package/dist/puzzles/cube4/reduction/center3.d.ts.map +1 -0
  24. package/dist/puzzles/cube4/reduction/center3.js +278 -0
  25. package/dist/puzzles/cube4/reduction/edge3.d.ts +100 -0
  26. package/dist/puzzles/cube4/reduction/edge3.d.ts.map +1 -0
  27. package/dist/puzzles/cube4/reduction/edge3.js +511 -0
  28. package/dist/puzzles/cube4/reduction/generated/center1-distance.bin +1 -0
  29. package/dist/puzzles/cube4/reduction/generated/center1-manifest.json +46 -0
  30. package/dist/puzzles/cube4/reduction/generated/center1-move-maps.bin +0 -0
  31. package/dist/puzzles/cube4/reduction/generated/center2-ct-move.bin +0 -0
  32. package/dist/puzzles/cube4/reduction/generated/center2-manifest.json +87 -0
  33. package/dist/puzzles/cube4/reduction/generated/center2-pruning.bin +1 -0
  34. package/dist/puzzles/cube4/reduction/generated/center2-rl-move.bin +0 -0
  35. package/dist/puzzles/cube4/reduction/generated/center3-manifest.json +40 -0
  36. package/dist/puzzles/cube4/reduction/generated/center3-move.bin +0 -0
  37. package/dist/puzzles/cube4/reduction/generated/center3-pruning.bin +0 -0
  38. package/dist/puzzles/cube4/reduction/generated/edge3-distances.bin +1 -0
  39. package/dist/puzzles/cube4/reduction/generated/edge3-manifest.json +12 -0
  40. package/dist/puzzles/cube4/reduction/geometry.d.ts +33 -0
  41. package/dist/puzzles/cube4/reduction/geometry.d.ts.map +1 -0
  42. package/dist/puzzles/cube4/reduction/geometry.js +302 -0
  43. package/dist/puzzles/cube4/reduction/node-loader.d.ts +17 -0
  44. package/dist/puzzles/cube4/reduction/node-loader.d.ts.map +1 -0
  45. package/dist/puzzles/cube4/reduction/node-loader.js +98 -0
  46. package/dist/puzzles/cube4/reduction/pairing-coordinate.d.ts +130 -0
  47. package/dist/puzzles/cube4/reduction/pairing-coordinate.d.ts.map +1 -0
  48. package/dist/puzzles/cube4/reduction/pairing-coordinate.js +281 -0
  49. package/dist/puzzles/cube4/reduction/phase3-search.d.ts +42 -0
  50. package/dist/puzzles/cube4/reduction/phase3-search.d.ts.map +1 -0
  51. package/dist/puzzles/cube4/reduction/phase3-search.js +133 -0
  52. package/dist/puzzles/cube4/reduction/phase3.d.ts +34 -0
  53. package/dist/puzzles/cube4/reduction/phase3.d.ts.map +1 -0
  54. package/dist/puzzles/cube4/reduction/phase3.js +83 -0
  55. package/dist/puzzles/cube4/reduction/phase4.d.ts +35 -0
  56. package/dist/puzzles/cube4/reduction/phase4.d.ts.map +1 -0
  57. package/dist/puzzles/cube4/reduction/phase4.js +82 -0
  58. package/dist/puzzles/cube4/reduction/solve.d.ts +31 -0
  59. package/dist/puzzles/cube4/reduction/solve.d.ts.map +1 -0
  60. package/dist/puzzles/cube4/reduction/solve.js +311 -0
  61. package/dist/puzzles/cube4/scrambler.d.ts +9 -1
  62. package/dist/puzzles/cube4/scrambler.d.ts.map +1 -1
  63. package/dist/puzzles/cube4/scrambler.js +123 -81
  64. package/dist/puzzles/cube4/types.d.ts +6 -0
  65. package/dist/puzzles/cube4/types.d.ts.map +1 -1
  66. package/dist/puzzles/cube4/validation.d.ts +6 -0
  67. package/dist/puzzles/cube4/validation.d.ts.map +1 -0
  68. package/dist/puzzles/cube4/validation.js +91 -0
  69. package/dist/puzzles/fto/coordinates.d.ts +53 -0
  70. package/dist/puzzles/fto/coordinates.d.ts.map +1 -0
  71. package/dist/puzzles/fto/coordinates.js +228 -0
  72. package/dist/puzzles/fto/facelets.d.ts +6 -0
  73. package/dist/puzzles/fto/facelets.d.ts.map +1 -0
  74. package/dist/puzzles/fto/facelets.js +99 -0
  75. package/dist/puzzles/fto/index.d.ts +12 -0
  76. package/dist/puzzles/fto/index.d.ts.map +1 -0
  77. package/dist/puzzles/fto/index.js +13 -0
  78. package/dist/puzzles/fto/moves.d.ts +12 -0
  79. package/dist/puzzles/fto/moves.d.ts.map +1 -0
  80. package/dist/puzzles/fto/moves.js +115 -0
  81. package/dist/puzzles/fto/random-state.d.ts +17 -0
  82. package/dist/puzzles/fto/random-state.d.ts.map +1 -0
  83. package/dist/puzzles/fto/random-state.js +40 -0
  84. package/dist/puzzles/fto/scrambler.d.ts +6 -0
  85. package/dist/puzzles/fto/scrambler.d.ts.map +1 -0
  86. package/dist/puzzles/fto/scrambler.js +49 -0
  87. package/dist/puzzles/fto/solver/engine.d.ts +18 -0
  88. package/dist/puzzles/fto/solver/engine.d.ts.map +1 -0
  89. package/dist/puzzles/fto/solver/engine.js +1168 -0
  90. package/dist/puzzles/fto/solver/index.d.ts +2 -0
  91. package/dist/puzzles/fto/solver/index.d.ts.map +1 -0
  92. package/dist/puzzles/fto/solver/index.js +1 -0
  93. package/dist/puzzles/fto/state.d.ts +16 -0
  94. package/dist/puzzles/fto/state.d.ts.map +1 -0
  95. package/dist/puzzles/fto/state.js +61 -0
  96. package/dist/puzzles/fto/types.d.ts +32 -0
  97. package/dist/puzzles/fto/types.d.ts.map +1 -0
  98. package/dist/puzzles/fto/types.js +46 -0
  99. package/dist/puzzles/fto/validation.d.ts +19 -0
  100. package/dist/puzzles/fto/validation.d.ts.map +1 -0
  101. package/dist/puzzles/fto/validation.js +143 -0
  102. package/dist/puzzles/index.d.ts +2 -0
  103. package/dist/puzzles/index.d.ts.map +1 -1
  104. package/dist/puzzles/index.js +6 -0
  105. package/dist/puzzles/skewb/index.d.ts +1 -1
  106. package/dist/puzzles/skewb/index.d.ts.map +1 -1
  107. package/dist/puzzles/skewb/index.js +1 -1
  108. package/dist/puzzles/skewb/random-state.d.ts.map +1 -1
  109. package/dist/puzzles/skewb/random-state.js +4 -1
  110. package/dist/puzzles/sq1/facelets.d.ts +12 -0
  111. package/dist/puzzles/sq1/facelets.d.ts.map +1 -0
  112. package/dist/puzzles/sq1/facelets.js +26 -0
  113. package/dist/puzzles/sq1/index.d.ts +10 -0
  114. package/dist/puzzles/sq1/index.d.ts.map +1 -0
  115. package/dist/puzzles/sq1/index.js +11 -0
  116. package/dist/puzzles/sq1/moves.d.ts +55 -0
  117. package/dist/puzzles/sq1/moves.d.ts.map +1 -0
  118. package/dist/puzzles/sq1/moves.js +220 -0
  119. package/dist/puzzles/sq1/random-state.d.ts +6 -0
  120. package/dist/puzzles/sq1/random-state.d.ts.map +1 -0
  121. package/dist/puzzles/sq1/random-state.js +49 -0
  122. package/dist/puzzles/sq1/scrambler.d.ts +10 -0
  123. package/dist/puzzles/sq1/scrambler.d.ts.map +1 -0
  124. package/dist/puzzles/sq1/scrambler.js +90 -0
  125. package/dist/puzzles/sq1/solver/browser-loader.d.ts +5 -0
  126. package/dist/puzzles/sq1/solver/browser-loader.d.ts.map +1 -0
  127. package/dist/puzzles/sq1/solver/browser-loader.js +92 -0
  128. package/dist/puzzles/sq1/solver/full-cube.d.ts +53 -0
  129. package/dist/puzzles/sq1/solver/full-cube.d.ts.map +1 -0
  130. package/dist/puzzles/sq1/solver/full-cube.js +281 -0
  131. package/dist/puzzles/sq1/solver/generated/manifest.json +50 -0
  132. package/dist/puzzles/sq1/solver/generated/shape-bottom-move.bin +0 -0
  133. package/dist/puzzles/sq1/solver/generated/shape-idx.bin +0 -0
  134. package/dist/puzzles/sq1/solver/generated/shape-prun.bin +0 -0
  135. package/dist/puzzles/sq1/solver/generated/shape-top-move.bin +0 -0
  136. package/dist/puzzles/sq1/solver/generated/shape-twist-move.bin +0 -0
  137. package/dist/puzzles/sq1/solver/generated/square-bottom-move.bin +0 -0
  138. package/dist/puzzles/sq1/solver/generated/square-prun.bin +0 -0
  139. package/dist/puzzles/sq1/solver/generated/square-top-move.bin +0 -0
  140. package/dist/puzzles/sq1/solver/generated/square-twist-move.bin +0 -0
  141. package/dist/puzzles/sq1/solver/index.d.ts +5 -0
  142. package/dist/puzzles/sq1/solver/index.d.ts.map +1 -0
  143. package/dist/puzzles/sq1/solver/index.js +4 -0
  144. package/dist/puzzles/sq1/solver/node-loader.d.ts +4 -0
  145. package/dist/puzzles/sq1/solver/node-loader.d.ts.map +1 -0
  146. package/dist/puzzles/sq1/solver/node-loader.js +113 -0
  147. package/dist/puzzles/sq1/solver/search.d.ts +27 -0
  148. package/dist/puzzles/sq1/solver/search.d.ts.map +1 -0
  149. package/dist/puzzles/sq1/solver/search.js +225 -0
  150. package/dist/puzzles/sq1/solver/shape.d.ts +22 -0
  151. package/dist/puzzles/sq1/solver/shape.d.ts.map +1 -0
  152. package/dist/puzzles/sq1/solver/shape.js +185 -0
  153. package/dist/puzzles/sq1/solver/square.d.ts +10 -0
  154. package/dist/puzzles/sq1/solver/square.d.ts.map +1 -0
  155. package/dist/puzzles/sq1/solver/square.js +90 -0
  156. package/dist/puzzles/sq1/solver/table-metadata.d.ts +48 -0
  157. package/dist/puzzles/sq1/solver/table-metadata.d.ts.map +1 -0
  158. package/dist/puzzles/sq1/solver/table-metadata.js +47 -0
  159. package/dist/puzzles/sq1/solver/tables.d.ts +17 -0
  160. package/dist/puzzles/sq1/solver/tables.d.ts.map +1 -0
  161. package/dist/puzzles/sq1/solver/tables.js +66 -0
  162. package/dist/puzzles/sq1/state.d.ts +10 -0
  163. package/dist/puzzles/sq1/state.d.ts.map +1 -0
  164. package/dist/puzzles/sq1/state.js +74 -0
  165. package/dist/puzzles/sq1/types.d.ts +32 -0
  166. package/dist/puzzles/sq1/types.d.ts.map +1 -0
  167. package/dist/puzzles/sq1/types.js +1 -0
  168. package/dist/puzzles/sq1/validation.d.ts +7 -0
  169. package/dist/puzzles/sq1/validation.d.ts.map +1 -0
  170. package/dist/puzzles/sq1/validation.js +64 -0
  171. package/dist/random/prng.d.ts.map +1 -1
  172. package/dist/random/prng.js +9 -4
  173. package/dist-cjs/core/api.js +11 -1
  174. package/dist-cjs/puzzles/cube4/index.js +11 -4
  175. package/dist-cjs/puzzles/cube4/random-state.js +79 -0
  176. package/dist-cjs/puzzles/cube4/reduction/browser-loader.js +100 -0
  177. package/dist-cjs/puzzles/cube4/reduction/center1.js +258 -0
  178. package/dist-cjs/puzzles/cube4/reduction/center2.js +462 -0
  179. package/dist-cjs/puzzles/cube4/reduction/center3.js +284 -0
  180. package/dist-cjs/puzzles/cube4/reduction/edge3.js +522 -0
  181. package/dist-cjs/puzzles/cube4/reduction/generated/center1-distance.bin +1 -0
  182. package/dist-cjs/puzzles/cube4/reduction/generated/center1-manifest.json +46 -0
  183. package/dist-cjs/puzzles/cube4/reduction/generated/center1-move-maps.bin +0 -0
  184. package/dist-cjs/puzzles/cube4/reduction/generated/center2-ct-move.bin +0 -0
  185. package/dist-cjs/puzzles/cube4/reduction/generated/center2-manifest.json +87 -0
  186. package/dist-cjs/puzzles/cube4/reduction/generated/center2-pruning.bin +1 -0
  187. package/dist-cjs/puzzles/cube4/reduction/generated/center2-rl-move.bin +0 -0
  188. package/dist-cjs/puzzles/cube4/reduction/generated/center3-manifest.json +40 -0
  189. package/dist-cjs/puzzles/cube4/reduction/generated/center3-move.bin +0 -0
  190. package/dist-cjs/puzzles/cube4/reduction/generated/center3-pruning.bin +0 -0
  191. package/dist-cjs/puzzles/cube4/reduction/generated/edge3-distances.bin +1 -0
  192. package/dist-cjs/puzzles/cube4/reduction/generated/edge3-manifest.json +12 -0
  193. package/dist-cjs/puzzles/cube4/reduction/geometry.js +308 -0
  194. package/dist-cjs/puzzles/cube4/reduction/node-loader.js +104 -0
  195. package/dist-cjs/puzzles/cube4/reduction/pairing-coordinate.js +294 -0
  196. package/dist-cjs/puzzles/cube4/reduction/phase3-search.js +138 -0
  197. package/dist-cjs/puzzles/cube4/reduction/phase3.js +86 -0
  198. package/dist-cjs/puzzles/cube4/reduction/phase4.js +87 -0
  199. package/dist-cjs/puzzles/cube4/reduction/solve.js +314 -0
  200. package/dist-cjs/puzzles/cube4/scrambler.js +122 -79
  201. package/dist-cjs/puzzles/cube4/validation.js +97 -0
  202. package/dist-cjs/puzzles/fto/coordinates.js +240 -0
  203. package/dist-cjs/puzzles/fto/facelets.js +104 -0
  204. package/dist-cjs/puzzles/fto/index.js +68 -0
  205. package/dist-cjs/puzzles/fto/moves.js +126 -0
  206. package/dist-cjs/puzzles/fto/random-state.js +43 -0
  207. package/dist-cjs/puzzles/fto/scrambler.js +53 -0
  208. package/dist-cjs/puzzles/fto/solver/engine.js +1175 -0
  209. package/dist-cjs/puzzles/fto/solver/index.js +9 -0
  210. package/dist-cjs/puzzles/fto/state.js +69 -0
  211. package/dist-cjs/puzzles/fto/types.js +49 -0
  212. package/dist-cjs/puzzles/fto/validation.js +147 -0
  213. package/dist-cjs/puzzles/index.js +7 -1
  214. package/dist-cjs/puzzles/skewb/index.js +2 -1
  215. package/dist-cjs/puzzles/skewb/random-state.js +4 -1
  216. package/dist-cjs/puzzles/sq1/facelets.js +30 -0
  217. package/dist-cjs/puzzles/sq1/index.js +52 -0
  218. package/dist-cjs/puzzles/sq1/moves.js +234 -0
  219. package/dist-cjs/puzzles/sq1/random-state.js +52 -0
  220. package/dist-cjs/puzzles/sq1/scrambler.js +95 -0
  221. package/dist-cjs/puzzles/sq1/solver/browser-loader.js +97 -0
  222. package/dist-cjs/puzzles/sq1/solver/full-cube.js +289 -0
  223. package/dist-cjs/puzzles/sq1/solver/generated/manifest.json +50 -0
  224. package/dist-cjs/puzzles/sq1/solver/generated/shape-bottom-move.bin +0 -0
  225. package/dist-cjs/puzzles/sq1/solver/generated/shape-idx.bin +0 -0
  226. package/dist-cjs/puzzles/sq1/solver/generated/shape-prun.bin +0 -0
  227. package/dist-cjs/puzzles/sq1/solver/generated/shape-top-move.bin +0 -0
  228. package/dist-cjs/puzzles/sq1/solver/generated/shape-twist-move.bin +0 -0
  229. package/dist-cjs/puzzles/sq1/solver/generated/square-bottom-move.bin +0 -0
  230. package/dist-cjs/puzzles/sq1/solver/generated/square-prun.bin +0 -0
  231. package/dist-cjs/puzzles/sq1/solver/generated/square-top-move.bin +0 -0
  232. package/dist-cjs/puzzles/sq1/solver/generated/square-twist-move.bin +0 -0
  233. package/dist-cjs/puzzles/sq1/solver/index.js +18 -0
  234. package/dist-cjs/puzzles/sq1/solver/node-loader.js +120 -0
  235. package/dist-cjs/puzzles/sq1/solver/search.js +229 -0
  236. package/dist-cjs/puzzles/sq1/solver/shape.js +191 -0
  237. package/dist-cjs/puzzles/sq1/solver/square.js +93 -0
  238. package/dist-cjs/puzzles/sq1/solver/table-metadata.js +50 -0
  239. package/dist-cjs/puzzles/sq1/solver/tables.js +106 -0
  240. package/dist-cjs/puzzles/sq1/state.js +81 -0
  241. package/dist-cjs/puzzles/sq1/types.js +2 -0
  242. package/dist-cjs/puzzles/sq1/validation.js +68 -0
  243. package/dist-cjs/random/prng.js +9 -4
  244. 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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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
+ }
@@ -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 = (0, node_crypto_1.randomBytes)(CRYPTO_BUFFER_BYTES);
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.5.3",
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
+ }