@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
+ "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.loadGeneratedCube3SolverTables = loadGeneratedCube3SolverTables;
37
+ exports.loadGeneratedCube3Phase1Tables = loadGeneratedCube3Phase1Tables;
38
+ exports.loadGeneratedCube3Phase2Tables = loadGeneratedCube3Phase2Tables;
39
+ const browser_loader_js_1 = require("./browser-loader.js");
40
+ let cachedGeneratedTables;
41
+ function isBrowser() {
42
+ return typeof self !== "undefined";
43
+ }
44
+ async function loadGeneratedCube3SolverTables() {
45
+ if (isBrowser()) {
46
+ const browserTables = (0, browser_loader_js_1.getCachedBrowserTables)();
47
+ if (browserTables) {
48
+ return browserTables;
49
+ }
50
+ throw new Error("3x3 solver tables are not loaded. " +
51
+ "In browser environments, call `initializeScrambler(baseUrl)` " +
52
+ "before generating scrambles.");
53
+ }
54
+ cachedGeneratedTables ??= await loadNodeTables();
55
+ return cachedGeneratedTables;
56
+ }
57
+ async function loadNodeTables() {
58
+ const loader = await Promise.resolve().then(() => __importStar(require(
59
+ /* webpackIgnore: true */
60
+ /* @vite-ignore */
61
+ "./node-loader.js")));
62
+ return loader.readGeneratedCube3SolverTables();
63
+ }
64
+ async function loadGeneratedCube3Phase1Tables() {
65
+ const tables = await loadGeneratedCube3SolverTables();
66
+ return {
67
+ phase1Moves: tables.phase1Moves,
68
+ moveTables: {
69
+ cornerOrientation: tables.moveTables.cornerOrientation,
70
+ edgeOrientation: tables.moveTables.edgeOrientation,
71
+ udSlice: tables.moveTables.udSlice
72
+ },
73
+ pruningTables: {
74
+ cornerOrientation: tables.pruningTables.cornerOrientation,
75
+ edgeOrientation: tables.pruningTables.edgeOrientation,
76
+ udSlice: tables.pruningTables.udSlice,
77
+ cornerOrientationEdgeOrientation: tables.pruningTables.cornerOrientationEdgeOrientation
78
+ }
79
+ };
80
+ }
81
+ async function loadGeneratedCube3Phase2Tables() {
82
+ const tables = await loadGeneratedCube3SolverTables();
83
+ return {
84
+ phase2Moves: tables.phase2Moves,
85
+ moveTables: {
86
+ cornerPermutation: tables.moveTables.cornerPermutation,
87
+ udEdgePermutation: tables.moveTables.udEdgePermutation,
88
+ slicePermutation: tables.moveTables.slicePermutation
89
+ },
90
+ pruningTables: {
91
+ cornerPermutation: tables.pruningTables.cornerPermutation,
92
+ udEdgePermutation: tables.pruningTables.udEdgePermutation,
93
+ slicePermutation: tables.pruningTables.slicePermutation,
94
+ cornerPermutationSlicePermutation: tables.pruningTables.cornerPermutationSlicePermutation,
95
+ udEdgePermutationSlicePermutation: tables.pruningTables.udEdgePermutationSlicePermutation
96
+ }
97
+ };
98
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lookupCube3MoveTable = exports.loadCube3SolverTables = exports.loadCube3Phase2Tables = exports.loadCube3Phase1Tables = exports.generateCube3SolverTables = exports.generateCube3PruningTable = exports.generateCube3MoveTable = exports.generateCube3Phase2Tables = exports.generateCube3Phase1Tables = exports.checksum = exports.CUBE3_PHASE2_MOVES = exports.CUBE3_PHASE1_MOVES = exports.CUBE3_SOLVER_TABLE_METADATA = exports.moveCoordinate = exports.encodeUdSlice = exports.encodeUdEdgePermutation = exports.encodeSlicePermutation = exports.encodePermutation = exports.encodeEdgeOrientation = exports.encodeCube3Coordinates = exports.encodeCornerOrientation = exports.encodeCube3Coordinate = exports.decodeUdSlice = exports.decodeUdEdgePermutation = exports.decodeSlicePermutation = exports.decodePermutation = exports.decodeEdgeOrientation = exports.decodeCornerOrientation = exports.createRepresentativeStateForCoordinate = exports.CUBE3_COORDINATE_RANGES = exports.Cube3Phase1SearchError = exports.solveCube3Phase1 = exports.isCube3Phase1Solved = exports.encodeCube3Phase1Coordinates = exports.applyCube3Phase1Moves = exports.Cube3Phase2SearchError = exports.solveCube3State = exports.solveCube3Phase2 = exports.isCube3Phase2Solved = exports.encodeCube3Phase2Coordinates = exports.applyCube3Phase2Moves = void 0;
4
+ var phase2_js_1 = require("./phase2.js");
5
+ Object.defineProperty(exports, "applyCube3Phase2Moves", { enumerable: true, get: function () { return phase2_js_1.applyCube3Phase2Moves; } });
6
+ Object.defineProperty(exports, "encodeCube3Phase2Coordinates", { enumerable: true, get: function () { return phase2_js_1.encodeCube3Phase2Coordinates; } });
7
+ Object.defineProperty(exports, "isCube3Phase2Solved", { enumerable: true, get: function () { return phase2_js_1.isCube3Phase2Solved; } });
8
+ Object.defineProperty(exports, "solveCube3Phase2", { enumerable: true, get: function () { return phase2_js_1.solveCube3Phase2; } });
9
+ Object.defineProperty(exports, "solveCube3State", { enumerable: true, get: function () { return phase2_js_1.solveCube3State; } });
10
+ Object.defineProperty(exports, "Cube3Phase2SearchError", { enumerable: true, get: function () { return phase2_js_1.Cube3Phase2SearchError; } });
11
+ var phase1_js_1 = require("./phase1.js");
12
+ Object.defineProperty(exports, "applyCube3Phase1Moves", { enumerable: true, get: function () { return phase1_js_1.applyCube3Phase1Moves; } });
13
+ Object.defineProperty(exports, "encodeCube3Phase1Coordinates", { enumerable: true, get: function () { return phase1_js_1.encodeCube3Phase1Coordinates; } });
14
+ Object.defineProperty(exports, "isCube3Phase1Solved", { enumerable: true, get: function () { return phase1_js_1.isCube3Phase1Solved; } });
15
+ Object.defineProperty(exports, "solveCube3Phase1", { enumerable: true, get: function () { return phase1_js_1.solveCube3Phase1; } });
16
+ Object.defineProperty(exports, "Cube3Phase1SearchError", { enumerable: true, get: function () { return phase1_js_1.Cube3Phase1SearchError; } });
17
+ var coordinates_js_1 = require("./coordinates.js");
18
+ Object.defineProperty(exports, "CUBE3_COORDINATE_RANGES", { enumerable: true, get: function () { return coordinates_js_1.CUBE3_COORDINATE_RANGES; } });
19
+ Object.defineProperty(exports, "createRepresentativeStateForCoordinate", { enumerable: true, get: function () { return coordinates_js_1.createRepresentativeStateForCoordinate; } });
20
+ Object.defineProperty(exports, "decodeCornerOrientation", { enumerable: true, get: function () { return coordinates_js_1.decodeCornerOrientation; } });
21
+ Object.defineProperty(exports, "decodeEdgeOrientation", { enumerable: true, get: function () { return coordinates_js_1.decodeEdgeOrientation; } });
22
+ Object.defineProperty(exports, "decodePermutation", { enumerable: true, get: function () { return coordinates_js_1.decodePermutation; } });
23
+ Object.defineProperty(exports, "decodeSlicePermutation", { enumerable: true, get: function () { return coordinates_js_1.decodeSlicePermutation; } });
24
+ Object.defineProperty(exports, "decodeUdEdgePermutation", { enumerable: true, get: function () { return coordinates_js_1.decodeUdEdgePermutation; } });
25
+ Object.defineProperty(exports, "decodeUdSlice", { enumerable: true, get: function () { return coordinates_js_1.decodeUdSlice; } });
26
+ Object.defineProperty(exports, "encodeCube3Coordinate", { enumerable: true, get: function () { return coordinates_js_1.encodeCube3Coordinate; } });
27
+ Object.defineProperty(exports, "encodeCornerOrientation", { enumerable: true, get: function () { return coordinates_js_1.encodeCornerOrientation; } });
28
+ Object.defineProperty(exports, "encodeCube3Coordinates", { enumerable: true, get: function () { return coordinates_js_1.encodeCube3Coordinates; } });
29
+ Object.defineProperty(exports, "encodeEdgeOrientation", { enumerable: true, get: function () { return coordinates_js_1.encodeEdgeOrientation; } });
30
+ Object.defineProperty(exports, "encodePermutation", { enumerable: true, get: function () { return coordinates_js_1.encodePermutation; } });
31
+ Object.defineProperty(exports, "encodeSlicePermutation", { enumerable: true, get: function () { return coordinates_js_1.encodeSlicePermutation; } });
32
+ Object.defineProperty(exports, "encodeUdEdgePermutation", { enumerable: true, get: function () { return coordinates_js_1.encodeUdEdgePermutation; } });
33
+ Object.defineProperty(exports, "encodeUdSlice", { enumerable: true, get: function () { return coordinates_js_1.encodeUdSlice; } });
34
+ Object.defineProperty(exports, "moveCoordinate", { enumerable: true, get: function () { return coordinates_js_1.moveCoordinate; } });
35
+ var table_metadata_js_1 = require("./table-metadata.js");
36
+ Object.defineProperty(exports, "CUBE3_SOLVER_TABLE_METADATA", { enumerable: true, get: function () { return table_metadata_js_1.CUBE3_SOLVER_TABLE_METADATA; } });
37
+ var tables_js_1 = require("./tables.js");
38
+ Object.defineProperty(exports, "CUBE3_PHASE1_MOVES", { enumerable: true, get: function () { return tables_js_1.CUBE3_PHASE1_MOVES; } });
39
+ Object.defineProperty(exports, "CUBE3_PHASE2_MOVES", { enumerable: true, get: function () { return tables_js_1.CUBE3_PHASE2_MOVES; } });
40
+ Object.defineProperty(exports, "checksum", { enumerable: true, get: function () { return tables_js_1.checksum; } });
41
+ Object.defineProperty(exports, "generateCube3Phase1Tables", { enumerable: true, get: function () { return tables_js_1.generateCube3Phase1Tables; } });
42
+ Object.defineProperty(exports, "generateCube3Phase2Tables", { enumerable: true, get: function () { return tables_js_1.generateCube3Phase2Tables; } });
43
+ Object.defineProperty(exports, "generateCube3MoveTable", { enumerable: true, get: function () { return tables_js_1.generateCube3MoveTable; } });
44
+ Object.defineProperty(exports, "generateCube3PruningTable", { enumerable: true, get: function () { return tables_js_1.generateCube3PruningTable; } });
45
+ Object.defineProperty(exports, "generateCube3SolverTables", { enumerable: true, get: function () { return tables_js_1.generateCube3SolverTables; } });
46
+ Object.defineProperty(exports, "loadCube3Phase1Tables", { enumerable: true, get: function () { return tables_js_1.loadCube3Phase1Tables; } });
47
+ Object.defineProperty(exports, "loadCube3Phase2Tables", { enumerable: true, get: function () { return tables_js_1.loadCube3Phase2Tables; } });
48
+ Object.defineProperty(exports, "loadCube3SolverTables", { enumerable: true, get: function () { return tables_js_1.loadCube3SolverTables; } });
49
+ Object.defineProperty(exports, "lookupCube3MoveTable", { enumerable: true, get: function () { return tables_js_1.lookupCube3MoveTable; } });
@@ -0,0 +1,126 @@
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.readGeneratedCube3SolverTables = readGeneratedCube3SolverTables;
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 GENERATED_DIRECTORY = "puzzles/cube3/solver/generated";
11
+ function readGeneratedCube3SolverTables() {
12
+ const assetDirectory = resolveGeneratedAssetDirectory();
13
+ const manifest = readManifest(assetDirectory);
14
+ return {
15
+ phase1Moves: manifest.phase1Moves,
16
+ phase2Moves: manifest.phase2Moves,
17
+ moveTables: {
18
+ cornerOrientation: readMoveTable(assetDirectory, manifest.moveTables.cornerOrientation),
19
+ edgeOrientation: readMoveTable(assetDirectory, manifest.moveTables.edgeOrientation),
20
+ udSlice: readMoveTable(assetDirectory, manifest.moveTables.udSlice),
21
+ cornerPermutation: readMoveTable(assetDirectory, manifest.moveTables.cornerPermutation),
22
+ udEdgePermutation: readMoveTable(assetDirectory, manifest.moveTables.udEdgePermutation),
23
+ slicePermutation: readMoveTable(assetDirectory, manifest.moveTables.slicePermutation)
24
+ },
25
+ pruningTables: {
26
+ cornerOrientation: readPruningTable(assetDirectory, manifest.pruningTables.cornerOrientation),
27
+ edgeOrientation: readPruningTable(assetDirectory, manifest.pruningTables.edgeOrientation),
28
+ udSlice: readPruningTable(assetDirectory, manifest.pruningTables.udSlice),
29
+ cornerOrientationEdgeOrientation: readPruningTable(assetDirectory, manifest.pruningTables.cornerOrientationEdgeOrientation),
30
+ cornerPermutation: readPruningTable(assetDirectory, manifest.pruningTables.cornerPermutation),
31
+ udEdgePermutation: readPruningTable(assetDirectory, manifest.pruningTables.udEdgePermutation),
32
+ slicePermutation: readPruningTable(assetDirectory, manifest.pruningTables.slicePermutation),
33
+ cornerPermutationSlicePermutation: readPruningTable(assetDirectory, manifest.pruningTables.cornerPermutationSlicePermutation),
34
+ udEdgePermutationSlicePermutation: readPruningTable(assetDirectory, manifest.pruningTables.udEdgePermutationSlicePermutation)
35
+ }
36
+ };
37
+ }
38
+ function readManifest(assetDirectory) {
39
+ const manifestPath = node_path_1.default.join(assetDirectory, "manifest.json");
40
+ const manifest = JSON.parse((0, node_fs_1.readFileSync)(manifestPath, "utf8"));
41
+ if (manifest.version !== 1) {
42
+ throw new Error(`Unsupported 3x3 solver table manifest version: ${manifest.version}`);
43
+ }
44
+ return manifest;
45
+ }
46
+ function readMoveTable(assetDirectory, entry) {
47
+ const buffer = (0, node_fs_1.readFileSync)(node_path_1.default.join(assetDirectory, entry.file));
48
+ const expectedBytes = entry.range * entry.moves.length * 4;
49
+ if (buffer.length !== expectedBytes) {
50
+ throw new Error(`Invalid byte size for ${entry.coordinate} move table.`);
51
+ }
52
+ const values = new Int32Array(entry.range * entry.moves.length);
53
+ for (let index = 0; index < values.length; index += 1) {
54
+ values[index] = buffer.readInt32LE(index * 4);
55
+ }
56
+ const table = {
57
+ coordinate: entry.coordinate,
58
+ moves: entry.moves,
59
+ range: entry.range,
60
+ solvedCoordinate: entry.solvedCoordinate,
61
+ values,
62
+ checksum: checksum(values)
63
+ };
64
+ assertChecksum(table.coordinate, table.checksum, entry.checksum);
65
+ return table;
66
+ }
67
+ function readPruningTable(assetDirectory, entry) {
68
+ const buffer = (0, node_fs_1.readFileSync)(node_path_1.default.join(assetDirectory, entry.file));
69
+ const expectedBytes = Math.ceil(entry.range / 2);
70
+ if (buffer.length !== expectedBytes) {
71
+ throw new Error(`Invalid byte size for ${entry.coordinate} pruning table.`);
72
+ }
73
+ const values = new Uint8Array(buffer);
74
+ const table = {
75
+ coordinate: entry.coordinate,
76
+ moves: entry.moves,
77
+ range: entry.range,
78
+ values,
79
+ checksum: checksum(values),
80
+ maxDepth: entry.maxDepth ?? 0
81
+ };
82
+ assertChecksum(table.coordinate, table.checksum, entry.checksum);
83
+ return table;
84
+ }
85
+ function resolveGeneratedAssetDirectory() {
86
+ const envDirectory = process.env.CUBINGCENTER_SCRAMBLER_TABLES_DIR;
87
+ if (envDirectory && (0, node_fs_1.existsSync)(node_path_1.default.join(envDirectory, "manifest.json"))) {
88
+ return envDirectory;
89
+ }
90
+ for (const candidate of getAssetDirectoryCandidates()) {
91
+ if ((0, node_fs_1.existsSync)(node_path_1.default.join(candidate, "manifest.json"))) {
92
+ return candidate;
93
+ }
94
+ }
95
+ throw new Error("Unable to find generated 3x3 solver tables. Run pnpm cube3:tables.");
96
+ }
97
+ function getAssetDirectoryCandidates() {
98
+ const cwd = process.cwd();
99
+ const candidates = [
100
+ node_path_1.default.join(cwd, "src", GENERATED_DIRECTORY),
101
+ node_path_1.default.join(cwd, "dist", GENERATED_DIRECTORY),
102
+ node_path_1.default.join(cwd, "dist-cjs", GENERATED_DIRECTORY)
103
+ ];
104
+ try {
105
+ const requireFromCwd = (0, node_module_1.createRequire)(node_path_1.default.join(cwd, "package.json"));
106
+ const packageEntry = requireFromCwd.resolve("@cubingcenter/scrambler");
107
+ candidates.push(node_path_1.default.join(node_path_1.default.dirname(packageEntry), GENERATED_DIRECTORY));
108
+ }
109
+ catch {
110
+ // Source-tree usage is covered by the cwd candidates.
111
+ }
112
+ return candidates;
113
+ }
114
+ function assertChecksum(coordinate, actual, expected) {
115
+ if (actual !== expected) {
116
+ throw new Error(`Checksum mismatch for ${coordinate}: expected ${expected}, received ${actual}.`);
117
+ }
118
+ }
119
+ function checksum(values) {
120
+ let hash = 0x811c9dc5;
121
+ for (let index = 0; index < values.length; index += 1) {
122
+ hash ^= values[index];
123
+ hash = Math.imul(hash, 0x01000193);
124
+ }
125
+ return hash >>> 0;
126
+ }
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Cube3Phase1SearchError = void 0;
4
+ exports.solveCube3Phase1 = solveCube3Phase1;
5
+ exports.encodeCube3Phase1Coordinates = encodeCube3Phase1Coordinates;
6
+ exports.isCube3Phase1Solved = isCube3Phase1Solved;
7
+ exports.applyCube3Phase1Moves = applyCube3Phase1Moves;
8
+ const moves_js_1 = require("../moves.js");
9
+ const coordinates_js_1 = require("./coordinates.js");
10
+ const tables_js_1 = require("./tables.js");
11
+ const search_utils_js_1 = require("./search-utils.js");
12
+ class Cube3Phase1SearchError extends Error {
13
+ visitedNodes;
14
+ constructor(message, visitedNodes) {
15
+ super(message);
16
+ this.name = "Cube3Phase1SearchError";
17
+ this.visitedNodes = visitedNodes;
18
+ }
19
+ }
20
+ exports.Cube3Phase1SearchError = Cube3Phase1SearchError;
21
+ const PHASE1_VALID_MOVES = Array.from({ length: 7 }, (_, prevPlusOne) => Array.from({ length: 7 }, (_, prevPrevPlusOne) => {
22
+ const valid = [];
23
+ const prevFace = prevPlusOne - 1;
24
+ const prevPrevFace = prevPrevPlusOne - 1;
25
+ for (let moveIndex = 0; moveIndex < tables_js_1.CUBE3_PHASE1_MOVES.length; moveIndex += 1) {
26
+ const face = (0, search_utils_js_1.getMoveFaceByIndex)(moveIndex, tables_js_1.CUBE3_PHASE1_MOVES);
27
+ if (!(0, search_utils_js_1.shouldSkipCube3SearchMove)(face, prevFace, prevPrevFace)) {
28
+ valid.push(moveIndex);
29
+ }
30
+ }
31
+ return valid;
32
+ }));
33
+ async function solveCube3Phase1(state, options = {}) {
34
+ const tables = options.tables ?? await (0, tables_js_1.loadCube3Phase1Tables)();
35
+ const maxDepth = options.maxDepth ?? 12;
36
+ const start = encodeCube3Phase1Coordinates(state);
37
+ const deadline = options.timeoutMs === undefined ? undefined : performance.now() + options.timeoutMs;
38
+ const context = {
39
+ tables,
40
+ maxDepth,
41
+ deadline,
42
+ visitedNodes: 0,
43
+ timedOut: false
44
+ };
45
+ if (await isCube3Phase1Solved(start, tables)) {
46
+ return {
47
+ moves: [],
48
+ depth: 0,
49
+ state,
50
+ coordinates: start,
51
+ visitedNodes: 0
52
+ };
53
+ }
54
+ const coeoTable = tables.pruningTables.cornerOrientationEdgeOrientation.values;
55
+ const udPruningTable = tables.pruningTables.udSlice.values;
56
+ const combinedIndex = (start.cornerOrientation << 11) + start.edgeOrientation;
57
+ const coeo = (coeoTable[combinedIndex >> 1] >> ((combinedIndex & 1) << 2)) & 0x0f;
58
+ const udSliceDist = (udPruningTable[start.udSlice >> 1] >> ((start.udSlice & 1) << 2)) & 0x0f;
59
+ const minDepth = coeo > udSliceDist ? coeo : udSliceDist;
60
+ for (let depth = minDepth; depth <= maxDepth; depth += 1) {
61
+ const path = [];
62
+ const solved = searchPhase1(start.cornerOrientation, start.edgeOrientation, start.udSlice, -1, -1, depth, path, context);
63
+ if (solved) {
64
+ const nextState = applyCube3Phase1Moves(state, path);
65
+ const coordinates = encodeCube3Phase1Coordinates(nextState);
66
+ return {
67
+ moves: path,
68
+ depth: path.length,
69
+ state: nextState,
70
+ coordinates,
71
+ visitedNodes: context.visitedNodes
72
+ };
73
+ }
74
+ if (context.timedOut) {
75
+ throw new Cube3Phase1SearchError(`3x3 Phase 1 search timed out after ${options.timeoutMs}ms.`, context.visitedNodes);
76
+ }
77
+ }
78
+ throw new Cube3Phase1SearchError(`3x3 Phase 1 solution not found within depth ${maxDepth}.`, context.visitedNodes);
79
+ }
80
+ function encodeCube3Phase1Coordinates(state) {
81
+ return {
82
+ cornerOrientation: (0, coordinates_js_1.encodeCornerOrientation)(state),
83
+ edgeOrientation: (0, coordinates_js_1.encodeEdgeOrientation)(state),
84
+ udSlice: (0, coordinates_js_1.encodeUdSlice)(state)
85
+ };
86
+ }
87
+ function isCube3Phase1Solved(input, tables) {
88
+ const coordinates = isCube3StateLike(input)
89
+ ? encodeCube3Phase1Coordinates(input)
90
+ : input;
91
+ return coordinates.cornerOrientation === 0 &&
92
+ coordinates.edgeOrientation === 0 &&
93
+ coordinates.udSlice === tables.moveTables.udSlice.solvedCoordinate;
94
+ }
95
+ function applyCube3Phase1Moves(state, moves) {
96
+ return (0, moves_js_1.applyCube3Algorithm)(state, moves);
97
+ }
98
+ const PHASE1_MOVE_FACES = tables_js_1.CUBE3_PHASE1_MOVES.map((move) => {
99
+ const char = move[0];
100
+ return char === "U" ? 0 : char === "D" ? 1 : char === "R" ? 2 : char === "L" ? 3 : char === "F" ? 4 : 5;
101
+ });
102
+ function searchPhase1(cornerOrientation, edgeOrientation, udSlice, previousFace, previousPreviousFace, remainingDepth, path, context) {
103
+ context.visitedNodes += 1;
104
+ if (context.deadline !== undefined && (context.visitedNodes & 1023) === 0 && performance.now() > context.deadline) {
105
+ context.timedOut = true;
106
+ return false;
107
+ }
108
+ if (remainingDepth === 0) {
109
+ return cornerOrientation === 0 &&
110
+ edgeOrientation === 0 &&
111
+ udSlice === context.tables.moveTables.udSlice.solvedCoordinate;
112
+ }
113
+ const moveCount = context.tables.phase1Moves.length;
114
+ const validMoves = PHASE1_VALID_MOVES[previousFace + 1][previousPreviousFace + 1];
115
+ const coTable = context.tables.moveTables.cornerOrientation.values;
116
+ const eoTable = context.tables.moveTables.edgeOrientation.values;
117
+ const udTable = context.tables.moveTables.udSlice.values;
118
+ const coeoTable = context.tables.pruningTables.cornerOrientationEdgeOrientation.values;
119
+ const udPruningTable = context.tables.pruningTables.udSlice.values;
120
+ const coOffset = cornerOrientation * moveCount;
121
+ const eoOffset = edgeOrientation * moveCount;
122
+ const udOffset = udSlice * moveCount;
123
+ for (let i = 0; i < validMoves.length; i += 1) {
124
+ const moveIndex = validMoves[i];
125
+ const nextCornerOrientation = coTable[coOffset + moveIndex];
126
+ const nextEdgeOrientation = eoTable[eoOffset + moveIndex];
127
+ const nextUdSlice = udTable[udOffset + moveIndex];
128
+ const combinedIndex = (nextCornerOrientation << 11) + nextEdgeOrientation;
129
+ const coeo = (coeoTable[combinedIndex >> 1] >> ((combinedIndex & 1) << 2)) & 0x0f;
130
+ const udSliceDist = (udPruningTable[nextUdSlice >> 1] >> ((nextUdSlice & 1) << 2)) & 0x0f;
131
+ const nextLowerBound = coeo > udSliceDist ? coeo : udSliceDist;
132
+ if (nextLowerBound > remainingDepth - 1) {
133
+ continue;
134
+ }
135
+ const face = PHASE1_MOVE_FACES[moveIndex];
136
+ path.push(context.tables.phase1Moves[moveIndex]);
137
+ if (searchPhase1(nextCornerOrientation, nextEdgeOrientation, nextUdSlice, face, previousFace, remainingDepth - 1, path, context)) {
138
+ return true;
139
+ }
140
+ path.pop();
141
+ if (context.timedOut) {
142
+ return false;
143
+ }
144
+ }
145
+ return false;
146
+ }
147
+ function phase1LowerBound(coordinates, tables) {
148
+ const combinedIndex = coordinates.cornerOrientation * tables.moveTables.edgeOrientation.range +
149
+ coordinates.edgeOrientation;
150
+ const coeoTable = tables.pruningTables.cornerOrientationEdgeOrientation.values;
151
+ const udPruningTable = tables.pruningTables.udSlice.values;
152
+ const coeo = (coeoTable[combinedIndex >> 1] >> ((combinedIndex & 1) << 2)) & 0x0f;
153
+ const udSlice = (udPruningTable[coordinates.udSlice >> 1] >> ((coordinates.udSlice & 1) << 2)) & 0x0f;
154
+ return coeo > udSlice ? coeo : udSlice;
155
+ }
156
+ function isCube3StateLike(input) {
157
+ return "corners" in input && "edges" in input;
158
+ }