@cubingcenter/scrambler 0.1.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 (359) hide show
  1. package/README.md +169 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +10 -0
  5. package/dist/cli/run.d.ts +9 -0
  6. package/dist/cli/run.d.ts.map +1 -0
  7. package/dist/cli/run.js +139 -0
  8. package/dist/core/api.d.ts +19 -0
  9. package/dist/core/api.d.ts.map +1 -0
  10. package/dist/core/api.js +94 -0
  11. package/dist/core/errors.d.ts +21 -0
  12. package/dist/core/errors.d.ts.map +1 -0
  13. package/dist/core/errors.js +34 -0
  14. package/dist/core/index.d.ts +5 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/index.js +3 -0
  17. package/dist/core/registry.d.ts +10 -0
  18. package/dist/core/registry.d.ts.map +1 -0
  19. package/dist/core/registry.js +35 -0
  20. package/dist/core/types.d.ts +34 -0
  21. package/dist/core/types.d.ts.map +1 -0
  22. package/dist/core/types.js +1 -0
  23. package/dist/index.d.ts +4 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +3 -0
  26. package/dist/puzzles/clock/index.d.ts +2 -0
  27. package/dist/puzzles/clock/index.d.ts.map +1 -0
  28. package/dist/puzzles/clock/index.js +1 -0
  29. package/dist/puzzles/clock/scrambler.d.ts +4 -0
  30. package/dist/puzzles/clock/scrambler.d.ts.map +1 -0
  31. package/dist/puzzles/clock/scrambler.js +50 -0
  32. package/dist/puzzles/cube2/facelets.d.ts +5 -0
  33. package/dist/puzzles/cube2/facelets.d.ts.map +1 -0
  34. package/dist/puzzles/cube2/facelets.js +53 -0
  35. package/dist/puzzles/cube2/index.d.ts +10 -0
  36. package/dist/puzzles/cube2/index.d.ts.map +1 -0
  37. package/dist/puzzles/cube2/index.js +8 -0
  38. package/dist/puzzles/cube2/moves.d.ts +9 -0
  39. package/dist/puzzles/cube2/moves.d.ts.map +1 -0
  40. package/dist/puzzles/cube2/moves.js +79 -0
  41. package/dist/puzzles/cube2/random-state.d.ts +3 -0
  42. package/dist/puzzles/cube2/random-state.d.ts.map +1 -0
  43. package/dist/puzzles/cube2/random-state.js +51 -0
  44. package/dist/puzzles/cube2/scrambler.d.ts +6 -0
  45. package/dist/puzzles/cube2/scrambler.d.ts.map +1 -0
  46. package/dist/puzzles/cube2/scrambler.js +54 -0
  47. package/dist/puzzles/cube2/solver/browser-loader.d.ts +12 -0
  48. package/dist/puzzles/cube2/solver/browser-loader.d.ts.map +1 -0
  49. package/dist/puzzles/cube2/solver/browser-loader.js +80 -0
  50. package/dist/puzzles/cube2/solver/generated/distances.bin +1 -0
  51. package/dist/puzzles/cube2/solver/generated/manifest.json +21 -0
  52. package/dist/puzzles/cube2/solver/generated/orientation-distances.bin +0 -0
  53. package/dist/puzzles/cube2/solver/generated/orientation-table.bin +0 -0
  54. package/dist/puzzles/cube2/solver/generated/permutation-distances.bin +0 -0
  55. package/dist/puzzles/cube2/solver/generated/permutation-table.bin +0 -0
  56. package/dist/puzzles/cube2/solver/generated-assets.d.ts +6 -0
  57. package/dist/puzzles/cube2/solver/generated-assets.d.ts.map +1 -0
  58. package/dist/puzzles/cube2/solver/generated-assets.js +25 -0
  59. package/dist/puzzles/cube2/solver/index.d.ts +3 -0
  60. package/dist/puzzles/cube2/solver/index.d.ts.map +1 -0
  61. package/dist/puzzles/cube2/solver/index.js +1 -0
  62. package/dist/puzzles/cube2/solver/node-loader.d.ts +6 -0
  63. package/dist/puzzles/cube2/solver/node-loader.d.ts.map +1 -0
  64. package/dist/puzzles/cube2/solver/node-loader.js +83 -0
  65. package/dist/puzzles/cube2/solver/search.d.ts +8 -0
  66. package/dist/puzzles/cube2/solver/search.d.ts.map +1 -0
  67. package/dist/puzzles/cube2/solver/search.js +50 -0
  68. package/dist/puzzles/cube2/solver/table-metadata.d.ts +16 -0
  69. package/dist/puzzles/cube2/solver/table-metadata.d.ts.map +1 -0
  70. package/dist/puzzles/cube2/solver/table-metadata.js +15 -0
  71. package/dist/puzzles/cube2/solver/tables.d.ts +14 -0
  72. package/dist/puzzles/cube2/solver/tables.d.ts.map +1 -0
  73. package/dist/puzzles/cube2/solver/tables.js +82 -0
  74. package/dist/puzzles/cube2/state.d.ts +6 -0
  75. package/dist/puzzles/cube2/state.d.ts.map +1 -0
  76. package/dist/puzzles/cube2/state.js +30 -0
  77. package/dist/puzzles/cube2/types.d.ts +23 -0
  78. package/dist/puzzles/cube2/types.d.ts.map +1 -0
  79. package/dist/puzzles/cube2/types.js +21 -0
  80. package/dist/puzzles/cube2/validation.d.ts +6 -0
  81. package/dist/puzzles/cube2/validation.d.ts.map +1 -0
  82. package/dist/puzzles/cube2/validation.js +72 -0
  83. package/dist/puzzles/cube3/facelets.d.ts +5 -0
  84. package/dist/puzzles/cube3/facelets.d.ts.map +1 -0
  85. package/dist/puzzles/cube3/facelets.js +89 -0
  86. package/dist/puzzles/cube3/index.d.ts +10 -0
  87. package/dist/puzzles/cube3/index.d.ts.map +1 -0
  88. package/dist/puzzles/cube3/index.js +8 -0
  89. package/dist/puzzles/cube3/moves.d.ts +9 -0
  90. package/dist/puzzles/cube3/moves.d.ts.map +1 -0
  91. package/dist/puzzles/cube3/moves.js +210 -0
  92. package/dist/puzzles/cube3/random-state.d.ts +3 -0
  93. package/dist/puzzles/cube3/random-state.d.ts.map +1 -0
  94. package/dist/puzzles/cube3/random-state.js +59 -0
  95. package/dist/puzzles/cube3/scrambler.d.ts +6 -0
  96. package/dist/puzzles/cube3/scrambler.d.ts.map +1 -0
  97. package/dist/puzzles/cube3/scrambler.js +59 -0
  98. package/dist/puzzles/cube3/solver/browser-loader.d.ts +5 -0
  99. package/dist/puzzles/cube3/solver/browser-loader.d.ts.map +1 -0
  100. package/dist/puzzles/cube3/solver/browser-loader.js +134 -0
  101. package/dist/puzzles/cube3/solver/browser-worker-pool.d.ts +31 -0
  102. package/dist/puzzles/cube3/solver/browser-worker-pool.d.ts.map +1 -0
  103. package/dist/puzzles/cube3/solver/browser-worker-pool.js +118 -0
  104. package/dist/puzzles/cube3/solver/browser-worker.d.ts +2 -0
  105. package/dist/puzzles/cube3/solver/browser-worker.d.ts.map +1 -0
  106. package/dist/puzzles/cube3/solver/browser-worker.js +71 -0
  107. package/dist/puzzles/cube3/solver/coordinates.d.ts +34 -0
  108. package/dist/puzzles/cube3/solver/coordinates.d.ts.map +1 -0
  109. package/dist/puzzles/cube3/solver/coordinates.js +266 -0
  110. package/dist/puzzles/cube3/solver/generated/manifest.json +404 -0
  111. package/dist/puzzles/cube3/solver/generated/move-cornerOrientation.bin +0 -0
  112. package/dist/puzzles/cube3/solver/generated/move-cornerPermutation.bin +0 -0
  113. package/dist/puzzles/cube3/solver/generated/move-edgeOrientation.bin +0 -0
  114. package/dist/puzzles/cube3/solver/generated/move-slicePermutation.bin +0 -0
  115. package/dist/puzzles/cube3/solver/generated/move-udEdgePermutation.bin +0 -0
  116. package/dist/puzzles/cube3/solver/generated/move-udSlice.bin +0 -0
  117. package/dist/puzzles/cube3/solver/generated/pruning-cornerOrientation.bin +1 -0
  118. package/dist/puzzles/cube3/solver/generated/pruning-cornerOrientationEdgeOrientation.bin +1 -0
  119. package/dist/puzzles/cube3/solver/generated/pruning-cornerPermutation.bin +1 -0
  120. package/dist/puzzles/cube3/solver/generated/pruning-cornerPermutationSlicePermutation.bin +1 -0
  121. package/dist/puzzles/cube3/solver/generated/pruning-edgeOrientation.bin +1 -0
  122. package/dist/puzzles/cube3/solver/generated/pruning-slicePermutation.bin +1 -0
  123. package/dist/puzzles/cube3/solver/generated/pruning-udEdgePermutation.bin +1 -0
  124. package/dist/puzzles/cube3/solver/generated/pruning-udEdgePermutationSlicePermutation.bin +1 -0
  125. package/dist/puzzles/cube3/solver/generated/pruning-udSlice.bin +0 -0
  126. package/dist/puzzles/cube3/solver/generated-assets.d.ts +5 -0
  127. package/dist/puzzles/cube3/solver/generated-assets.d.ts.map +1 -0
  128. package/dist/puzzles/cube3/solver/generated-assets.js +60 -0
  129. package/dist/puzzles/cube3/solver/index.d.ts +10 -0
  130. package/dist/puzzles/cube3/solver/index.d.ts.map +1 -0
  131. package/dist/puzzles/cube3/solver/index.js +5 -0
  132. package/dist/puzzles/cube3/solver/node-loader.d.ts +3 -0
  133. package/dist/puzzles/cube3/solver/node-loader.d.ts.map +1 -0
  134. package/dist/puzzles/cube3/solver/node-loader.js +120 -0
  135. package/dist/puzzles/cube3/solver/phase1.d.ts +28 -0
  136. package/dist/puzzles/cube3/solver/phase1.d.ts.map +1 -0
  137. package/dist/puzzles/cube3/solver/phase1.js +150 -0
  138. package/dist/puzzles/cube3/solver/phase2.d.ts +44 -0
  139. package/dist/puzzles/cube3/solver/phase2.d.ts.map +1 -0
  140. package/dist/puzzles/cube3/solver/phase2.js +270 -0
  141. package/dist/puzzles/cube3/solver/search-utils.d.ts +9 -0
  142. package/dist/puzzles/cube3/solver/search-utils.d.ts.map +1 -0
  143. package/dist/puzzles/cube3/solver/search-utils.js +41 -0
  144. package/dist/puzzles/cube3/solver/table-metadata.d.ts +97 -0
  145. package/dist/puzzles/cube3/solver/table-metadata.d.ts.map +1 -0
  146. package/dist/puzzles/cube3/solver/table-metadata.js +21 -0
  147. package/dist/puzzles/cube3/solver/tables.d.ts +72 -0
  148. package/dist/puzzles/cube3/solver/tables.d.ts.map +1 -0
  149. package/dist/puzzles/cube3/solver/tables.js +202 -0
  150. package/dist/puzzles/cube3/solver/worker-pool.d.ts +18 -0
  151. package/dist/puzzles/cube3/solver/worker-pool.d.ts.map +1 -0
  152. package/dist/puzzles/cube3/solver/worker-pool.js +116 -0
  153. package/dist/puzzles/cube3/solver/worker.d.ts +2 -0
  154. package/dist/puzzles/cube3/solver/worker.d.ts.map +1 -0
  155. package/dist/puzzles/cube3/solver/worker.js +73 -0
  156. package/dist/puzzles/cube3/state.d.ts +6 -0
  157. package/dist/puzzles/cube3/state.d.ts.map +1 -0
  158. package/dist/puzzles/cube3/state.js +40 -0
  159. package/dist/puzzles/cube3/subset-state.d.ts +4 -0
  160. package/dist/puzzles/cube3/subset-state.d.ts.map +1 -0
  161. package/dist/puzzles/cube3/subset-state.js +163 -0
  162. package/dist/puzzles/cube3/types.d.ts +29 -0
  163. package/dist/puzzles/cube3/types.d.ts.map +1 -0
  164. package/dist/puzzles/cube3/types.js +22 -0
  165. package/dist/puzzles/cube3/validation.d.ts +6 -0
  166. package/dist/puzzles/cube3/validation.d.ts.map +1 -0
  167. package/dist/puzzles/cube3/validation.js +83 -0
  168. package/dist/puzzles/cube4/facelets.d.ts +5 -0
  169. package/dist/puzzles/cube4/facelets.d.ts.map +1 -0
  170. package/dist/puzzles/cube4/facelets.js +135 -0
  171. package/dist/puzzles/cube4/index.d.ts +7 -0
  172. package/dist/puzzles/cube4/index.d.ts.map +1 -0
  173. package/dist/puzzles/cube4/index.js +8 -0
  174. package/dist/puzzles/cube4/moves.d.ts +37 -0
  175. package/dist/puzzles/cube4/moves.d.ts.map +1 -0
  176. package/dist/puzzles/cube4/moves.js +243 -0
  177. package/dist/puzzles/cube4/scrambler.d.ts +4 -0
  178. package/dist/puzzles/cube4/scrambler.d.ts.map +1 -0
  179. package/dist/puzzles/cube4/scrambler.js +98 -0
  180. package/dist/puzzles/cube4/state.d.ts +16 -0
  181. package/dist/puzzles/cube4/state.d.ts.map +1 -0
  182. package/dist/puzzles/cube4/state.js +84 -0
  183. package/dist/puzzles/cube4/types.d.ts +76 -0
  184. package/dist/puzzles/cube4/types.d.ts.map +1 -0
  185. package/dist/puzzles/cube4/types.js +62 -0
  186. package/dist/puzzles/cube5x5/index.d.ts +4 -0
  187. package/dist/puzzles/cube5x5/index.d.ts.map +1 -0
  188. package/dist/puzzles/cube5x5/index.js +2 -0
  189. package/dist/puzzles/cube5x5/scrambler.d.ts +4 -0
  190. package/dist/puzzles/cube5x5/scrambler.d.ts.map +1 -0
  191. package/dist/puzzles/cube5x5/scrambler.js +93 -0
  192. package/dist/puzzles/cube5x5/types.d.ts +4 -0
  193. package/dist/puzzles/cube5x5/types.d.ts.map +1 -0
  194. package/dist/puzzles/cube5x5/types.js +4 -0
  195. package/dist/puzzles/cube6x6/index.d.ts +4 -0
  196. package/dist/puzzles/cube6x6/index.d.ts.map +1 -0
  197. package/dist/puzzles/cube6x6/index.js +2 -0
  198. package/dist/puzzles/cube6x6/scrambler.d.ts +4 -0
  199. package/dist/puzzles/cube6x6/scrambler.d.ts.map +1 -0
  200. package/dist/puzzles/cube6x6/scrambler.js +105 -0
  201. package/dist/puzzles/cube6x6/types.d.ts +4 -0
  202. package/dist/puzzles/cube6x6/types.d.ts.map +1 -0
  203. package/dist/puzzles/cube6x6/types.js +8 -0
  204. package/dist/puzzles/cube7x7/index.d.ts +4 -0
  205. package/dist/puzzles/cube7x7/index.d.ts.map +1 -0
  206. package/dist/puzzles/cube7x7/index.js +2 -0
  207. package/dist/puzzles/cube7x7/scrambler.d.ts +4 -0
  208. package/dist/puzzles/cube7x7/scrambler.d.ts.map +1 -0
  209. package/dist/puzzles/cube7x7/scrambler.js +93 -0
  210. package/dist/puzzles/cube7x7/types.d.ts +4 -0
  211. package/dist/puzzles/cube7x7/types.d.ts.map +1 -0
  212. package/dist/puzzles/cube7x7/types.js +8 -0
  213. package/dist/puzzles/index.d.ts +10 -0
  214. package/dist/puzzles/index.d.ts.map +1 -0
  215. package/dist/puzzles/index.js +28 -0
  216. package/dist/puzzles/megaminx/index.d.ts +4 -0
  217. package/dist/puzzles/megaminx/index.d.ts.map +1 -0
  218. package/dist/puzzles/megaminx/index.js +2 -0
  219. package/dist/puzzles/megaminx/scrambler.d.ts +4 -0
  220. package/dist/puzzles/megaminx/scrambler.d.ts.map +1 -0
  221. package/dist/puzzles/megaminx/scrambler.js +56 -0
  222. package/dist/puzzles/megaminx/types.d.ts +6 -0
  223. package/dist/puzzles/megaminx/types.d.ts.map +1 -0
  224. package/dist/puzzles/megaminx/types.js +4 -0
  225. package/dist/puzzles/pyraminx/index.d.ts +9 -0
  226. package/dist/puzzles/pyraminx/index.d.ts.map +1 -0
  227. package/dist/puzzles/pyraminx/index.js +7 -0
  228. package/dist/puzzles/pyraminx/moves.d.ts +9 -0
  229. package/dist/puzzles/pyraminx/moves.d.ts.map +1 -0
  230. package/dist/puzzles/pyraminx/moves.js +117 -0
  231. package/dist/puzzles/pyraminx/random-state.d.ts +3 -0
  232. package/dist/puzzles/pyraminx/random-state.d.ts.map +1 -0
  233. package/dist/puzzles/pyraminx/random-state.js +53 -0
  234. package/dist/puzzles/pyraminx/scrambler.d.ts +6 -0
  235. package/dist/puzzles/pyraminx/scrambler.d.ts.map +1 -0
  236. package/dist/puzzles/pyraminx/scrambler.js +56 -0
  237. package/dist/puzzles/pyraminx/solver.d.ts +10 -0
  238. package/dist/puzzles/pyraminx/solver.d.ts.map +1 -0
  239. package/dist/puzzles/pyraminx/solver.js +160 -0
  240. package/dist/puzzles/pyraminx/state.d.ts +6 -0
  241. package/dist/puzzles/pyraminx/state.d.ts.map +1 -0
  242. package/dist/puzzles/pyraminx/state.js +32 -0
  243. package/dist/puzzles/pyraminx/types.d.ts +17 -0
  244. package/dist/puzzles/pyraminx/types.d.ts.map +1 -0
  245. package/dist/puzzles/pyraminx/types.js +7 -0
  246. package/dist/puzzles/pyraminx/validation.d.ts +8 -0
  247. package/dist/puzzles/pyraminx/validation.d.ts.map +1 -0
  248. package/dist/puzzles/pyraminx/validation.js +79 -0
  249. package/dist/random/index.d.ts +3 -0
  250. package/dist/random/index.d.ts.map +1 -0
  251. package/dist/random/index.js +1 -0
  252. package/dist/random/prng.d.ts +7 -0
  253. package/dist/random/prng.d.ts.map +1 -0
  254. package/dist/random/prng.js +60 -0
  255. package/dist-cjs/cli/index.js +12 -0
  256. package/dist-cjs/cli/run.js +142 -0
  257. package/dist-cjs/core/api.js +102 -0
  258. package/dist-cjs/core/errors.js +42 -0
  259. package/dist-cjs/core/index.js +19 -0
  260. package/dist-cjs/core/registry.js +39 -0
  261. package/dist-cjs/core/types.js +2 -0
  262. package/dist-cjs/index.js +19 -0
  263. package/dist-cjs/package.json +3 -0
  264. package/dist-cjs/puzzles/clock/index.js +6 -0
  265. package/dist-cjs/puzzles/clock/scrambler.js +54 -0
  266. package/dist-cjs/puzzles/cube2/facelets.js +58 -0
  267. package/dist-cjs/puzzles/cube2/index.js +67 -0
  268. package/dist-cjs/puzzles/cube2/moves.js +88 -0
  269. package/dist-cjs/puzzles/cube2/random-state.js +54 -0
  270. package/dist-cjs/puzzles/cube2/scrambler.js +58 -0
  271. package/dist-cjs/puzzles/cube2/solver/browser-loader.js +85 -0
  272. package/dist-cjs/puzzles/cube2/solver/generated/distances.bin +1 -0
  273. package/dist-cjs/puzzles/cube2/solver/generated/manifest.json +21 -0
  274. package/dist-cjs/puzzles/cube2/solver/generated/orientation-distances.bin +0 -0
  275. package/dist-cjs/puzzles/cube2/solver/generated/orientation-table.bin +0 -0
  276. package/dist-cjs/puzzles/cube2/solver/generated/permutation-distances.bin +0 -0
  277. package/dist-cjs/puzzles/cube2/solver/generated/permutation-table.bin +0 -0
  278. package/dist-cjs/puzzles/cube2/solver/generated-assets.js +61 -0
  279. package/dist-cjs/puzzles/cube2/solver/index.js +5 -0
  280. package/dist-cjs/puzzles/cube2/solver/node-loader.js +89 -0
  281. package/dist-cjs/puzzles/cube2/solver/search.js +53 -0
  282. package/dist-cjs/puzzles/cube2/solver/table-metadata.js +18 -0
  283. package/dist-cjs/puzzles/cube2/solver/tables.js +91 -0
  284. package/dist-cjs/puzzles/cube2/state.js +36 -0
  285. package/dist-cjs/puzzles/cube2/types.js +24 -0
  286. package/dist-cjs/puzzles/cube2/validation.js +78 -0
  287. package/dist-cjs/puzzles/cube3/facelets.js +94 -0
  288. package/dist-cjs/puzzles/cube3/index.js +68 -0
  289. package/dist-cjs/puzzles/cube3/moves.js +219 -0
  290. package/dist-cjs/puzzles/cube3/random-state.js +62 -0
  291. package/dist-cjs/puzzles/cube3/scrambler.js +63 -0
  292. package/dist-cjs/puzzles/cube3/solver/browser-loader.js +139 -0
  293. package/dist-cjs/puzzles/cube3/solver/coordinates.js +285 -0
  294. package/dist-cjs/puzzles/cube3/solver/generated/manifest.json +404 -0
  295. package/dist-cjs/puzzles/cube3/solver/generated/move-cornerOrientation.bin +0 -0
  296. package/dist-cjs/puzzles/cube3/solver/generated/move-cornerPermutation.bin +0 -0
  297. package/dist-cjs/puzzles/cube3/solver/generated/move-edgeOrientation.bin +0 -0
  298. package/dist-cjs/puzzles/cube3/solver/generated/move-slicePermutation.bin +0 -0
  299. package/dist-cjs/puzzles/cube3/solver/generated/move-udEdgePermutation.bin +0 -0
  300. package/dist-cjs/puzzles/cube3/solver/generated/move-udSlice.bin +0 -0
  301. package/dist-cjs/puzzles/cube3/solver/generated/pruning-cornerOrientation.bin +1 -0
  302. package/dist-cjs/puzzles/cube3/solver/generated/pruning-cornerOrientationEdgeOrientation.bin +1 -0
  303. package/dist-cjs/puzzles/cube3/solver/generated/pruning-cornerPermutation.bin +1 -0
  304. package/dist-cjs/puzzles/cube3/solver/generated/pruning-cornerPermutationSlicePermutation.bin +1 -0
  305. package/dist-cjs/puzzles/cube3/solver/generated/pruning-edgeOrientation.bin +1 -0
  306. package/dist-cjs/puzzles/cube3/solver/generated/pruning-slicePermutation.bin +1 -0
  307. package/dist-cjs/puzzles/cube3/solver/generated/pruning-udEdgePermutation.bin +1 -0
  308. package/dist-cjs/puzzles/cube3/solver/generated/pruning-udEdgePermutationSlicePermutation.bin +1 -0
  309. package/dist-cjs/puzzles/cube3/solver/generated/pruning-udSlice.bin +0 -0
  310. package/dist-cjs/puzzles/cube3/solver/generated-assets.js +98 -0
  311. package/dist-cjs/puzzles/cube3/solver/index.js +49 -0
  312. package/dist-cjs/puzzles/cube3/solver/node-loader.js +126 -0
  313. package/dist-cjs/puzzles/cube3/solver/phase1.js +158 -0
  314. package/dist-cjs/puzzles/cube3/solver/phase2.js +279 -0
  315. package/dist-cjs/puzzles/cube3/solver/search-utils.js +49 -0
  316. package/dist-cjs/puzzles/cube3/solver/table-metadata.js +24 -0
  317. package/dist-cjs/puzzles/cube3/solver/tables.js +216 -0
  318. package/dist-cjs/puzzles/cube3/state.js +46 -0
  319. package/dist-cjs/puzzles/cube3/subset-state.js +166 -0
  320. package/dist-cjs/puzzles/cube3/types.js +25 -0
  321. package/dist-cjs/puzzles/cube3/validation.js +89 -0
  322. package/dist-cjs/puzzles/cube4/facelets.js +140 -0
  323. package/dist-cjs/puzzles/cube4/index.js +45 -0
  324. package/dist-cjs/puzzles/cube4/moves.js +251 -0
  325. package/dist-cjs/puzzles/cube4/scrambler.js +135 -0
  326. package/dist-cjs/puzzles/cube4/state.js +92 -0
  327. package/dist-cjs/puzzles/cube4/types.js +65 -0
  328. package/dist-cjs/puzzles/cube5x5/index.js +9 -0
  329. package/dist-cjs/puzzles/cube5x5/scrambler.js +97 -0
  330. package/dist-cjs/puzzles/cube5x5/types.js +7 -0
  331. package/dist-cjs/puzzles/cube6x6/index.js +9 -0
  332. package/dist-cjs/puzzles/cube6x6/scrambler.js +109 -0
  333. package/dist-cjs/puzzles/cube6x6/types.js +11 -0
  334. package/dist-cjs/puzzles/cube7x7/index.js +9 -0
  335. package/dist-cjs/puzzles/cube7x7/scrambler.js +97 -0
  336. package/dist-cjs/puzzles/cube7x7/types.js +11 -0
  337. package/dist-cjs/puzzles/index.js +64 -0
  338. package/dist-cjs/puzzles/megaminx/index.js +11 -0
  339. package/dist-cjs/puzzles/megaminx/scrambler.js +60 -0
  340. package/dist-cjs/puzzles/megaminx/types.js +7 -0
  341. package/dist-cjs/puzzles/pyraminx/index.js +30 -0
  342. package/dist-cjs/puzzles/pyraminx/moves.js +126 -0
  343. package/dist-cjs/puzzles/pyraminx/random-state.js +56 -0
  344. package/dist-cjs/puzzles/pyraminx/scrambler.js +60 -0
  345. package/dist-cjs/puzzles/pyraminx/solver.js +170 -0
  346. package/dist-cjs/puzzles/pyraminx/state.js +38 -0
  347. package/dist-cjs/puzzles/pyraminx/types.js +10 -0
  348. package/dist-cjs/puzzles/pyraminx/validation.js +84 -0
  349. package/dist-cjs/random/index.js +5 -0
  350. package/dist-cjs/random/prng.js +63 -0
  351. package/docs/cubingcenter-integration.md +69 -0
  352. package/docs/development.md +44 -0
  353. package/docs/facelets.md +64 -0
  354. package/docs/getting-started.md +73 -0
  355. package/examples/cli-json.md +30 -0
  356. package/examples/commonjs.cjs +11 -0
  357. package/examples/esm.mjs +9 -0
  358. package/examples/timer-preview.mjs +29 -0
  359. package/package.json +53 -0
@@ -0,0 +1,98 @@
1
+ import { createSolvedCube4State } from "./state.js";
2
+ import { applyCube4Algorithm } from "./moves.js";
3
+ import { toCube4Facelets, formatCube4Facelets } from "./facelets.js";
4
+ const SCRAMBLE_LENGTH = 40;
5
+ export const cube4ScrambleGenerator = {
6
+ info: {
7
+ eventId: "444",
8
+ name: "4x4x4 Cube",
9
+ puzzle: "cube-4x4",
10
+ quality: "random-move",
11
+ generator: "cube4-random-move",
12
+ description: "Random-move 4x4 scramble with 40 moves."
13
+ },
14
+ generate(options = {}) {
15
+ return generateCube4Scramble(options);
16
+ }
17
+ };
18
+ export async function generateCube4Scramble(options = {}) {
19
+ // Use cubing library for high-quality random-state 4x4 scrambles
20
+ const { randomScrambleForEvent } = await import("cubing/scramble");
21
+ const alg = await randomScrambleForEvent("444");
22
+ const scramble = alg.toString();
23
+ const moves = scramble.split(/\s+/);
24
+ const targetState = applyCube4Algorithm(createSolvedCube4State(), moves);
25
+ const faceletString = formatCube4Facelets(toCube4Facelets(targetState));
26
+ const result = {
27
+ eventId: "444",
28
+ scramble,
29
+ moves,
30
+ quality: "random-state",
31
+ generator: "cubing-scramble",
32
+ metadata: {
33
+ totalMoves: moves.length,
34
+ distribution: "random-state",
35
+ state: targetState,
36
+ facelets: toCube4Facelets(targetState),
37
+ faceletString
38
+ }
39
+ };
40
+ if (options.seed !== undefined) {
41
+ result.seed = options.seed;
42
+ }
43
+ return result;
44
+ }
45
+ const MAX_AXIS_BLOCK = 3;
46
+ const ROTATION_PAIRS = {
47
+ "Uw": "Dw", "Dw": "Uw",
48
+ "Rw": "Lw", "Lw": "Rw",
49
+ "Fw": "Bw", "Bw": "Fw",
50
+ };
51
+ function getBaseMove(move) {
52
+ if (move.endsWith("2") || move.endsWith("'")) {
53
+ return move.slice(0, -1);
54
+ }
55
+ return move;
56
+ }
57
+ function getAxis(base) {
58
+ if (base.includes("R") || base.includes("L"))
59
+ return "X";
60
+ if (base.includes("U") || base.includes("D"))
61
+ return "Y";
62
+ if (base.includes("F") || base.includes("B"))
63
+ return "Z";
64
+ return "";
65
+ }
66
+ function isRedundant(moves, newMove) {
67
+ if (moves.length === 0)
68
+ return false;
69
+ const newBase = getBaseMove(newMove);
70
+ const newAxis = getAxis(newBase);
71
+ const lastBase = getBaseMove(moves[moves.length - 1]);
72
+ if (lastBase === newBase)
73
+ return true;
74
+ const lastAxis = getAxis(lastBase);
75
+ if (newAxis !== lastAxis)
76
+ return false;
77
+ const basesInBlock = new Set();
78
+ basesInBlock.add(lastBase);
79
+ let blockLength = 1;
80
+ for (let i = moves.length - 2; i >= 0; i--) {
81
+ const base = getBaseMove(moves[i]);
82
+ if (getAxis(base) === newAxis) {
83
+ basesInBlock.add(base);
84
+ blockLength++;
85
+ }
86
+ else {
87
+ break;
88
+ }
89
+ }
90
+ if (basesInBlock.has(newBase))
91
+ return true;
92
+ const complement = ROTATION_PAIRS[newBase];
93
+ if (complement && basesInBlock.has(complement))
94
+ return true;
95
+ if (blockLength >= MAX_AXIS_BLOCK)
96
+ return true;
97
+ return false;
98
+ }
@@ -0,0 +1,16 @@
1
+ import type { Cube4State } from "./types.js";
2
+ export declare function createSolvedCube4State(): Cube4State;
3
+ export declare function cloneCube4State(s: Cube4State): Cube4State;
4
+ export declare function cube4StatesEqual(a: Cube4State, b: Cube4State): boolean;
5
+ export declare function isSolvedCube4State(state: Cube4State): boolean;
6
+ /**
7
+ * Check if centers are "reduced" — each face has exactly 4 centers of its color.
8
+ */
9
+ export declare function areCentersReduced(state: Cube4State): boolean;
10
+ /**
11
+ * Check if wings are paired — wings 2k and 2k+1 occupy the same
12
+ * 3x3-edge slot (i.e. ⌊wp[pos]/2⌋ matches for the two positions
13
+ * in each pair slot).
14
+ */
15
+ export declare function areWingsPaired(state: Cube4State): boolean;
16
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube4/state.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C,wBAAgB,sBAAsB,IAAI,UAAU,CAanD;AAMD,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAOzD;AAMD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAOtE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAE7D;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAS5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAUzD"}
@@ -0,0 +1,84 @@
1
+ import { CORNER_COUNT, WING_COUNT, CENTER_COUNT, CENTERS_PER_FACE, FACE_COUNT } from "./types.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Factory
4
+ // ---------------------------------------------------------------------------
5
+ export function createSolvedCube4State() {
6
+ const cp = new Uint8Array(CORNER_COUNT);
7
+ const co = new Uint8Array(CORNER_COUNT);
8
+ const wp = new Uint8Array(WING_COUNT);
9
+ const centers = new Uint8Array(CENTER_COUNT);
10
+ for (let i = 0; i < CORNER_COUNT; i++)
11
+ cp[i] = i;
12
+ for (let i = 0; i < WING_COUNT; i++)
13
+ wp[i] = i;
14
+ for (let i = 0; i < CENTER_COUNT; i++) {
15
+ centers[i] = Math.floor(i / CENTERS_PER_FACE);
16
+ }
17
+ return { cp, co, wp, centers };
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // Clone
21
+ // ---------------------------------------------------------------------------
22
+ export function cloneCube4State(s) {
23
+ return {
24
+ cp: new Uint8Array(s.cp),
25
+ co: new Uint8Array(s.co),
26
+ wp: new Uint8Array(s.wp),
27
+ centers: new Uint8Array(s.centers)
28
+ };
29
+ }
30
+ // ---------------------------------------------------------------------------
31
+ // Equality
32
+ // ---------------------------------------------------------------------------
33
+ export function cube4StatesEqual(a, b) {
34
+ return (typedArrayEqual(a.cp, b.cp) &&
35
+ typedArrayEqual(a.co, b.co) &&
36
+ typedArrayEqual(a.wp, b.wp) &&
37
+ typedArrayEqual(a.centers, b.centers));
38
+ }
39
+ export function isSolvedCube4State(state) {
40
+ return cube4StatesEqual(state, createSolvedCube4State());
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Helpers
44
+ // ---------------------------------------------------------------------------
45
+ /**
46
+ * Check if centers are "reduced" — each face has exactly 4 centers of its color.
47
+ */
48
+ export function areCentersReduced(state) {
49
+ const counts = new Uint8Array(FACE_COUNT);
50
+ for (let i = 0; i < CENTER_COUNT; i++) {
51
+ counts[state.centers[i]] = counts[state.centers[i]] + 1;
52
+ }
53
+ for (let i = 0; i < FACE_COUNT; i++) {
54
+ if (counts[i] !== CENTERS_PER_FACE)
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ /**
60
+ * Check if wings are paired — wings 2k and 2k+1 occupy the same
61
+ * 3x3-edge slot (i.e. ⌊wp[pos]/2⌋ matches for the two positions
62
+ * in each pair slot).
63
+ */
64
+ export function areWingsPaired(state) {
65
+ for (let pair = 0; pair < 12; pair++) {
66
+ const posA = pair * 2;
67
+ const posB = pair * 2 + 1;
68
+ const pieceA = state.wp[posA];
69
+ const pieceB = state.wp[posB];
70
+ // Both wings in this slot must belong to the same 3x3-edge
71
+ if (Math.floor(pieceA / 2) !== Math.floor(pieceB / 2))
72
+ return false;
73
+ }
74
+ return true;
75
+ }
76
+ function typedArrayEqual(a, b) {
77
+ if (a.length !== b.length)
78
+ return false;
79
+ for (let i = 0; i < a.length; i++) {
80
+ if (a[i] !== b[i])
81
+ return false;
82
+ }
83
+ return true;
84
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * 4x4x4 Cube Types and Constants
3
+ *
4
+ * Piece counts:
5
+ * - 8 corners (same as 3x3, with permutation and orientation)
6
+ * - 24 wings (edge pieces without orientation)
7
+ * - 24 centers (4 per face, identified by color 0-5)
8
+ */
9
+ export declare const CORNER_COUNT = 8;
10
+ export declare const WING_COUNT = 24;
11
+ export declare const CENTER_COUNT = 24;
12
+ export declare const FACE_COUNT = 6;
13
+ export declare const CENTERS_PER_FACE = 4;
14
+ export declare const U = 0;
15
+ export declare const R = 1;
16
+ export declare const F = 2;
17
+ export declare const D = 3;
18
+ export declare const L = 4;
19
+ export declare const B = 5;
20
+ export type Cube4Face = "U" | "R" | "F" | "D" | "L" | "B";
21
+ export type Cube4FaceMove = "U" | "D" | "R" | "L" | "F" | "B" | "Uw" | "Dw" | "Rw" | "Lw" | "Fw" | "Bw";
22
+ export type Cube4MoveSuffix = "" | "2" | "'";
23
+ export type Cube4Move = `${Cube4FaceMove}${Cube4MoveSuffix}`;
24
+ export declare const CUBE4_FACE_MOVES: readonly Cube4FaceMove[];
25
+ export declare const CUBE4_ALL_MOVES: readonly Cube4Move[];
26
+ export declare const CUBE4_OUTER_MOVES: readonly Cube4Move[];
27
+ /**
28
+ * Full 4x4 state using TypedArrays for GC-friendly performance.
29
+ *
30
+ * - cp: corner permutation (0-7)
31
+ * - co: corner orientation (0-2)
32
+ * - wp: wing permutation (0-23)
33
+ * - centers: center colors (0-5, representing U/R/F/D/L/B)
34
+ */
35
+ export interface Cube4State {
36
+ readonly cp: Uint8Array;
37
+ readonly co: Uint8Array;
38
+ readonly wp: Uint8Array;
39
+ readonly centers: Uint8Array;
40
+ }
41
+ export type Cube4Sticker = "U" | "R" | "F" | "D" | "L" | "B";
42
+ export type Cube4Facelets = Record<Cube4Face, Cube4Sticker[]>;
43
+ export interface Cube4RandomStateOptions {
44
+ seed?: string | number;
45
+ }
46
+ /**
47
+ * Corner numbering (same as 3x3):
48
+ * 0=URF 1=UFL 2=ULB 3=UBR
49
+ * 4=DFR 5=DLF 6=DBL 7=DRB
50
+ *
51
+ * Wing numbering (24 wings, grouped by the 3x3-edge they belong to):
52
+ * The two wings of each 3x3 edge are numbered consecutively.
53
+ * Wing 2k and Wing 2k+1 form the pair for 3x3 edge k.
54
+ *
55
+ * Pair 0 (UR): wings 0, 1
56
+ * Pair 1 (UF): wings 2, 3
57
+ * Pair 2 (UL): wings 4, 5
58
+ * Pair 3 (UB): wings 6, 7
59
+ * Pair 4 (DR): wings 8, 9
60
+ * Pair 5 (DF): wings 10, 11
61
+ * Pair 6 (DL): wings 12, 13
62
+ * Pair 7 (DB): wings 14, 15
63
+ * Pair 8 (FR): wings 16, 17
64
+ * Pair 9 (FL): wings 18, 19
65
+ * Pair 10 (BL): wings 20, 21
66
+ * Pair 11 (BR): wings 22, 23
67
+ *
68
+ * Center numbering (4 centers per face, in reading order of inner 2x2):
69
+ * Face U: centers 0- 3
70
+ * Face R: centers 4- 7
71
+ * Face F: centers 8-11
72
+ * Face D: centers 12-15
73
+ * Face L: centers 16-19
74
+ * Face B: centers 20-23
75
+ */
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube4/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAIlC,eAAO,MAAM,CAAC,IAAI,CAAC;AACnB,eAAO,MAAM,CAAC,IAAI,CAAC;AACnB,eAAO,MAAM,CAAC,IAAI,CAAC;AACnB,eAAO,MAAM,CAAC,IAAI,CAAC;AACnB,eAAO,MAAM,CAAC,IAAI,CAAC;AACnB,eAAO,MAAM,CAAC,IAAI,CAAC;AAEnB,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAK1D,MAAM,MAAM,aAAa,GACrB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GACjC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,GAAG,aAAa,GAAG,eAAe,EAAE,CAAC;AAE7D,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAGpD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAE/C,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EAIjD,CAAC;AAIF;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAC9B;AAED,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * 4x4x4 Cube Types and Constants
3
+ *
4
+ * Piece counts:
5
+ * - 8 corners (same as 3x3, with permutation and orientation)
6
+ * - 24 wings (edge pieces without orientation)
7
+ * - 24 centers (4 per face, identified by color 0-5)
8
+ */
9
+ export const CORNER_COUNT = 8;
10
+ export const WING_COUNT = 24;
11
+ export const CENTER_COUNT = 24;
12
+ export const FACE_COUNT = 6;
13
+ export const CENTERS_PER_FACE = 4;
14
+ // ---------- Faces ----------
15
+ // Face indices: U=0, R=1, F=2, D=3, L=4, B=5
16
+ export const U = 0;
17
+ export const R = 1;
18
+ export const F = 2;
19
+ export const D = 3;
20
+ export const L = 4;
21
+ export const B = 5;
22
+ export const CUBE4_FACE_MOVES = [
23
+ "U", "D", "R", "L", "F", "B",
24
+ "Uw", "Dw", "Rw", "Lw", "Fw", "Bw"
25
+ ];
26
+ export const CUBE4_ALL_MOVES = CUBE4_FACE_MOVES.flatMap((face) => [`${face}`, `${face}2`, `${face}'`]);
27
+ // Outer-only moves (used in certain reduction phases)
28
+ export const CUBE4_OUTER_MOVES = [
29
+ "U", "U2", "U'", "D", "D2", "D'",
30
+ "R", "R2", "R'", "L", "L2", "L'",
31
+ "F", "F2", "F'", "B", "B2", "B'"
32
+ ];
33
+ /**
34
+ * Corner numbering (same as 3x3):
35
+ * 0=URF 1=UFL 2=ULB 3=UBR
36
+ * 4=DFR 5=DLF 6=DBL 7=DRB
37
+ *
38
+ * Wing numbering (24 wings, grouped by the 3x3-edge they belong to):
39
+ * The two wings of each 3x3 edge are numbered consecutively.
40
+ * Wing 2k and Wing 2k+1 form the pair for 3x3 edge k.
41
+ *
42
+ * Pair 0 (UR): wings 0, 1
43
+ * Pair 1 (UF): wings 2, 3
44
+ * Pair 2 (UL): wings 4, 5
45
+ * Pair 3 (UB): wings 6, 7
46
+ * Pair 4 (DR): wings 8, 9
47
+ * Pair 5 (DF): wings 10, 11
48
+ * Pair 6 (DL): wings 12, 13
49
+ * Pair 7 (DB): wings 14, 15
50
+ * Pair 8 (FR): wings 16, 17
51
+ * Pair 9 (FL): wings 18, 19
52
+ * Pair 10 (BL): wings 20, 21
53
+ * Pair 11 (BR): wings 22, 23
54
+ *
55
+ * Center numbering (4 centers per face, in reading order of inner 2x2):
56
+ * Face U: centers 0- 3
57
+ * Face R: centers 4- 7
58
+ * Face F: centers 8-11
59
+ * Face D: centers 12-15
60
+ * Face L: centers 16-19
61
+ * Face B: centers 20-23
62
+ */
@@ -0,0 +1,4 @@
1
+ export type { Cube5Move } from "./types.js";
2
+ export { CUBE5_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
3
+ export { cube5ScrambleGenerator, generateCube5Scramble } from "./scrambler.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube5x5/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CUBE5_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
2
+ export { cube5ScrambleGenerator, generateCube5Scramble } from "./scrambler.js";
@@ -0,0 +1,4 @@
1
+ import type { ScrambleGenerator, ScrambleOptions, ScrambleResult } from "../../core/index.js";
2
+ export declare const cube5ScrambleGenerator: ScrambleGenerator;
3
+ export declare function generateCube5Scramble(options?: ScrambleOptions): ScrambleResult;
4
+ //# sourceMappingURL=scrambler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrambler.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube5x5/scrambler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK9F,eAAO,MAAM,sBAAsB,EAAE,iBAYpC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CAiCnF"}
@@ -0,0 +1,93 @@
1
+ import { createRandomSource } from "../../random/index.js";
2
+ import { CUBE5_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
3
+ export const cube5ScrambleGenerator = {
4
+ info: {
5
+ eventId: "555",
6
+ name: "5x5x5 Cube",
7
+ puzzle: "cube-5x5",
8
+ quality: "random-move",
9
+ generator: "cube5-random-move",
10
+ description: "Random-move 5x5 scramble with 60 moves."
11
+ },
12
+ generate(options = {}) {
13
+ return generateCube5Scramble(options);
14
+ }
15
+ };
16
+ export function generateCube5Scramble(options = {}) {
17
+ const random = createRandomSource(options.seed);
18
+ const moves = [];
19
+ for (let i = 0; i < SCRAMBLE_LENGTH; i++) {
20
+ let move;
21
+ do {
22
+ move = random.choice(CUBE5_ALL_MOVES);
23
+ } while (isRedundant(moves, move));
24
+ moves.push(move);
25
+ }
26
+ const scramble = moves.join(" ");
27
+ const result = {
28
+ eventId: "555",
29
+ scramble,
30
+ moves,
31
+ quality: "random-move",
32
+ generator: "cube5-random-move",
33
+ metadata: {
34
+ totalMoves: moves.length,
35
+ distribution: "random-move-wca-format"
36
+ }
37
+ };
38
+ if (options.seed !== undefined) {
39
+ result.seed = options.seed;
40
+ }
41
+ return result;
42
+ }
43
+ const MAX_AXIS_BLOCK = 4;
44
+ function getBaseMove(move) {
45
+ if (move.endsWith("2") || move.endsWith("'")) {
46
+ return move.slice(0, -1);
47
+ }
48
+ return move;
49
+ }
50
+ function getAxis(base) {
51
+ if (base.includes("R") || base.includes("L"))
52
+ return "X";
53
+ if (base.includes("U") || base.includes("D"))
54
+ return "Y";
55
+ if (base.includes("F") || base.includes("B"))
56
+ return "Z";
57
+ return "";
58
+ }
59
+ function isRedundant(moves, newMove) {
60
+ if (moves.length === 0)
61
+ return false;
62
+ const newBase = getBaseMove(newMove);
63
+ const newAxis = getAxis(newBase);
64
+ const lastBase = getBaseMove(moves[moves.length - 1]);
65
+ // No same base move consecutively
66
+ if (lastBase === newBase)
67
+ return true;
68
+ const lastAxis = getAxis(lastBase);
69
+ // Different axis: always allowed
70
+ if (newAxis !== lastAxis)
71
+ return false;
72
+ // Same axis: scan the current block
73
+ const basesInBlock = new Set();
74
+ basesInBlock.add(lastBase);
75
+ let blockLength = 1;
76
+ for (let i = moves.length - 2; i >= 0; i--) {
77
+ const base = getBaseMove(moves[i]);
78
+ if (getAxis(base) === newAxis) {
79
+ basesInBlock.add(base);
80
+ blockLength++;
81
+ }
82
+ else {
83
+ break;
84
+ }
85
+ }
86
+ // No same base within the block
87
+ if (basesInBlock.has(newBase))
88
+ return true;
89
+ // Max block length
90
+ if (blockLength >= MAX_AXIS_BLOCK)
91
+ return true;
92
+ return false;
93
+ }
@@ -0,0 +1,4 @@
1
+ export type Cube5Move = "U" | "U2" | "U'" | "D" | "D2" | "D'" | "R" | "R2" | "R'" | "L" | "L2" | "L'" | "F" | "F2" | "F'" | "B" | "B2" | "B'" | "Uw" | "Uw2" | "Uw'" | "Dw" | "Dw2" | "Dw'" | "Rw" | "Rw2" | "Rw'" | "Lw" | "Lw2" | "Lw'" | "Fw" | "Fw2" | "Fw'" | "Bw" | "Bw2" | "Bw'";
2
+ export declare const CUBE5_ALL_MOVES: readonly Cube5Move[];
3
+ export declare const SCRAMBLE_LENGTH = 60;
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube5x5/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAKzB,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAE/C,CAAC;AAEF,eAAO,MAAM,eAAe,KAAK,CAAC"}
@@ -0,0 +1,4 @@
1
+ const BASE_MOVES = ["U", "D", "R", "L", "F", "B", "Uw", "Dw", "Rw", "Lw", "Fw", "Bw"];
2
+ const SUFFIXES = ["", "2", "'"];
3
+ export const CUBE5_ALL_MOVES = BASE_MOVES.flatMap((base) => SUFFIXES.map(suffix => `${base}${suffix}`));
4
+ export const SCRAMBLE_LENGTH = 60;
@@ -0,0 +1,4 @@
1
+ export type { Cube6Move } from "./types.js";
2
+ export { CUBE6_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
3
+ export { cube6ScrambleGenerator, generateCube6Scramble } from "./scrambler.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube6x6/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CUBE6_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
2
+ export { cube6ScrambleGenerator, generateCube6Scramble } from "./scrambler.js";
@@ -0,0 +1,4 @@
1
+ import type { ScrambleGenerator, ScrambleOptions, ScrambleResult } from "../../core/index.js";
2
+ export declare const cube6ScrambleGenerator: ScrambleGenerator;
3
+ export declare function generateCube6Scramble(options?: ScrambleOptions): ScrambleResult;
4
+ //# sourceMappingURL=scrambler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrambler.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube6x6/scrambler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK9F,eAAO,MAAM,sBAAsB,EAAE,iBAYpC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CAiCnF"}
@@ -0,0 +1,105 @@
1
+ import { createRandomSource } from "../../random/index.js";
2
+ import { CUBE6_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
3
+ export const cube6ScrambleGenerator = {
4
+ info: {
5
+ eventId: "666",
6
+ name: "6x6x6 Cube",
7
+ puzzle: "cube-6x6",
8
+ quality: "random-move",
9
+ generator: "cube6-random-move",
10
+ description: "Random-move 6x6 scramble with 80 moves."
11
+ },
12
+ generate(options = {}) {
13
+ return generateCube6Scramble(options);
14
+ }
15
+ };
16
+ export function generateCube6Scramble(options = {}) {
17
+ const random = createRandomSource(options.seed);
18
+ const moves = [];
19
+ for (let i = 0; i < SCRAMBLE_LENGTH; i++) {
20
+ let move;
21
+ do {
22
+ move = random.choice(CUBE6_ALL_MOVES);
23
+ } while (isRedundant(moves, move));
24
+ moves.push(move);
25
+ }
26
+ const scramble = moves.join(" ");
27
+ const result = {
28
+ eventId: "666",
29
+ scramble,
30
+ moves,
31
+ quality: "random-move",
32
+ generator: "cube6-random-move",
33
+ metadata: {
34
+ totalMoves: moves.length,
35
+ distribution: "random-move-wca-format"
36
+ }
37
+ };
38
+ if (options.seed !== undefined) {
39
+ result.seed = options.seed;
40
+ }
41
+ return result;
42
+ }
43
+ const MAX_AXIS_BLOCK = 4;
44
+ // On a 6x6, these 3-wide pairs cover all 6 layers together.
45
+ // Any combination of both in the same block is always reducible
46
+ // to at most 1 move + a free cube reorientation.
47
+ const ROTATION_PAIRS = {
48
+ "3Uw": "3Dw", "3Dw": "3Uw",
49
+ "3Rw": "3Lw", "3Lw": "3Rw",
50
+ "3Fw": "3Bw", "3Bw": "3Fw",
51
+ };
52
+ function getBaseMove(move) {
53
+ if (move.endsWith("2") || move.endsWith("'")) {
54
+ return move.slice(0, -1);
55
+ }
56
+ return move;
57
+ }
58
+ function getAxis(base) {
59
+ if (base.includes("R") || base.includes("L"))
60
+ return "X";
61
+ if (base.includes("U") || base.includes("D"))
62
+ return "Y";
63
+ if (base.includes("F") || base.includes("B"))
64
+ return "Z";
65
+ return "";
66
+ }
67
+ function isRedundant(moves, newMove) {
68
+ if (moves.length === 0)
69
+ return false;
70
+ const newBase = getBaseMove(newMove);
71
+ const newAxis = getAxis(newBase);
72
+ const lastBase = getBaseMove(moves[moves.length - 1]);
73
+ // No same base move consecutively
74
+ if (lastBase === newBase)
75
+ return true;
76
+ const lastAxis = getAxis(lastBase);
77
+ // Different axis: always allowed
78
+ if (newAxis !== lastAxis)
79
+ return false;
80
+ // Same axis: scan the current block
81
+ const basesInBlock = new Set();
82
+ basesInBlock.add(lastBase);
83
+ let blockLength = 1;
84
+ for (let i = moves.length - 2; i >= 0; i--) {
85
+ const base = getBaseMove(moves[i]);
86
+ if (getAxis(base) === newAxis) {
87
+ basesInBlock.add(base);
88
+ blockLength++;
89
+ }
90
+ else {
91
+ break;
92
+ }
93
+ }
94
+ // No same base within the block
95
+ if (basesInBlock.has(newBase))
96
+ return true;
97
+ // No rotation pairs (3-wide complements that cover all 6 layers)
98
+ const complement = ROTATION_PAIRS[newBase];
99
+ if (complement && basesInBlock.has(complement))
100
+ return true;
101
+ // Max block length
102
+ if (blockLength >= MAX_AXIS_BLOCK)
103
+ return true;
104
+ return false;
105
+ }
@@ -0,0 +1,4 @@
1
+ export type Cube6Move = "U" | "U2" | "U'" | "D" | "D2" | "D'" | "R" | "R2" | "R'" | "L" | "L2" | "L'" | "F" | "F2" | "F'" | "B" | "B2" | "B'" | "Uw" | "Uw2" | "Uw'" | "Dw" | "Dw2" | "Dw'" | "Rw" | "Rw2" | "Rw'" | "Lw" | "Lw2" | "Lw'" | "Fw" | "Fw2" | "Fw'" | "Bw" | "Bw2" | "Bw'" | "3Uw" | "3Uw2" | "3Uw'" | "3Dw" | "3Dw2" | "3Dw'" | "3Rw" | "3Rw2" | "3Rw'" | "3Lw" | "3Lw2" | "3Lw'" | "3Fw" | "3Fw2" | "3Fw'" | "3Bw" | "3Bw2" | "3Bw'";
2
+ export declare const CUBE6_ALL_MOVES: readonly Cube6Move[];
3
+ export declare const SCRAMBLE_LENGTH = 80;
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube6x6/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,GAAG,GAAG,IAAI,GAAG,IAAI,GACjB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,IAAI,GAAG,KAAK,GAAG,KAAK,GACpB,KAAK,GAAG,MAAM,GAAG,MAAM,GACvB,KAAK,GAAG,MAAM,GAAG,MAAM,GACvB,KAAK,GAAG,MAAM,GAAG,MAAM,GACvB,KAAK,GAAG,MAAM,GAAG,MAAM,GACvB,KAAK,GAAG,MAAM,GAAG,MAAM,GACvB,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAS5B,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAE/C,CAAC;AAEF,eAAO,MAAM,eAAe,KAAK,CAAC"}
@@ -0,0 +1,8 @@
1
+ const BASE_MOVES = [
2
+ "U", "D", "R", "L", "F", "B",
3
+ "Uw", "Dw", "Rw", "Lw", "Fw", "Bw",
4
+ "3Uw", "3Dw", "3Rw", "3Lw", "3Fw", "3Bw"
5
+ ];
6
+ const SUFFIXES = ["", "2", "'"];
7
+ export const CUBE6_ALL_MOVES = BASE_MOVES.flatMap((base) => SUFFIXES.map(suffix => `${base}${suffix}`));
8
+ export const SCRAMBLE_LENGTH = 80;
@@ -0,0 +1,4 @@
1
+ export type { Cube7Move } from "./types.js";
2
+ export { CUBE7_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
3
+ export { cube7ScrambleGenerator, generateCube7Scramble } from "./scrambler.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube7x7/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CUBE7_ALL_MOVES, SCRAMBLE_LENGTH } from "./types.js";
2
+ export { cube7ScrambleGenerator, generateCube7Scramble } from "./scrambler.js";
@@ -0,0 +1,4 @@
1
+ import type { ScrambleGenerator, ScrambleOptions, ScrambleResult } from "../../core/index.js";
2
+ export declare const cube7ScrambleGenerator: ScrambleGenerator;
3
+ export declare function generateCube7Scramble(options?: ScrambleOptions): ScrambleResult;
4
+ //# sourceMappingURL=scrambler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrambler.d.ts","sourceRoot":"","sources":["../../../src/puzzles/cube7x7/scrambler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK9F,eAAO,MAAM,sBAAsB,EAAE,iBAYpC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CAiCnF"}