@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,21 @@
1
+ {
2
+ "version": 1,
3
+ "files": {
4
+ "permutationTable": {
5
+ "file": "permutation-table.bin",
6
+ "entries": 45360,
7
+ "checksum": 1683412725
8
+ },
9
+ "orientationTable": {
10
+ "file": "orientation-table.bin",
11
+ "entries": 6561,
12
+ "checksum": 1566738619
13
+ },
14
+ "distances": {
15
+ "file": "distances.bin",
16
+ "entries": 1837080,
17
+ "checksum": 2959532459,
18
+ "maxDepth": 11
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,61 @@
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.loadGeneratedCube2SolverTables = loadGeneratedCube2SolverTables;
37
+ const browser_loader_js_1 = require("./browser-loader.js");
38
+ let cachedTables;
39
+ function isBrowser() {
40
+ return typeof self !== "undefined";
41
+ }
42
+ async function loadGeneratedCube2SolverTables() {
43
+ if (isBrowser()) {
44
+ const browserTables = (0, browser_loader_js_1.getCachedBrowserTables)();
45
+ if (browserTables) {
46
+ return browserTables;
47
+ }
48
+ throw new Error("2x2 solver tables are not loaded. " +
49
+ "In browser environments, call `initializeScrambler(baseUrl)` " +
50
+ "before generating scrambles.");
51
+ }
52
+ cachedTables ??= await loadNodeTables();
53
+ return cachedTables;
54
+ }
55
+ async function loadNodeTables() {
56
+ const loader = await Promise.resolve().then(() => __importStar(require(
57
+ /* webpackIgnore: true */
58
+ /* @vite-ignore */
59
+ "./node-loader.js")));
60
+ return loader.readGeneratedCube2SolverTables();
61
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.solveCube2State = void 0;
4
+ var search_js_1 = require("./search.js");
5
+ Object.defineProperty(exports, "solveCube2State", { enumerable: true, get: function () { return search_js_1.solveCube2State; } });
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readGeneratedCube2SolverTables = readGeneratedCube2SolverTables;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_module_1 = require("node:module");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const table_metadata_js_1 = require("./table-metadata.js");
11
+ const GENERATED_DIRECTORY = "puzzles/cube2/solver/generated";
12
+ function readGeneratedCube2SolverTables() {
13
+ const assetDirectory = resolveGeneratedAssetDirectory();
14
+ const manifest = JSON.parse((0, node_fs_1.readFileSync)(node_path_1.default.join(assetDirectory, "manifest.json"), "utf8"));
15
+ if (manifest.version !== 1) {
16
+ throw new Error(`Unsupported cube2 solver table manifest version: ${manifest.version}`);
17
+ }
18
+ const permutationTable = readUint16Table(assetDirectory, manifest.files.permutationTable, table_metadata_js_1.CUBE2_SOLVER_TABLE_METADATA.permutationTable.checksum);
19
+ const orientationTable = readUint16Table(assetDirectory, manifest.files.orientationTable, table_metadata_js_1.CUBE2_SOLVER_TABLE_METADATA.orientationTable.checksum);
20
+ const distances = readUint8Table(assetDirectory, manifest.files.distances, table_metadata_js_1.CUBE2_SOLVER_TABLE_METADATA.distances.checksum);
21
+ return {
22
+ permutationTable,
23
+ orientationTable,
24
+ distances
25
+ };
26
+ }
27
+ function readUint16Table(assetDirectory, entry, expectedChecksum) {
28
+ const buffer = (0, node_fs_1.readFileSync)(node_path_1.default.join(assetDirectory, entry.file));
29
+ if (buffer.length !== entry.entries * 2) {
30
+ throw new Error(`Invalid byte size for ${entry.file}`);
31
+ }
32
+ const values = new Uint16Array(entry.entries);
33
+ for (let index = 0; index < values.length; index += 1) {
34
+ values[index] = buffer.readUInt16LE(index * 2);
35
+ }
36
+ assertChecksum(entry.file, checksum(values), expectedChecksum);
37
+ return values;
38
+ }
39
+ function readUint8Table(assetDirectory, entry, expectedChecksum) {
40
+ const buffer = (0, node_fs_1.readFileSync)(node_path_1.default.join(assetDirectory, entry.file));
41
+ if (buffer.length !== entry.entries) {
42
+ throw new Error(`Invalid byte size for ${entry.file}`);
43
+ }
44
+ const values = new Uint8Array(buffer);
45
+ assertChecksum(entry.file, checksum(values), expectedChecksum);
46
+ return values;
47
+ }
48
+ function resolveGeneratedAssetDirectory() {
49
+ const envDirectory = process.env.CUBINGCENTER_SCRAMBLER_TABLES_DIR;
50
+ if (envDirectory && (0, node_fs_1.existsSync)(node_path_1.default.join(envDirectory, "manifest.json"))) {
51
+ return envDirectory;
52
+ }
53
+ for (const candidate of getAssetDirectoryCandidates()) {
54
+ if ((0, node_fs_1.existsSync)(node_path_1.default.join(candidate, "manifest.json"))) {
55
+ return candidate;
56
+ }
57
+ }
58
+ throw new Error("Unable to find generated 2x2 solver tables. Run pnpm cube2:tables.");
59
+ }
60
+ function getAssetDirectoryCandidates() {
61
+ const cwd = process.cwd();
62
+ const candidates = [
63
+ node_path_1.default.join(cwd, "src", GENERATED_DIRECTORY),
64
+ node_path_1.default.join(cwd, "dist", GENERATED_DIRECTORY),
65
+ node_path_1.default.join(cwd, "dist-cjs", GENERATED_DIRECTORY)
66
+ ];
67
+ try {
68
+ const requireFromCwd = (0, node_module_1.createRequire)(node_path_1.default.join(cwd, "package.json"));
69
+ const packageEntry = requireFromCwd.resolve("@cubingcenter/scrambler");
70
+ candidates.push(node_path_1.default.join(node_path_1.default.dirname(packageEntry), GENERATED_DIRECTORY));
71
+ }
72
+ catch {
73
+ // Source-tree usage is covered by the cwd candidates.
74
+ }
75
+ return candidates;
76
+ }
77
+ function assertChecksum(file, actual, expected) {
78
+ if (actual !== expected) {
79
+ throw new Error(`Checksum mismatch for ${file}: expected ${expected}, received ${actual}.`);
80
+ }
81
+ }
82
+ function checksum(values) {
83
+ let hash = 0x811c9dc5;
84
+ for (let index = 0; index < values.length; index += 1) {
85
+ hash ^= values[index];
86
+ hash = Math.imul(hash, 0x01000193);
87
+ }
88
+ return hash >>> 0;
89
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.solveCube2State = solveCube2State;
4
+ const state_js_1 = require("../state.js");
5
+ const tables_js_1 = require("./tables.js");
6
+ async function solveCube2State(state) {
7
+ await (0, tables_js_1.ensureTablesLoaded)();
8
+ if (state.corners.permutation[6] !== 6 || state.corners.orientation[6] !== 0) {
9
+ throw new Error("The 2x2 solver requires the DBL corner (index 6) to be solved " +
10
+ "as the frame of reference. Please normalize the state before solving.");
11
+ }
12
+ const permTable = tables_js_1.PERMUTATION_TABLE;
13
+ const orientTable = tables_js_1.ORIENTATION_TABLE;
14
+ const distances = tables_js_1.DISTANCES;
15
+ let permIndex = (0, tables_js_1.encodePermutation)(state.corners.permutation);
16
+ let orientIndex = (0, tables_js_1.encodeOrientation)(state.corners.orientation);
17
+ const moves = [];
18
+ // High-performance branchless inlined lookup
19
+ const initialCombined = permIndex * tables_js_1.ORIENTATION_COUNT + orientIndex;
20
+ let distance = (distances[initialCombined >> 1] >> ((initialCombined & 1) << 2)) & 0x0f;
21
+ if (distance === 0) {
22
+ return { moves, depth: 0, state: (0, state_js_1.createSolvedCube2State)() };
23
+ }
24
+ while (distance > 0) {
25
+ let foundNext = false;
26
+ const permOffset = permIndex * tables_js_1.MOVE_COUNT;
27
+ const orientOffset = orientIndex * tables_js_1.MOVE_COUNT;
28
+ const nextDistance = distance - 1;
29
+ for (let m = 0; m < tables_js_1.BFS_MOVES.length; m++) {
30
+ const nextPerm = permTable[permOffset + m];
31
+ const nextOrient = orientTable[orientOffset + m];
32
+ // High-performance branchless inlined lookup
33
+ const combined = nextPerm * tables_js_1.ORIENTATION_COUNT + nextOrient;
34
+ const nextDist = (distances[combined >> 1] >> ((combined & 1) << 2)) & 0x0f;
35
+ if (nextDist === nextDistance) {
36
+ moves.push(tables_js_1.BFS_MOVES[m]);
37
+ permIndex = nextPerm;
38
+ orientIndex = nextOrient;
39
+ distance = nextDistance;
40
+ foundNext = true;
41
+ break;
42
+ }
43
+ }
44
+ if (!foundNext) {
45
+ throw new Error("BFS distance table corrupted or unreachable state.");
46
+ }
47
+ }
48
+ return {
49
+ moves,
50
+ depth: moves.length,
51
+ state: (0, state_js_1.createSolvedCube2State)()
52
+ };
53
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CUBE2_SOLVER_TABLE_METADATA = void 0;
4
+ exports.CUBE2_SOLVER_TABLE_METADATA = {
5
+ permutationTable: {
6
+ entries: 45360,
7
+ checksum: 1683412725
8
+ },
9
+ orientationTable: {
10
+ entries: 6561,
11
+ checksum: 1566738619
12
+ },
13
+ distances: {
14
+ entries: 1837080,
15
+ checksum: 2959532459,
16
+ maxDepth: 11
17
+ }
18
+ };
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BFS_MOVES = exports.DISTANCES = exports.ORIENTATION_TABLE = exports.PERMUTATION_TABLE = exports.MOVE_COUNT = exports.ORIENTATION_COUNT = exports.PERMUTATION_COUNT = void 0;
4
+ exports.encodePermutation = encodePermutation;
5
+ exports.encodeOrientation = encodeOrientation;
6
+ exports.ensureTablesLoaded = ensureTablesLoaded;
7
+ exports.getDistance = getDistance;
8
+ exports.getPermutationTransition = getPermutationTransition;
9
+ exports.getOrientationTransition = getOrientationTransition;
10
+ const generated_assets_js_1 = require("./generated-assets.js");
11
+ exports.PERMUTATION_COUNT = 5040;
12
+ exports.ORIENTATION_COUNT = 729;
13
+ exports.MOVE_COUNT = 9;
14
+ // ---------------------------------------------------------------------------
15
+ // Coordinate encoding / decoding
16
+ // ---------------------------------------------------------------------------
17
+ function encodePermutation(permutation) {
18
+ const perm7 = permutation.filter((_, i) => i !== 6);
19
+ const mapped = perm7.map((x) => (x > 6 ? x - 1 : x));
20
+ let index = 0;
21
+ const available = [0, 1, 2, 3, 4, 5, 6];
22
+ for (let position = 0; position < 7; position += 1) {
23
+ const value = mapped[position];
24
+ const selected = available.indexOf(value);
25
+ index += selected * factorialSmall(6 - position);
26
+ available.splice(selected, 1);
27
+ }
28
+ return index;
29
+ }
30
+ function encodeOrientation(orientation) {
31
+ const orient7 = orientation.filter((_, i) => i !== 6);
32
+ let index = 0;
33
+ let multiplier = 1;
34
+ for (let position = 5; position >= 0; position -= 1) {
35
+ index += orient7[position] * multiplier;
36
+ multiplier *= 3;
37
+ }
38
+ return index;
39
+ }
40
+ function factorialSmall(n) {
41
+ let result = 1;
42
+ for (let i = 2; i <= n; i += 1) {
43
+ result *= i;
44
+ }
45
+ return result;
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // Table loading
49
+ // ---------------------------------------------------------------------------
50
+ let tablesLoaded = false;
51
+ exports.PERMUTATION_TABLE = null;
52
+ exports.ORIENTATION_TABLE = null;
53
+ exports.DISTANCES = null;
54
+ async function ensureTablesLoaded() {
55
+ if (tablesLoaded) {
56
+ return;
57
+ }
58
+ const tables = await (0, generated_assets_js_1.loadGeneratedCube2SolverTables)();
59
+ exports.PERMUTATION_TABLE = tables.permutationTable;
60
+ exports.ORIENTATION_TABLE = tables.orientationTable;
61
+ exports.DISTANCES = tables.distances;
62
+ tablesLoaded = true;
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Public API
66
+ // ---------------------------------------------------------------------------
67
+ function getDistance(permIndex, orientIndex) {
68
+ if (!exports.DISTANCES) {
69
+ throw new Error("Cube2 solver tables not loaded. Call ensureTablesLoaded() first.");
70
+ }
71
+ const combined = permIndex * exports.ORIENTATION_COUNT + orientIndex;
72
+ const byteValue = exports.DISTANCES[combined >> 1];
73
+ return (combined & 1) === 0 ? (byteValue & 0x0f) : (byteValue >> 4);
74
+ }
75
+ function getPermutationTransition(move, permIndex) {
76
+ if (!exports.PERMUTATION_TABLE) {
77
+ throw new Error("Cube2 solver tables not loaded. Call ensureTablesLoaded() first.");
78
+ }
79
+ return exports.PERMUTATION_TABLE[permIndex * exports.MOVE_COUNT + move];
80
+ }
81
+ function getOrientationTransition(move, orientIndex) {
82
+ if (!exports.ORIENTATION_TABLE) {
83
+ throw new Error("Cube2 solver tables not loaded. Call ensureTablesLoaded() first.");
84
+ }
85
+ return exports.ORIENTATION_TABLE[orientIndex * exports.MOVE_COUNT + move];
86
+ }
87
+ exports.BFS_MOVES = [
88
+ "U", "U2", "U'",
89
+ "R", "R2", "R'",
90
+ "F", "F2", "F'"
91
+ ];
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSolvedCube2State = createSolvedCube2State;
4
+ exports.cloneCube2State = cloneCube2State;
5
+ exports.cube2StatesEqual = cube2StatesEqual;
6
+ exports.isSolvedCube2State = isSolvedCube2State;
7
+ const types_js_1 = require("./types.js");
8
+ function createSolvedCube2State() {
9
+ return {
10
+ corners: {
11
+ permutation: range(types_js_1.CORNER_COUNT),
12
+ orientation: Array(types_js_1.CORNER_COUNT).fill(0)
13
+ }
14
+ };
15
+ }
16
+ function cloneCube2State(state) {
17
+ return {
18
+ corners: {
19
+ permutation: [...state.corners.permutation],
20
+ orientation: [...state.corners.orientation]
21
+ }
22
+ };
23
+ }
24
+ function cube2StatesEqual(left, right) {
25
+ return (arraysEqual(left.corners.permutation, right.corners.permutation) &&
26
+ arraysEqual(left.corners.orientation, right.corners.orientation));
27
+ }
28
+ function isSolvedCube2State(state) {
29
+ return cube2StatesEqual(state, createSolvedCube2State());
30
+ }
31
+ function range(length) {
32
+ return Array.from({ length }, (_, index) => index);
33
+ }
34
+ function arraysEqual(left, right) {
35
+ return left.length === right.length && left.every((value, index) => value === right[index]);
36
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CUBE2_MOVES = exports.CORNER_COUNT = void 0;
4
+ exports.CORNER_COUNT = 8;
5
+ exports.CUBE2_MOVES = [
6
+ "U",
7
+ "U2",
8
+ "U'",
9
+ "D",
10
+ "D2",
11
+ "D'",
12
+ "R",
13
+ "R2",
14
+ "R'",
15
+ "L",
16
+ "L2",
17
+ "L'",
18
+ "F",
19
+ "F2",
20
+ "F'",
21
+ "B",
22
+ "B2",
23
+ "B'"
24
+ ];
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCube2State = validateCube2State;
4
+ exports.isOneMoveFromSolvedCube2State = isOneMoveFromSolvedCube2State;
5
+ exports.isAllowedRandomCube2State = isAllowedRandomCube2State;
6
+ exports.permutationParity = permutationParity;
7
+ const types_js_1 = require("./types.js");
8
+ const moves_js_1 = require("./moves.js");
9
+ const state_js_1 = require("./state.js");
10
+ function validateCube2State(state) {
11
+ const errors = [
12
+ ...validatePermutation("corner", state.corners.permutation, types_js_1.CORNER_COUNT),
13
+ ...validateOrientations("corner", state.corners.orientation, types_js_1.CORNER_COUNT, 3)
14
+ ];
15
+ if (errors.length === 0) {
16
+ const cornerOrientation = sum(state.corners.orientation) % 3;
17
+ if (cornerOrientation !== 0) {
18
+ errors.push("Corner orientation sum must be divisible by 3.");
19
+ }
20
+ }
21
+ return {
22
+ valid: errors.length === 0,
23
+ errors
24
+ };
25
+ }
26
+ function isOneMoveFromSolvedCube2State(state) {
27
+ const solved = (0, state_js_1.createSolvedCube2State)();
28
+ return types_js_1.CUBE2_MOVES.some((move) => (0, state_js_1.cube2StatesEqual)((0, moves_js_1.applyCube2Move)(solved, move), state));
29
+ }
30
+ function isAllowedRandomCube2State(state) {
31
+ return validateCube2State(state).valid &&
32
+ !(0, state_js_1.isSolvedCube2State)(state) &&
33
+ !isOneMoveFromSolvedCube2State(state);
34
+ }
35
+ function permutationParity(permutation) {
36
+ let inversions = 0;
37
+ for (let left = 0; left < permutation.length; left += 1) {
38
+ for (let right = left + 1; right < permutation.length; right += 1) {
39
+ if (permutation[left] > permutation[right]) {
40
+ inversions += 1;
41
+ }
42
+ }
43
+ }
44
+ return (inversions % 2);
45
+ }
46
+ function validatePermutation(label, permutation, length) {
47
+ const errors = [];
48
+ const seen = new Set();
49
+ if (permutation.length !== length) {
50
+ errors.push(`${label} permutation must contain ${length} values.`);
51
+ }
52
+ for (const value of permutation) {
53
+ if (!Number.isInteger(value) || value < 0 || value >= length) {
54
+ errors.push(`${label} permutation contains out-of-range value: ${value}.`);
55
+ continue;
56
+ }
57
+ if (seen.has(value)) {
58
+ errors.push(`${label} permutation contains duplicate value: ${value}.`);
59
+ }
60
+ seen.add(value);
61
+ }
62
+ return errors;
63
+ }
64
+ function validateOrientations(label, orientations, length, modulo) {
65
+ const errors = [];
66
+ if (orientations.length !== length) {
67
+ errors.push(`${label} orientation must contain ${length} values.`);
68
+ }
69
+ for (const value of orientations) {
70
+ if (!Number.isInteger(value) || value < 0 || value >= modulo) {
71
+ errors.push(`${label} orientation contains out-of-range value: ${value}.`);
72
+ }
73
+ }
74
+ return errors;
75
+ }
76
+ function sum(values) {
77
+ return values.reduce((total, value) => total + value, 0);
78
+ }
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toCube3Facelets = toCube3Facelets;
4
+ exports.formatCube3Facelets = formatCube3Facelets;
5
+ exports.getCube3FaceOrder = getCube3FaceOrder;
6
+ const FACE_ORDER = ["U", "R", "F", "D", "L", "B"];
7
+ const CORNER_PIECE_STICKERS = [
8
+ ["U", "R", "F"],
9
+ ["U", "F", "L"],
10
+ ["U", "L", "B"],
11
+ ["U", "B", "R"],
12
+ ["D", "F", "R"],
13
+ ["D", "L", "F"],
14
+ ["D", "B", "L"],
15
+ ["D", "R", "B"]
16
+ ];
17
+ const CORNER_POSITION_SLOTS = [
18
+ [["U", 8], ["R", 0], ["F", 2]],
19
+ [["U", 6], ["F", 0], ["L", 2]],
20
+ [["U", 0], ["L", 0], ["B", 2]],
21
+ [["U", 2], ["B", 0], ["R", 2]],
22
+ [["D", 2], ["F", 8], ["R", 6]],
23
+ [["D", 0], ["L", 8], ["F", 6]],
24
+ [["D", 6], ["B", 8], ["L", 6]],
25
+ [["D", 8], ["R", 8], ["B", 6]]
26
+ ];
27
+ const EDGE_PIECE_STICKERS = [
28
+ ["U", "R"],
29
+ ["U", "F"],
30
+ ["U", "L"],
31
+ ["U", "B"],
32
+ ["D", "R"],
33
+ ["D", "F"],
34
+ ["D", "L"],
35
+ ["D", "B"],
36
+ ["F", "R"],
37
+ ["F", "L"],
38
+ ["B", "L"],
39
+ ["B", "R"]
40
+ ];
41
+ const EDGE_POSITION_SLOTS = [
42
+ [["U", 5], ["R", 1]],
43
+ [["U", 7], ["F", 1]],
44
+ [["U", 3], ["L", 1]],
45
+ [["U", 1], ["B", 1]],
46
+ [["D", 5], ["R", 7]],
47
+ [["D", 1], ["F", 7]],
48
+ [["D", 3], ["L", 7]],
49
+ [["D", 7], ["B", 7]],
50
+ [["F", 5], ["R", 3]],
51
+ [["F", 3], ["L", 5]],
52
+ [["B", 5], ["L", 3]],
53
+ [["B", 3], ["R", 5]]
54
+ ];
55
+ function toCube3Facelets(state) {
56
+ const facelets = createEmptyFacelets();
57
+ for (const face of FACE_ORDER) {
58
+ facelets[face][4] = face;
59
+ }
60
+ for (let position = 0; position < CORNER_POSITION_SLOTS.length; position += 1) {
61
+ const piece = state.corners.permutation[position];
62
+ const orientation = state.corners.orientation[position];
63
+ placeOrientedStickers(facelets, CORNER_POSITION_SLOTS[position], CORNER_PIECE_STICKERS[piece], orientation);
64
+ }
65
+ for (let position = 0; position < EDGE_POSITION_SLOTS.length; position += 1) {
66
+ const piece = state.edges.permutation[position];
67
+ const orientation = state.edges.orientation[position];
68
+ placeOrientedStickers(facelets, EDGE_POSITION_SLOTS[position], EDGE_PIECE_STICKERS[piece], orientation);
69
+ }
70
+ return facelets;
71
+ }
72
+ function formatCube3Facelets(facelets) {
73
+ return FACE_ORDER.map((face) => facelets[face].join("")).join("");
74
+ }
75
+ function getCube3FaceOrder() {
76
+ return FACE_ORDER;
77
+ }
78
+ function createEmptyFacelets() {
79
+ return {
80
+ U: Array(9).fill("U"),
81
+ R: Array(9).fill("R"),
82
+ F: Array(9).fill("F"),
83
+ D: Array(9).fill("D"),
84
+ L: Array(9).fill("L"),
85
+ B: Array(9).fill("B")
86
+ };
87
+ }
88
+ function placeOrientedStickers(facelets, slots, stickers, orientation) {
89
+ for (let index = 0; index < slots.length; index += 1) {
90
+ const [face, stickerIndex] = slots[index];
91
+ const sticker = stickers[(index - orientation + stickers.length) % stickers.length];
92
+ facelets[face][stickerIndex] = sticker;
93
+ }
94
+ }
@@ -0,0 +1,68 @@
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.solver = exports.toCube3Facelets = exports.getCube3FaceOrder = exports.formatCube3Facelets = exports.generateCube3Scramble = exports.cube3ScrambleGenerator = exports.generateRandomCube3State = exports.validateCube3State = exports.permutationParity = exports.isOneMoveFromSolvedCube3State = exports.isAllowedRandomCube3State = exports.isSolvedCube3State = exports.cube3StatesEqual = exports.createSolvedCube3State = exports.cloneCube3State = exports.parseCube3Move = exports.parseCube3Algorithm = exports.invertCube3Move = exports.invertCube3Algorithm = exports.formatCube3Algorithm = exports.applyCube3Move = exports.applyCube3Algorithm = exports.EDGE_COUNT = exports.CORNER_COUNT = exports.CUBE3_MOVES = void 0;
37
+ var types_js_1 = require("./types.js");
38
+ Object.defineProperty(exports, "CUBE3_MOVES", { enumerable: true, get: function () { return types_js_1.CUBE3_MOVES; } });
39
+ Object.defineProperty(exports, "CORNER_COUNT", { enumerable: true, get: function () { return types_js_1.CORNER_COUNT; } });
40
+ Object.defineProperty(exports, "EDGE_COUNT", { enumerable: true, get: function () { return types_js_1.EDGE_COUNT; } });
41
+ var moves_js_1 = require("./moves.js");
42
+ Object.defineProperty(exports, "applyCube3Algorithm", { enumerable: true, get: function () { return moves_js_1.applyCube3Algorithm; } });
43
+ Object.defineProperty(exports, "applyCube3Move", { enumerable: true, get: function () { return moves_js_1.applyCube3Move; } });
44
+ Object.defineProperty(exports, "formatCube3Algorithm", { enumerable: true, get: function () { return moves_js_1.formatCube3Algorithm; } });
45
+ Object.defineProperty(exports, "invertCube3Algorithm", { enumerable: true, get: function () { return moves_js_1.invertCube3Algorithm; } });
46
+ Object.defineProperty(exports, "invertCube3Move", { enumerable: true, get: function () { return moves_js_1.invertCube3Move; } });
47
+ Object.defineProperty(exports, "parseCube3Algorithm", { enumerable: true, get: function () { return moves_js_1.parseCube3Algorithm; } });
48
+ Object.defineProperty(exports, "parseCube3Move", { enumerable: true, get: function () { return moves_js_1.parseCube3Move; } });
49
+ var state_js_1 = require("./state.js");
50
+ Object.defineProperty(exports, "cloneCube3State", { enumerable: true, get: function () { return state_js_1.cloneCube3State; } });
51
+ Object.defineProperty(exports, "createSolvedCube3State", { enumerable: true, get: function () { return state_js_1.createSolvedCube3State; } });
52
+ Object.defineProperty(exports, "cube3StatesEqual", { enumerable: true, get: function () { return state_js_1.cube3StatesEqual; } });
53
+ Object.defineProperty(exports, "isSolvedCube3State", { enumerable: true, get: function () { return state_js_1.isSolvedCube3State; } });
54
+ var validation_js_1 = require("./validation.js");
55
+ Object.defineProperty(exports, "isAllowedRandomCube3State", { enumerable: true, get: function () { return validation_js_1.isAllowedRandomCube3State; } });
56
+ Object.defineProperty(exports, "isOneMoveFromSolvedCube3State", { enumerable: true, get: function () { return validation_js_1.isOneMoveFromSolvedCube3State; } });
57
+ Object.defineProperty(exports, "permutationParity", { enumerable: true, get: function () { return validation_js_1.permutationParity; } });
58
+ Object.defineProperty(exports, "validateCube3State", { enumerable: true, get: function () { return validation_js_1.validateCube3State; } });
59
+ var random_state_js_1 = require("./random-state.js");
60
+ Object.defineProperty(exports, "generateRandomCube3State", { enumerable: true, get: function () { return random_state_js_1.generateRandomCube3State; } });
61
+ var scrambler_js_1 = require("./scrambler.js");
62
+ Object.defineProperty(exports, "cube3ScrambleGenerator", { enumerable: true, get: function () { return scrambler_js_1.cube3ScrambleGenerator; } });
63
+ Object.defineProperty(exports, "generateCube3Scramble", { enumerable: true, get: function () { return scrambler_js_1.generateCube3Scramble; } });
64
+ var facelets_js_1 = require("./facelets.js");
65
+ Object.defineProperty(exports, "formatCube3Facelets", { enumerable: true, get: function () { return facelets_js_1.formatCube3Facelets; } });
66
+ Object.defineProperty(exports, "getCube3FaceOrder", { enumerable: true, get: function () { return facelets_js_1.getCube3FaceOrder; } });
67
+ Object.defineProperty(exports, "toCube3Facelets", { enumerable: true, get: function () { return facelets_js_1.toCube3Facelets; } });
68
+ exports.solver = __importStar(require("./solver/index.js"));