@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,270 @@
1
+ import { applyCube3Algorithm } from "../moves.js";
2
+ import { isSolvedCube3State } from "../state.js";
3
+ import { encodePermutation, encodeSlicePermutation, encodeUdEdgePermutation } from "./coordinates.js";
4
+ import { isCube3Phase1Solved, solveCube3Phase1 } from "./phase1.js";
5
+ import { loadCube3Phase1Tables, loadCube3Phase2Tables, CUBE3_PHASE1_MOVES, CUBE3_PHASE2_MOVES } from "./tables.js";
6
+ import { getMoveFace, getMoveFaceByIndex, shouldSkipCube3SearchMove } from "./search-utils.js";
7
+ export class Cube3Phase2SearchError extends Error {
8
+ visitedNodes;
9
+ constructor(message, visitedNodes) {
10
+ super(message);
11
+ this.name = "Cube3Phase2SearchError";
12
+ this.visitedNodes = visitedNodes;
13
+ }
14
+ }
15
+ const PHASE2_VALID_MOVES = Array.from({ length: 7 }, (_, prevPlusOne) => Array.from({ length: 7 }, (_, prevPrevPlusOne) => {
16
+ const valid = [];
17
+ const prevFace = prevPlusOne - 1;
18
+ const prevPrevFace = prevPrevPlusOne - 1;
19
+ for (let moveIndex = 0; moveIndex < CUBE3_PHASE2_MOVES.length; moveIndex += 1) {
20
+ const face = getMoveFaceByIndex(moveIndex, CUBE3_PHASE2_MOVES);
21
+ if (!shouldSkipCube3SearchMove(face, prevFace, prevPrevFace)) {
22
+ valid.push(moveIndex);
23
+ }
24
+ }
25
+ return valid;
26
+ }));
27
+ export async function solveCube3Phase2(state, options = {}) {
28
+ if (isSolvedCube3State(state)) {
29
+ const coordinates = encodeCube3Phase2Coordinates(state);
30
+ return {
31
+ moves: [],
32
+ depth: 0,
33
+ state,
34
+ coordinates,
35
+ visitedNodes: 0
36
+ };
37
+ }
38
+ const phase1Tables = await loadCube3Phase1Tables();
39
+ if (!isCube3Phase1Solved(state, phase1Tables)) {
40
+ throw new Cube3Phase2SearchError("3x3 Phase 2 requires a state already in G1.", 0);
41
+ }
42
+ const tables = options.tables ?? await loadCube3Phase2Tables();
43
+ const maxDepth = options.maxDepth ?? 18;
44
+ const start = encodeCube3Phase2Coordinates(state);
45
+ const deadline = options.timeoutMs === undefined ? undefined : performance.now() + options.timeoutMs;
46
+ const context = {
47
+ tables,
48
+ deadline,
49
+ visitedNodes: 0,
50
+ timedOut: false
51
+ };
52
+ const spRange = tables.moveTables.slicePermutation.range;
53
+ const cpspTable = tables.pruningTables.cornerPermutationSlicePermutation.values;
54
+ const epspTable = tables.pruningTables.udEdgePermutationSlicePermutation.values;
55
+ const combinedCPIndex = start.cornerPermutation * spRange + start.slicePermutation;
56
+ const combinedEPIndex = start.udEdgePermutation * spRange + start.slicePermutation;
57
+ const cpDist = (cpspTable[combinedCPIndex >> 1] >> ((combinedCPIndex & 1) << 2)) & 0x0f;
58
+ const epDist = (epspTable[combinedEPIndex >> 1] >> ((combinedEPIndex & 1) << 2)) & 0x0f;
59
+ const minDepth = cpDist > epDist ? cpDist : epDist;
60
+ const initialPreviousFace = options.previousFace ?? -1;
61
+ const initialPreviousPreviousFace = options.previousPreviousFace ?? -1;
62
+ for (let depth = minDepth; depth <= maxDepth; depth += 1) {
63
+ const path = [];
64
+ const solved = searchPhase2(start.cornerPermutation, start.udEdgePermutation, start.slicePermutation, initialPreviousFace, initialPreviousPreviousFace, depth, path, context);
65
+ if (solved) {
66
+ const nextState = applyCube3Phase2Moves(state, path);
67
+ const coordinates = encodeCube3Phase2Coordinates(nextState);
68
+ return {
69
+ moves: path,
70
+ depth: path.length,
71
+ state: nextState,
72
+ coordinates,
73
+ visitedNodes: context.visitedNodes
74
+ };
75
+ }
76
+ if (context.timedOut) {
77
+ throw new Cube3Phase2SearchError(`3x3 Phase 2 search timed out after ${options.timeoutMs}ms.`, context.visitedNodes);
78
+ }
79
+ }
80
+ throw new Cube3Phase2SearchError(`3x3 Phase 2 solution not found within depth ${maxDepth}.`, context.visitedNodes);
81
+ }
82
+ export async function solveCube3State(state, options = {}) {
83
+ const phase1 = await solveCube3Phase1(state, options.phase1);
84
+ let previousFace = -1;
85
+ let previousPreviousFace = -1;
86
+ if (phase1.moves.length > 0) {
87
+ const lastMove = phase1.moves[phase1.moves.length - 1];
88
+ previousFace = getMoveFace(lastMove);
89
+ if (phase1.moves.length > 1) {
90
+ const prevMove = phase1.moves[phase1.moves.length - 2];
91
+ previousPreviousFace = getMoveFace(prevMove);
92
+ }
93
+ }
94
+ const phase2Options = {
95
+ ...options.phase2,
96
+ previousFace,
97
+ previousPreviousFace
98
+ };
99
+ const phase2 = await solveCube3Phase2(phase1.state, phase2Options);
100
+ const moves = [...phase1.moves, ...phase2.moves];
101
+ return {
102
+ phase1,
103
+ phase2,
104
+ moves,
105
+ depth: moves.length,
106
+ state: phase2.state,
107
+ visitedNodes: phase1.visitedNodes + phase2.visitedNodes
108
+ };
109
+ }
110
+ export function encodeCube3Phase2Coordinates(state) {
111
+ return {
112
+ cornerPermutation: encodeCornerPermutationForPhase2(state),
113
+ udEdgePermutation: encodeUdEdgePermutation(state),
114
+ slicePermutation: encodeSlicePermutation(state)
115
+ };
116
+ }
117
+ export function isCube3Phase2Solved(input) {
118
+ const coordinates = isCube3StateLike(input)
119
+ ? encodeCube3Phase2Coordinates(input)
120
+ : input;
121
+ return coordinates.cornerPermutation === 0 &&
122
+ coordinates.udEdgePermutation === 0 &&
123
+ coordinates.slicePermutation === 0;
124
+ }
125
+ export function applyCube3Phase2Moves(state, moves) {
126
+ return applyCube3Algorithm(state, moves);
127
+ }
128
+ const PHASE2_MOVE_FACES = CUBE3_PHASE2_MOVES.map((move) => {
129
+ const char = move[0];
130
+ return char === "U" ? 0 : char === "D" ? 1 : char === "R" ? 2 : char === "L" ? 3 : char === "F" ? 4 : 5;
131
+ });
132
+ function searchPhase2(cornerPermutation, udEdgePermutation, slicePermutation, previousFace, previousPreviousFace, remainingDepth, path, context) {
133
+ context.visitedNodes += 1;
134
+ if (context.deadline !== undefined && (context.visitedNodes & 1023) === 0 && performance.now() > context.deadline) {
135
+ context.timedOut = true;
136
+ return false;
137
+ }
138
+ if (remainingDepth === 0) {
139
+ return cornerPermutation === 0 &&
140
+ udEdgePermutation === 0 &&
141
+ slicePermutation === 0;
142
+ }
143
+ const moveCount = context.tables.phase2Moves.length;
144
+ const validMoves = PHASE2_VALID_MOVES[previousFace + 1][previousPreviousFace + 1];
145
+ const cpTable = context.tables.moveTables.cornerPermutation.values;
146
+ const epTable = context.tables.moveTables.udEdgePermutation.values;
147
+ const spTable = context.tables.moveTables.slicePermutation.values;
148
+ const spRange = context.tables.moveTables.slicePermutation.range;
149
+ const cpspTable = context.tables.pruningTables.cornerPermutationSlicePermutation.values;
150
+ const epspTable = context.tables.pruningTables.udEdgePermutationSlicePermutation.values;
151
+ const cpOffset = cornerPermutation * moveCount;
152
+ const epOffset = udEdgePermutation * moveCount;
153
+ const spOffset = slicePermutation * moveCount;
154
+ for (let i = 0; i < validMoves.length; i += 1) {
155
+ const moveIndex = validMoves[i];
156
+ const nextCornerPermutation = cpTable[cpOffset + moveIndex];
157
+ const nextUdEdgePermutation = epTable[epOffset + moveIndex];
158
+ const nextSlicePermutation = spTable[spOffset + moveIndex];
159
+ const combinedCPIndex = nextCornerPermutation * spRange + nextSlicePermutation;
160
+ const combinedEPIndex = nextUdEdgePermutation * spRange + nextSlicePermutation;
161
+ const cpDist = (cpspTable[combinedCPIndex >> 1] >> ((combinedCPIndex & 1) << 2)) & 0x0f;
162
+ const epDist = (epspTable[combinedEPIndex >> 1] >> ((combinedEPIndex & 1) << 2)) & 0x0f;
163
+ const nextLowerBound = cpDist > epDist ? cpDist : epDist;
164
+ if (nextLowerBound > remainingDepth - 1) {
165
+ continue;
166
+ }
167
+ const face = PHASE2_MOVE_FACES[moveIndex];
168
+ path.push(context.tables.phase2Moves[moveIndex]);
169
+ if (searchPhase2(nextCornerPermutation, nextUdEdgePermutation, nextSlicePermutation, face, previousFace, remainingDepth - 1, path, context)) {
170
+ return true;
171
+ }
172
+ path.pop();
173
+ if (context.timedOut) {
174
+ return false;
175
+ }
176
+ }
177
+ return false;
178
+ }
179
+ function phase2LowerBound(coordinates, tables) {
180
+ const combinedCPIndex = coordinates.cornerPermutation * tables.moveTables.slicePermutation.range +
181
+ coordinates.slicePermutation;
182
+ const combinedEPIndex = coordinates.udEdgePermutation * tables.moveTables.slicePermutation.range +
183
+ coordinates.slicePermutation;
184
+ const cpspTable = tables.pruningTables.cornerPermutationSlicePermutation.values;
185
+ const epspTable = tables.pruningTables.udEdgePermutationSlicePermutation.values;
186
+ const cp = (cpspTable[combinedCPIndex >> 1] >> ((combinedCPIndex & 1) << 2)) & 0x0f;
187
+ const ep = (epspTable[combinedEPIndex >> 1] >> ((combinedEPIndex & 1) << 2)) & 0x0f;
188
+ return cp > ep ? cp : ep;
189
+ }
190
+ function encodeCornerPermutationForPhase2(state) {
191
+ return encodePermutation(state.corners.permutation);
192
+ }
193
+ function isCube3StateLike(input) {
194
+ return "corners" in input && "edges" in input;
195
+ }
196
+ const PHASE1_VALID_MOVES = Array.from({ length: 7 }, (_, prevPlusOne) => Array.from({ length: 7 }, (_, prevPrevPlusOne) => {
197
+ const valid = [];
198
+ const prevFace = prevPlusOne - 1;
199
+ const prevPrevFace = prevPrevPlusOne - 1;
200
+ for (let moveIndex = 0; moveIndex < CUBE3_PHASE1_MOVES.length; moveIndex += 1) {
201
+ const face = getMoveFaceByIndex(moveIndex, CUBE3_PHASE1_MOVES);
202
+ if (!shouldSkipCube3SearchMove(face, prevFace, prevPrevFace)) {
203
+ valid.push(moveIndex);
204
+ }
205
+ }
206
+ return valid;
207
+ }));
208
+ function searchPhase1Interleaved(cornerOrientation, edgeOrientation, udSlice, previousFace, previousPreviousFace, remainingDepth, path, context) {
209
+ context.visitedNodes += 1;
210
+ if (context.deadline !== undefined && (context.visitedNodes & 1023) === 0 && performance.now() > context.deadline) {
211
+ context.timedOut = true;
212
+ return false;
213
+ }
214
+ if (remainingDepth === 0) {
215
+ const g1State = applyCube3Phase2Moves(context.originalState, path);
216
+ const start2 = encodeCube3Phase2Coordinates(g1State);
217
+ const maxPhase2Depth = 6;
218
+ const phase2Context = {
219
+ tables: context.phase2Tables,
220
+ deadline: context.deadline,
221
+ visitedNodes: 0,
222
+ timedOut: false
223
+ };
224
+ for (let d2 = 0; d2 <= maxPhase2Depth; d2 += 1) {
225
+ const path2 = [];
226
+ const solved2 = searchPhase2(start2.cornerPermutation, start2.udEdgePermutation, start2.slicePermutation, -1, -1, d2, path2, phase2Context);
227
+ if (solved2) {
228
+ context.finalPhase1Moves = [...path];
229
+ context.finalPhase2Moves = path2;
230
+ context.visitedNodes += phase2Context.visitedNodes;
231
+ return true;
232
+ }
233
+ }
234
+ context.visitedNodes += phase2Context.visitedNodes;
235
+ return false;
236
+ }
237
+ const moveCount = context.phase1Tables.phase1Moves.length;
238
+ const validMoves = PHASE1_VALID_MOVES[previousFace + 1][previousPreviousFace + 1];
239
+ const coTable = context.phase1Tables.moveTables.cornerOrientation.values;
240
+ const eoTable = context.phase1Tables.moveTables.edgeOrientation.values;
241
+ const udTable = context.phase1Tables.moveTables.udSlice.values;
242
+ const coeoTable = context.phase1Tables.pruningTables.cornerOrientationEdgeOrientation.values;
243
+ const udPruningTable = context.phase1Tables.pruningTables.udSlice.values;
244
+ const coOffset = cornerOrientation * moveCount;
245
+ const eoOffset = edgeOrientation * moveCount;
246
+ const udOffset = udSlice * moveCount;
247
+ for (let i = 0; i < validMoves.length; i += 1) {
248
+ const moveIndex = validMoves[i];
249
+ const nextCornerOrientation = coTable[coOffset + moveIndex];
250
+ const nextEdgeOrientation = eoTable[eoOffset + moveIndex];
251
+ const nextUdSlice = udTable[udOffset + moveIndex];
252
+ const combinedIndex = (nextCornerOrientation << 11) + nextEdgeOrientation;
253
+ const coeo = (coeoTable[combinedIndex >> 1] >> ((combinedIndex & 1) << 2)) & 0x0f;
254
+ const udSliceDist = (udPruningTable[nextUdSlice >> 1] >> ((nextUdSlice & 1) << 2)) & 0x0f;
255
+ const nextLowerBound = coeo > udSliceDist ? coeo : udSliceDist;
256
+ if (nextLowerBound > remainingDepth - 1) {
257
+ continue;
258
+ }
259
+ const face = getMoveFaceByIndex(moveIndex, context.phase1Tables.phase1Moves);
260
+ path.push(context.phase1Tables.phase1Moves[moveIndex]);
261
+ if (searchPhase1Interleaved(nextCornerOrientation, nextEdgeOrientation, nextUdSlice, face, previousFace, remainingDepth - 1, path, context)) {
262
+ return true;
263
+ }
264
+ path.pop();
265
+ if (context.timedOut) {
266
+ return false;
267
+ }
268
+ }
269
+ return false;
270
+ }
@@ -0,0 +1,9 @@
1
+ import type { Cube3Move } from "../types.js";
2
+ export type Cube3SearchFace = number;
3
+ export declare function getMoveFace(move: Cube3Move): Cube3SearchFace;
4
+ export declare function getMoveFaceByIndex(moveIndex: number, moves: readonly Cube3Move[]): Cube3SearchFace;
5
+ export declare const ARE_OPPOSITE_FACES: readonly boolean[];
6
+ export declare function areOppositeFaces(left: Cube3SearchFace, right: Cube3SearchFace): boolean;
7
+ export declare function shouldSkipCube3SearchMove(face: Cube3SearchFace, previousFace: Cube3SearchFace | undefined, previousPreviousFace: Cube3SearchFace | undefined): boolean;
8
+ export declare function lookupMoveTableByIndex(values: Int32Array, coordinate: number, moveIndex: number, moveCount: number): number;
9
+ //# sourceMappingURL=search-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-utils.d.ts","sourceRoot":"","sources":["../../../../src/puzzles/cube3/solver/search-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAYrC,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,eAAe,CAElG;AAED,eAAO,MAAM,kBAAkB,EAAE,SAAS,OAAO,EAOhD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAEvF;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,eAAe,GAAG,SAAS,EACzC,oBAAoB,EAAE,eAAe,GAAG,SAAS,GAChD,OAAO,CAcT;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER"}
@@ -0,0 +1,41 @@
1
+ // Face indices: U=0, D=1, R=2, L=3, F=4, B=5
2
+ const FACE_INDEX_BY_CHAR = {
3
+ U: 0,
4
+ D: 1,
5
+ R: 2,
6
+ L: 3,
7
+ F: 4,
8
+ B: 5
9
+ };
10
+ export function getMoveFace(move) {
11
+ return FACE_INDEX_BY_CHAR[move[0]];
12
+ }
13
+ export function getMoveFaceByIndex(moveIndex, moves) {
14
+ return FACE_INDEX_BY_CHAR[moves[moveIndex][0]];
15
+ }
16
+ export const ARE_OPPOSITE_FACES = [
17
+ false, true, false, false, false, false,
18
+ true, false, false, false, false, false,
19
+ false, false, false, true, false, false,
20
+ false, false, true, false, false, false,
21
+ false, false, false, false, false, true,
22
+ false, false, false, false, true, false
23
+ ];
24
+ export function areOppositeFaces(left, right) {
25
+ return ARE_OPPOSITE_FACES[left * 6 + right];
26
+ }
27
+ export function shouldSkipCube3SearchMove(face, previousFace, previousPreviousFace) {
28
+ if (previousFace === undefined || previousFace === -1) {
29
+ return false;
30
+ }
31
+ if (face === previousFace) {
32
+ return true;
33
+ }
34
+ if (previousPreviousFace === face && areOppositeFaces(face, previousFace)) {
35
+ return true;
36
+ }
37
+ return areOppositeFaces(face, previousFace) && face < previousFace;
38
+ }
39
+ export function lookupMoveTableByIndex(values, coordinate, moveIndex, moveCount) {
40
+ return values[coordinate * moveCount + moveIndex];
41
+ }
@@ -0,0 +1,97 @@
1
+ export declare const CUBE3_SOLVER_TABLE_METADATA: {
2
+ readonly moveTables: {
3
+ readonly cornerOrientation: {
4
+ readonly range: 2187;
5
+ readonly moves: 18;
6
+ readonly solvedCoordinate: 0;
7
+ readonly checksum: 404550471;
8
+ };
9
+ readonly edgeOrientation: {
10
+ readonly range: 2048;
11
+ readonly moves: 18;
12
+ readonly solvedCoordinate: 0;
13
+ readonly checksum: 2992539525;
14
+ };
15
+ readonly udSlice: {
16
+ readonly range: 495;
17
+ readonly moves: 18;
18
+ readonly solvedCoordinate: 494;
19
+ readonly checksum: 4272096359;
20
+ };
21
+ readonly cornerPermutation: {
22
+ readonly range: 40320;
23
+ readonly moves: 10;
24
+ readonly solvedCoordinate: 0;
25
+ readonly checksum: 3774927605;
26
+ };
27
+ readonly udEdgePermutation: {
28
+ readonly range: 40320;
29
+ readonly moves: 10;
30
+ readonly solvedCoordinate: 0;
31
+ readonly checksum: 400302421;
32
+ };
33
+ readonly slicePermutation: {
34
+ readonly range: 24;
35
+ readonly moves: 10;
36
+ readonly solvedCoordinate: 0;
37
+ readonly checksum: 3510358217;
38
+ };
39
+ };
40
+ readonly pruningTables: {
41
+ readonly cornerOrientation: {
42
+ readonly range: 2187;
43
+ readonly moves: 18;
44
+ readonly checksum: 1708398310;
45
+ readonly maxDepth: 6;
46
+ };
47
+ readonly edgeOrientation: {
48
+ readonly range: 2048;
49
+ readonly moves: 18;
50
+ readonly checksum: 1305811170;
51
+ readonly maxDepth: 7;
52
+ };
53
+ readonly udSlice: {
54
+ readonly range: 495;
55
+ readonly moves: 18;
56
+ readonly checksum: 1205412689;
57
+ readonly maxDepth: 5;
58
+ };
59
+ readonly cornerOrientationEdgeOrientation: {
60
+ readonly range: 4478976;
61
+ readonly moves: 18;
62
+ readonly checksum: 3003139252;
63
+ readonly maxDepth: 9;
64
+ };
65
+ readonly cornerPermutation: {
66
+ readonly range: 40320;
67
+ readonly moves: 10;
68
+ readonly checksum: 2124468218;
69
+ readonly maxDepth: 13;
70
+ };
71
+ readonly udEdgePermutation: {
72
+ readonly range: 40320;
73
+ readonly moves: 10;
74
+ readonly checksum: 3536968007;
75
+ readonly maxDepth: 8;
76
+ };
77
+ readonly slicePermutation: {
78
+ readonly range: 24;
79
+ readonly moves: 10;
80
+ readonly checksum: 2803408469;
81
+ readonly maxDepth: 4;
82
+ };
83
+ readonly cornerPermutationSlicePermutation: {
84
+ readonly range: 967680;
85
+ readonly moves: 10;
86
+ readonly checksum: 4187188769;
87
+ readonly maxDepth: 14;
88
+ };
89
+ readonly udEdgePermutationSlicePermutation: {
90
+ readonly range: 967680;
91
+ readonly moves: 10;
92
+ readonly checksum: 2840452350;
93
+ readonly maxDepth: 12;
94
+ };
95
+ };
96
+ };
97
+ //# sourceMappingURL=table-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-metadata.d.ts","sourceRoot":"","sources":["../../../../src/puzzles/cube3/solver/table-metadata.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB9B,CAAC"}
@@ -0,0 +1,21 @@
1
+ export const CUBE3_SOLVER_TABLE_METADATA = {
2
+ moveTables: {
3
+ cornerOrientation: { range: 2187, moves: 18, solvedCoordinate: 0, checksum: 404550471 },
4
+ edgeOrientation: { range: 2048, moves: 18, solvedCoordinate: 0, checksum: 2992539525 },
5
+ udSlice: { range: 495, moves: 18, solvedCoordinate: 494, checksum: 4272096359 },
6
+ cornerPermutation: { range: 40320, moves: 10, solvedCoordinate: 0, checksum: 3774927605 },
7
+ udEdgePermutation: { range: 40320, moves: 10, solvedCoordinate: 0, checksum: 400302421 },
8
+ slicePermutation: { range: 24, moves: 10, solvedCoordinate: 0, checksum: 3510358217 }
9
+ },
10
+ pruningTables: {
11
+ cornerOrientation: { range: 2187, moves: 18, checksum: 1708398310, maxDepth: 6 },
12
+ edgeOrientation: { range: 2048, moves: 18, checksum: 1305811170, maxDepth: 7 },
13
+ udSlice: { range: 495, moves: 18, checksum: 1205412689, maxDepth: 5 },
14
+ cornerOrientationEdgeOrientation: { range: 4478976, moves: 18, checksum: 3003139252, maxDepth: 9 },
15
+ cornerPermutation: { range: 40320, moves: 10, checksum: 2124468218, maxDepth: 13 },
16
+ udEdgePermutation: { range: 40320, moves: 10, checksum: 3536968007, maxDepth: 8 },
17
+ slicePermutation: { range: 24, moves: 10, checksum: 2803408469, maxDepth: 4 },
18
+ cornerPermutationSlicePermutation: { range: 967680, moves: 10, checksum: 4187188769, maxDepth: 14 },
19
+ udEdgePermutationSlicePermutation: { range: 967680, moves: 10, checksum: 2840452350, maxDepth: 12 }
20
+ }
21
+ };
@@ -0,0 +1,72 @@
1
+ import type { Cube3Move } from "../types.js";
2
+ import type { Cube3CoordinateState } from "./coordinates.js";
3
+ export type Cube3CoordinateName = keyof Cube3CoordinateState;
4
+ export type Cube3PruningTableName = Cube3CoordinateName | "cornerOrientationEdgeOrientation" | "cornerPermutationSlicePermutation" | "udEdgePermutationSlicePermutation";
5
+ export interface Cube3MoveTable {
6
+ coordinate: Cube3CoordinateName;
7
+ moves: readonly Cube3Move[];
8
+ range: number;
9
+ solvedCoordinate: number;
10
+ values: Int32Array;
11
+ checksum: number;
12
+ }
13
+ export interface Cube3PruningTable {
14
+ coordinate: Cube3PruningTableName;
15
+ moves: readonly Cube3Move[];
16
+ range: number;
17
+ values: Uint8Array;
18
+ checksum: number;
19
+ maxDepth: number;
20
+ }
21
+ export interface Cube3SolverTables {
22
+ phase1Moves: readonly Cube3Move[];
23
+ phase2Moves: readonly Cube3Move[];
24
+ moveTables: {
25
+ cornerOrientation: Cube3MoveTable;
26
+ edgeOrientation: Cube3MoveTable;
27
+ udSlice: Cube3MoveTable;
28
+ cornerPermutation: Cube3MoveTable;
29
+ udEdgePermutation: Cube3MoveTable;
30
+ slicePermutation: Cube3MoveTable;
31
+ };
32
+ pruningTables: {
33
+ cornerOrientation: Cube3PruningTable;
34
+ edgeOrientation: Cube3PruningTable;
35
+ udSlice: Cube3PruningTable;
36
+ cornerOrientationEdgeOrientation: Cube3PruningTable;
37
+ cornerPermutation: Cube3PruningTable;
38
+ udEdgePermutation: Cube3PruningTable;
39
+ slicePermutation: Cube3PruningTable;
40
+ cornerPermutationSlicePermutation: Cube3PruningTable;
41
+ udEdgePermutationSlicePermutation: Cube3PruningTable;
42
+ };
43
+ }
44
+ export interface Cube3Phase1Tables {
45
+ phase1Moves: readonly Cube3Move[];
46
+ moveTables: Pick<Cube3SolverTables["moveTables"], "cornerOrientation" | "edgeOrientation" | "udSlice">;
47
+ pruningTables: Pick<Cube3SolverTables["pruningTables"], "cornerOrientation" | "edgeOrientation" | "udSlice"> & {
48
+ cornerOrientationEdgeOrientation: Cube3PruningTable;
49
+ };
50
+ }
51
+ export interface Cube3Phase2Tables {
52
+ phase2Moves: readonly Cube3Move[];
53
+ moveTables: Pick<Cube3SolverTables["moveTables"], "cornerPermutation" | "udEdgePermutation" | "slicePermutation">;
54
+ pruningTables: Pick<Cube3SolverTables["pruningTables"], "cornerPermutation" | "udEdgePermutation" | "slicePermutation"> & {
55
+ cornerPermutationSlicePermutation: Cube3PruningTable;
56
+ udEdgePermutationSlicePermutation: Cube3PruningTable;
57
+ };
58
+ }
59
+ export declare const CUBE3_PHASE1_MOVES: readonly ("U" | "D" | "R" | "L" | "F" | "B" | "U2" | "U'" | "D2" | "D'" | "R2" | "R'" | "L2" | "L'" | "F2" | "F'" | "B2" | "B'")[];
60
+ export declare const CUBE3_PHASE2_MOVES: readonly Cube3Move[];
61
+ export declare function loadCube3SolverTables(): Promise<Cube3SolverTables>;
62
+ export declare function loadCube3Phase1Tables(): Promise<Cube3Phase1Tables>;
63
+ export declare function loadCube3Phase2Tables(): Promise<Cube3Phase2Tables>;
64
+ export declare function generateCube3Phase1Tables(): Cube3Phase1Tables;
65
+ export declare function generateCube3SolverTables(): Cube3SolverTables;
66
+ export declare function generateCube3Phase2Tables(): Cube3Phase2Tables;
67
+ export declare function generateCube3MoveTable(coordinate: Cube3CoordinateName, range: number, moves: readonly Cube3Move[]): Cube3MoveTable;
68
+ export declare function generateCube3PruningTable(moveTable: Cube3MoveTable): Cube3PruningTable;
69
+ export declare function generateCube3CombinedPruningTable(tableA: Cube3MoveTable, tableB: Cube3MoveTable): Cube3PruningTable;
70
+ export declare function lookupCube3MoveTable(table: Cube3MoveTable, coordinate: number, move: Cube3Move): number;
71
+ export declare function checksum(values: ArrayLike<number>): number;
72
+ //# sourceMappingURL=tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../../src/puzzles/cube3/solver/tables.ts"],"names":[],"mappings":"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"}