cubing 0.25.13 → 0.26.1

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 (415) hide show
  1. package/dist/esm/.DS_Store +0 -0
  2. package/dist/esm/{2x2x2.kpuzzle.json-BHTFIME6.js → 2x2x2.kpuzzle.json-RJHNQ246.js} +1 -1
  3. package/dist/esm/{2x2x2.kpuzzle.json-BHTFIME6.js.map → 2x2x2.kpuzzle.json-RJHNQ246.js.map} +1 -1
  4. package/dist/esm/{2x2x2.sgs.json-NLV7NA3B.js → 2x2x2.sgs.json-OIAKZDZZ.js} +5 -5
  5. package/dist/esm/{2x2x2.sgs.json-NLV7NA3B.js.map → 2x2x2.sgs.json-OIAKZDZZ.js.map} +1 -1
  6. package/dist/esm/{3d-dynamic-ZXCKVS2R.js → 3d-dynamic-OTQHIOVR.js} +5 -5
  7. package/dist/esm/{3d-dynamic-ZXCKVS2R.js.map → 3d-dynamic-OTQHIOVR.js.map} +1 -1
  8. package/dist/esm/{3x3x3-min2phase-UBW46KDU.js → 3x3x3-min2phase-GFNNX26U.js} +1 -1
  9. package/dist/esm/{3x3x3-min2phase-UBW46KDU.js.map → 3x3x3-min2phase-GFNNX26U.js.map} +1 -1
  10. package/dist/esm/{444-solver-XVU6Q26C.js → 444-solver-2ECPETB3.js} +6 -6
  11. package/dist/esm/{444-solver-XVU6Q26C.js.map → 444-solver-2ECPETB3.js.map} +1 -1
  12. package/dist/esm/alg/index.js +1 -1
  13. package/dist/esm/bluetooth/index.js +6 -8
  14. package/dist/esm/bluetooth/index.js.map +1 -1
  15. package/dist/esm/{chunk-FB7SFELN.js → chunk-3CEMUTUD.js} +2 -2
  16. package/dist/esm/{chunk-FB7SFELN.js.map → chunk-3CEMUTUD.js.map} +1 -1
  17. package/dist/esm/{chunk-NSLR2SC4.js → chunk-5Q4SJSNY.js} +2 -2
  18. package/dist/esm/{chunk-NSLR2SC4.js.map → chunk-5Q4SJSNY.js.map} +1 -1
  19. package/dist/esm/{chunk-ZPAGJE7S.js → chunk-AD6PFNOU.js} +2 -2
  20. package/dist/esm/{chunk-ZPAGJE7S.js.map → chunk-AD6PFNOU.js.map} +1 -1
  21. package/dist/esm/{chunk-GBMX6FHY.js → chunk-ALBEW4DJ.js} +1 -1
  22. package/dist/esm/{chunk-GBMX6FHY.js.map → chunk-ALBEW4DJ.js.map} +1 -1
  23. package/dist/esm/{chunk-KWHGWTPB.js → chunk-CRU5TVHA.js} +4 -4
  24. package/dist/esm/{chunk-KWHGWTPB.js.map → chunk-CRU5TVHA.js.map} +1 -1
  25. package/dist/esm/{chunk-AT7N3AOZ.js → chunk-CYG3DDTX.js} +3 -2
  26. package/dist/esm/chunk-CYG3DDTX.js.map +7 -0
  27. package/dist/esm/{chunk-YAOUFM4D.js → chunk-HUCMGBEC.js} +295 -2
  28. package/dist/esm/chunk-HUCMGBEC.js.map +7 -0
  29. package/dist/esm/{chunk-RPPJMADS.js → chunk-J7OB2GEM.js} +6 -6
  30. package/dist/esm/{chunk-RPPJMADS.js.map → chunk-J7OB2GEM.js.map} +1 -1
  31. package/dist/esm/{chunk-FIUPFE4L.js → chunk-JIBAUV55.js} +7 -7
  32. package/dist/esm/{chunk-FIUPFE4L.js.map → chunk-JIBAUV55.js.map} +1 -1
  33. package/dist/esm/{chunk-ASJ4L4HQ.js → chunk-MC2D6L32.js} +3 -3
  34. package/dist/esm/{chunk-ASJ4L4HQ.js.map → chunk-MC2D6L32.js.map} +1 -1
  35. package/dist/esm/{chunk-RN5JA7BB.js → chunk-PDVAUAMY.js} +2 -2
  36. package/dist/esm/{chunk-RN5JA7BB.js.map → chunk-PDVAUAMY.js.map} +1 -1
  37. package/dist/esm/{chunk-AMOANNTB.js → chunk-PMKVGKT4.js} +4 -4
  38. package/dist/esm/{chunk-AMOANNTB.js.map → chunk-PMKVGKT4.js.map} +1 -1
  39. package/dist/esm/{chunk-DO7GZAW4.js → chunk-QZOJPCN5.js} +1 -1
  40. package/dist/esm/{chunk-DO7GZAW4.js.map → chunk-QZOJPCN5.js.map} +1 -1
  41. package/dist/esm/{chunk-BEXHMXCT.js → chunk-RHC3DIN3.js} +1 -1
  42. package/dist/esm/{chunk-BEXHMXCT.js.map → chunk-RHC3DIN3.js.map} +1 -1
  43. package/dist/esm/{chunk-43SBQEWR.js → chunk-V55YSWJY.js} +3 -3
  44. package/dist/esm/chunk-V55YSWJY.js.map +7 -0
  45. package/dist/esm/{chunk-YRNGJPFS.js → chunk-XQKTAWAA.js} +6 -6
  46. package/dist/esm/{chunk-YRNGJPFS.js.map → chunk-XQKTAWAA.js.map} +1 -1
  47. package/dist/esm/{clock.kpuzzle.json-PYHONPBY.js → clock.kpuzzle.json-3Q7KDODZ.js} +1 -1
  48. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js.map +7 -0
  49. package/dist/esm/{fto-solver-TOOJNOZB.js → fto-solver-5EQEC77M.js} +2 -2
  50. package/dist/esm/{fto-solver-TOOJNOZB.js.map → fto-solver-5EQEC77M.js.map} +1 -1
  51. package/dist/esm/{fto.dynamic-ZIN22CCJ.js → fto.dynamic-ISSUUAOX.js} +6 -6
  52. package/dist/esm/{fto.dynamic-ZIN22CCJ.js.map → fto.dynamic-ISSUUAOX.js.map} +1 -1
  53. package/dist/esm/{kilosolver-A3MNW2DJ.js → kilosolver-RP3POREU.js} +3 -3
  54. package/dist/esm/{kilosolver-A3MNW2DJ.js.map → kilosolver-RP3POREU.js.map} +1 -1
  55. package/dist/esm/kpuzzle/index.js +2 -2
  56. package/dist/esm/{master_tetraminx-solver-QSJNGET5.js → master_tetraminx-solver-RFBUNQMC.js} +2 -2
  57. package/dist/esm/{master_tetraminx-solver-QSJNGET5.js.map → master_tetraminx-solver-RFBUNQMC.js.map} +1 -1
  58. package/dist/esm/{megaminx.sgs.json-4RFNTV3K.js → megaminx.sgs.json-NUXKWG2L.js} +6 -6
  59. package/dist/esm/{megaminx.sgs.json-4RFNTV3K.js.map → megaminx.sgs.json-NUXKWG2L.js.map} +0 -0
  60. package/dist/esm/notation/index.js +2 -2
  61. package/dist/esm/protocol/index.js +2 -3
  62. package/dist/esm/puzzle-geometry/index.js +2 -2
  63. package/dist/esm/puzzles/index.js +3 -3
  64. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js +14 -0
  65. package/dist/esm/{pyraminx.sgs.json-XWDFTFGD.js.map → pyraminx.sgs.json-2BVIFZAF.js.map} +0 -0
  66. package/dist/esm/{redi_cube-FYRLEZZH.js → redi_cube-5B6YHJGL.js} +3 -3
  67. package/dist/esm/{redi_cube-FYRLEZZH.js.map → redi_cube-5B6YHJGL.js.map} +1 -1
  68. package/dist/esm/{redi_cube.kpuzzle.json-43CP47Z6.js → redi_cube.kpuzzle.json-VGO74GBL.js} +1 -1
  69. package/dist/esm/{redi_cube.kpuzzle.json-43CP47Z6.js.map → redi_cube.kpuzzle.json-VGO74GBL.js.map} +1 -1
  70. package/dist/esm/scramble/index.js +8 -8
  71. package/dist/esm/search/index.js +8 -8
  72. package/dist/esm/{search-worker-js-entry-MQ5EKNR4.js → search-worker-js-entry-CZHIWNVF.js} +24 -24
  73. package/dist/esm/{search-worker-js-entry-MQ5EKNR4.js.map → search-worker-js-entry-CZHIWNVF.js.map} +1 -1
  74. package/dist/esm/{search-worker-ts-entry-AEZHCL75.js → search-worker-ts-entry-4WJDKASM.js} +5 -5
  75. package/dist/esm/{search-worker-ts-entry-AEZHCL75.js.map → search-worker-ts-entry-4WJDKASM.js.map} +1 -1
  76. package/dist/esm/skewb.sgs.json-IMR7QJQC.js +16 -0
  77. package/dist/esm/{skewb.sgs.json-ENZWYZTX.js.map → skewb.sgs.json-IMR7QJQC.js.map} +0 -0
  78. package/dist/esm/{sq1-hyperorbit.kpuzzle.json-AMXAFQCM.js → sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js} +1 -1
  79. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js.map +7 -0
  80. package/dist/esm/{sq1-solver-KMN2GSOU.js → sq1-solver-G73T6FTJ.js} +2 -2
  81. package/dist/esm/{sq1-solver-KMN2GSOU.js.map → sq1-solver-G73T6FTJ.js.map} +1 -1
  82. package/dist/esm/stream/index.js +1 -1
  83. package/dist/esm/stream/index.js.map +1 -1
  84. package/dist/esm/twisty/index.js +73 -52
  85. package/dist/esm/twisty/index.js.map +2 -2
  86. package/dist/esm/{worker-inside-generated-string-HCFERKXI.js → worker-inside-generated-string-4FDHMKDI.js} +27 -27
  87. package/dist/esm/worker-inside-generated-string-4FDHMKDI.js.map +7 -0
  88. package/dist/types/Alg-6f3dc52c.d.ts +278 -0
  89. package/dist/types/KPuzzleDefinition-8531b592.d.ts +349 -0
  90. package/dist/types/KState-ba36d9a3.d.ts +70 -0
  91. package/dist/types/PuzzleLoader-a7faf593.d.ts +172 -0
  92. package/dist/types/alg/index.d.ts +49 -13
  93. package/dist/types/bluetooth/index.d.ts +147 -11
  94. package/dist/types/{bluetooth/smart-puzzle/bluetooth-puzzle.d.ts → bluetooth-puzzle-bc1a5264.d.ts} +14 -8
  95. package/dist/types/kpuzzle/index.d.ts +8 -6
  96. package/dist/types/notation/index.d.ts +8 -2
  97. package/dist/types/outside-d6602f71.d.ts +22 -0
  98. package/dist/types/parse-6d363160.d.ts +9 -0
  99. package/dist/types/protocol/index.d.ts +26 -4
  100. package/dist/types/puzzle-geometry/index.d.ts +7 -6
  101. package/dist/types/puzzles/index.d.ts +29 -12
  102. package/dist/types/scramble/index.d.ts +4 -1
  103. package/dist/types/search/index.d.ts +8 -2
  104. package/dist/types/stream/index.d.ts +57 -3
  105. package/dist/types/twisty/index.d.ts +1027 -16
  106. package/package.json +4 -2
  107. package/dist/esm/chunk-43SBQEWR.js.map +0 -7
  108. package/dist/esm/chunk-6BUCXDZU.js +0 -274
  109. package/dist/esm/chunk-6BUCXDZU.js.map +0 -7
  110. package/dist/esm/chunk-AT7N3AOZ.js.map +0 -7
  111. package/dist/esm/chunk-YAOUFM4D.js.map +0 -7
  112. package/dist/esm/clock.kpuzzle.json-PYHONPBY.js.map +0 -7
  113. package/dist/esm/pyraminx.sgs.json-XWDFTFGD.js +0 -14
  114. package/dist/esm/skewb.sgs.json-ENZWYZTX.js +0 -16
  115. package/dist/esm/sq1-hyperorbit.kpuzzle.json-AMXAFQCM.js.map +0 -7
  116. package/dist/esm/worker-inside-generated-string-HCFERKXI.js.map +0 -7
  117. package/dist/types/alg/Alg.d.ts +0 -118
  118. package/dist/types/alg/Alg.spec.d.ts +0 -1
  119. package/dist/types/alg/AlgBuilder.d.ts +0 -11
  120. package/dist/types/alg/Serializable.d.ts +0 -0
  121. package/dist/types/alg/common.d.ts +0 -19
  122. package/dist/types/alg/debug.d.ts +0 -4
  123. package/dist/types/alg/example.d.ts +0 -14
  124. package/dist/types/alg/is.d.ts +0 -4
  125. package/dist/types/alg/iteration.d.ts +0 -9
  126. package/dist/types/alg/keyboard.d.ts +0 -2
  127. package/dist/types/alg/limits.d.ts +0 -4
  128. package/dist/types/alg/operation.d.ts +0 -6
  129. package/dist/types/alg/operation.spec.d.ts +0 -1
  130. package/dist/types/alg/parse.d.ts +0 -12
  131. package/dist/types/alg/parse.spec.d.ts +0 -1
  132. package/dist/types/alg/test/alg-comparison.d.ts +0 -10
  133. package/dist/types/alg/test/alg.spec.d.ts +0 -1
  134. package/dist/types/alg/traversal.d.ts +0 -39
  135. package/dist/types/alg/units/QuantumWithAmount.d.ts +0 -11
  136. package/dist/types/alg/units/Unit.d.ts +0 -9
  137. package/dist/types/alg/units/containers/Commutator.d.ts +0 -14
  138. package/dist/types/alg/units/containers/Conjugate.d.ts +0 -14
  139. package/dist/types/alg/units/containers/Grouping.d.ts +0 -19
  140. package/dist/types/alg/units/index.d.ts +0 -8
  141. package/dist/types/alg/units/leaves/LineComment.d.ts +0 -12
  142. package/dist/types/alg/units/leaves/LineComment.spec.d.ts +0 -1
  143. package/dist/types/alg/units/leaves/Move.d.ts +0 -50
  144. package/dist/types/alg/units/leaves/Move.spec.d.ts +0 -1
  145. package/dist/types/alg/units/leaves/Newline.d.ts +0 -9
  146. package/dist/types/alg/units/leaves/Pause.d.ts +0 -9
  147. package/dist/types/alg/url.d.ts +0 -11
  148. package/dist/types/alg/url.spec.d.ts +0 -1
  149. package/dist/types/alg/validation.d.ts +0 -19
  150. package/dist/types/alg/warnOnce.d.ts +0 -1
  151. package/dist/types/bluetooth/connect/index.d.ts +0 -6
  152. package/dist/types/bluetooth/debug.d.ts +0 -2
  153. package/dist/types/bluetooth/keyboard.d.ts +0 -14
  154. package/dist/types/bluetooth/smart-puzzle/Heykube.d.ts +0 -17
  155. package/dist/types/bluetooth/smart-puzzle/connect.d.ts +0 -3
  156. package/dist/types/bluetooth/smart-puzzle/endianness.d.ts +0 -1
  157. package/dist/types/bluetooth/smart-puzzle/gan.d.ts +0 -34
  158. package/dist/types/bluetooth/smart-puzzle/giiker.d.ts +0 -21
  159. package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts +0 -4
  160. package/dist/types/bluetooth/smart-puzzle/gocube.d.ts +0 -22
  161. package/dist/types/bluetooth/smart-robot/GanRobot.d.ts +0 -35
  162. package/dist/types/bluetooth/smart-robot/index.d.ts +0 -4
  163. package/dist/types/bluetooth/smart-timer/GanTimer.d.ts +0 -19
  164. package/dist/types/bluetooth/smart-timer/index.d.ts +0 -4
  165. package/dist/types/bluetooth/transformer.d.ts +0 -9
  166. package/dist/types/cubing.bundle-global.d.ts +0 -1
  167. package/dist/types/cubing.bundle-global.exports.d.ts +0 -24
  168. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts +0 -2
  169. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts +0 -1
  170. package/dist/types/kpuzzle/3x3x3/puzzle-orientation.d.ts +0 -4
  171. package/dist/types/kpuzzle/KPuzzle.d.ts +0 -30
  172. package/dist/types/kpuzzle/KPuzzleDefinition.d.ts +0 -21
  173. package/dist/types/kpuzzle/KState.d.ts +0 -19
  174. package/dist/types/kpuzzle/KTransformation.d.ts +0 -24
  175. package/dist/types/kpuzzle/calculate.d.ts +0 -16
  176. package/dist/types/kpuzzle/combine.d.ts +0 -3
  177. package/dist/types/kpuzzle/construct.d.ts +0 -5
  178. package/dist/types/notation/CountAnimatedLeaves.d.ts +0 -2
  179. package/dist/types/notation/CountMoves.d.ts +0 -3
  180. package/dist/types/protocol/binary/binary3x3x3.d.ts +0 -19
  181. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts +0 -1
  182. package/dist/types/protocol/binary/hex.d.ts +0 -2
  183. package/dist/types/protocol/binary/hex.spec.d.ts +0 -1
  184. package/dist/types/protocol/binary/orbit-indexing.d.ts +0 -5
  185. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts +0 -1
  186. package/dist/types/protocol/binary/puzzle-orientation.d.ts +0 -4
  187. package/dist/types/puzzle-geometry/FaceNameSwizzler.d.ts +0 -12
  188. package/dist/types/puzzle-geometry/Options.d.ts +0 -45
  189. package/dist/types/puzzle-geometry/PGPuzzles.d.ts +0 -5
  190. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts +0 -4
  191. package/dist/types/puzzle-geometry/Perm.d.ts +0 -18
  192. package/dist/types/puzzle-geometry/PermOriSet.d.ts +0 -71
  193. package/dist/types/puzzle-geometry/PlatonicGenerator.d.ts +0 -10
  194. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +0 -176
  195. package/dist/types/puzzle-geometry/Quat.d.ts +0 -43
  196. package/dist/types/puzzle-geometry/Quat.spec.d.ts +0 -1
  197. package/dist/types/puzzle-geometry/SchreierSims.d.ts +0 -2
  198. package/dist/types/puzzle-geometry/notation-mapping/FTONotationMapper.d.ts +0 -10
  199. package/dist/types/puzzle-geometry/notation-mapping/FaceRenamingMapper.d.ts +0 -12
  200. package/dist/types/puzzle-geometry/notation-mapping/MegaminxScramblingNotationMapper.d.ts +0 -8
  201. package/dist/types/puzzle-geometry/notation-mapping/NotationMapper.d.ts +0 -7
  202. package/dist/types/puzzle-geometry/notation-mapping/NullMapper.d.ts +0 -6
  203. package/dist/types/puzzle-geometry/notation-mapping/NxNxNCubeMapper.d.ts +0 -8
  204. package/dist/types/puzzle-geometry/notation-mapping/PyraminxNotationMapper.d.ts +0 -15
  205. package/dist/types/puzzle-geometry/notation-mapping/SkewbNotationMapper.d.ts +0 -9
  206. package/dist/types/puzzle-geometry/notation-mapping/index.d.ts +0 -8
  207. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts +0 -1
  208. package/dist/types/puzzles/PuzzleLoader.d.ts +0 -18
  209. package/dist/types/puzzles/async/async-pg3d.d.ts +0 -33
  210. package/dist/types/puzzles/async/lazy-cached.d.ts +0 -1
  211. package/dist/types/puzzles/customPGPuzzleLoader.d.ts +0 -11
  212. package/dist/types/puzzles/events.d.ts +0 -8
  213. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json.d.ts +0 -2
  214. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.svg.d.ts +0 -2
  215. package/dist/types/puzzles/implementations/2x2x2/index.d.ts +0 -2
  216. package/dist/types/puzzles/implementations/3x3x3/3x3x3-ll.kpuzzle.svg.d.ts +0 -2
  217. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.svg.d.ts +0 -2
  218. package/dist/types/puzzles/implementations/3x3x3/index.d.ts +0 -2
  219. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json.d.ts +0 -2
  220. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.svg.d.ts +0 -2
  221. package/dist/types/puzzles/implementations/clock/index.d.ts +0 -2
  222. package/dist/types/puzzles/implementations/fto/fto.kpuzzle.svg.d.ts +0 -1
  223. package/dist/types/puzzles/implementations/fto/index.d.ts +0 -12
  224. package/dist/types/puzzles/implementations/kilominx/index.d.ts +0 -2
  225. package/dist/types/puzzles/implementations/kilominx/kilominx.kpuzzle.svg.d.ts +0 -1
  226. package/dist/types/puzzles/implementations/megaminx/index.d.ts +0 -11
  227. package/dist/types/puzzles/implementations/pyraminx/index.d.ts +0 -7
  228. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json.d.ts +0 -2
  229. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.svg.d.ts +0 -2
  230. package/dist/types/puzzles/implementations/redi-cube/index.d.ts +0 -2
  231. package/dist/types/puzzles/implementations/redi-cube/redi_cube.kpuzzle.json.d.ts +0 -2
  232. package/dist/types/puzzles/implementations/redi-cube/redi_cube.kpuzzle.svg.d.ts +0 -1
  233. package/dist/types/puzzles/implementations/square1/index.d.ts +0 -2
  234. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json.d.ts +0 -2
  235. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.svg.d.ts +0 -2
  236. package/dist/types/puzzles/stickerings/appearance.d.ts +0 -50
  237. package/dist/types/puzzles/stickerings/cube-stickerings.d.ts +0 -5
  238. package/dist/types/puzzles/stickerings/fto-stickerings.d.ts +0 -5
  239. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts +0 -2
  240. package/dist/types/puzzles/stickerings/megaminx-stickerings.d.ts +0 -5
  241. package/dist/types/search/inside/api.d.ts +0 -21
  242. package/dist/types/search/inside/api.spec.d.ts +0 -1
  243. package/dist/types/search/inside/inside-worker.d.ts +0 -2
  244. package/dist/types/search/inside/search-worker-js-entry.d.ts +0 -1
  245. package/dist/types/search/inside/search-worker-ts-entry-path-getter.d.ts +0 -1
  246. package/dist/types/search/inside/search-worker-ts-entry.d.ts +0 -1
  247. package/dist/types/search/inside/solve/addOrientationSuffix.d.ts +0 -2
  248. package/dist/types/search/inside/solve/parseSGS.d.ts +0 -18
  249. package/dist/types/search/inside/solve/puzzles/2x2x2.d.ts +0 -6
  250. package/dist/types/search/inside/solve/puzzles/2x2x2.sgs.json.d.ts +0 -3
  251. package/dist/types/search/inside/solve/puzzles/3x3x3/convert.d.ts +0 -2
  252. package/dist/types/search/inside/solve/puzzles/3x3x3/filter.d.ts +0 -4
  253. package/dist/types/search/inside/solve/puzzles/3x3x3/index.d.ts +0 -8
  254. package/dist/types/search/inside/solve/puzzles/3x3x3/legacy-sgs.d.ts +0 -1
  255. package/dist/types/search/inside/solve/puzzles/3x3x3-inefficient.sgs.json.d.ts +0 -3
  256. package/dist/types/search/inside/solve/puzzles/4x4x4.d.ts +0 -4
  257. package/dist/types/search/inside/solve/puzzles/5x5x5.d.ts +0 -2
  258. package/dist/types/search/inside/solve/puzzles/big-cubes.d.ts +0 -2
  259. package/dist/types/search/inside/solve/puzzles/clock.d.ts +0 -1
  260. package/dist/types/search/inside/solve/puzzles/fto.d.ts +0 -5
  261. package/dist/types/search/inside/solve/puzzles/fto.dynamic.d.ts +0 -3
  262. package/dist/types/search/inside/solve/puzzles/kilominx.d.ts +0 -2
  263. package/dist/types/search/inside/solve/puzzles/master_tetraminx.d.ts +0 -2
  264. package/dist/types/search/inside/solve/puzzles/megaminx.d.ts +0 -4
  265. package/dist/types/search/inside/solve/puzzles/megaminx.sgs.json.d.ts +0 -5
  266. package/dist/types/search/inside/solve/puzzles/pyraminx.d.ts +0 -6
  267. package/dist/types/search/inside/solve/puzzles/pyraminx.sgs.json.d.ts +0 -3
  268. package/dist/types/search/inside/solve/puzzles/redi_cube.d.ts +0 -2
  269. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts +0 -1
  270. package/dist/types/search/inside/solve/puzzles/skewb.d.ts +0 -6
  271. package/dist/types/search/inside/solve/puzzles/skewb.sgs.json.d.ts +0 -5
  272. package/dist/types/search/inside/solve/puzzles/sq1.d.ts +0 -2
  273. package/dist/types/search/inside/solve/puzzles/wca-minx.d.ts +0 -1
  274. package/dist/types/search/inside/solve/tremble.d.ts +0 -13
  275. package/dist/types/search/inside/worker-guard.d.ts +0 -3
  276. package/dist/types/search/instantiator.d.ts +0 -4
  277. package/dist/types/search/outside.d.ts +0 -17
  278. package/dist/types/search/worker-inside-generated-string.d.ts +0 -1
  279. package/dist/types/stream/process/ReorientedStream.d.ts +0 -20
  280. package/dist/types/stream/proxy-event.d.ts +0 -13
  281. package/dist/types/stream/twizzle/TwizzleStream.d.ts +0 -18
  282. package/dist/types/stream/twizzle/stream-types.d.ts +0 -32
  283. package/dist/types/stream/websocket-proxy.d.ts +0 -21
  284. package/dist/types/twisty/controllers/AnimationTypes.d.ts +0 -32
  285. package/dist/types/twisty/controllers/RenderScheduler.d.ts +0 -12
  286. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts +0 -36
  287. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts +0 -15
  288. package/dist/types/twisty/controllers/easing.d.ts +0 -1
  289. package/dist/types/twisty/controllers/indexer/AlgDuration.d.ts +0 -17
  290. package/dist/types/twisty/controllers/indexer/AlgIndexer.d.ts +0 -36
  291. package/dist/types/twisty/controllers/indexer/SimpleAlgIndexer.d.ts +0 -19
  292. package/dist/types/twisty/controllers/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts +0 -22
  293. package/dist/types/twisty/controllers/indexer/simultaneous-moves/simul-moves.d.ts +0 -25
  294. package/dist/types/twisty/controllers/indexer/tree/AlgWalker.d.ts +0 -63
  295. package/dist/types/twisty/controllers/indexer/tree/TreeAlgIndexer.d.ts +0 -20
  296. package/dist/types/twisty/controllers/indexer/tree/chunkAlgs.d.ts +0 -2
  297. package/dist/types/twisty/controllers/stream/timeline-move-calculation-draft.d.ts +0 -15
  298. package/dist/types/twisty/heavy-code-imports/3d.d.ts +0 -2
  299. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d-dynamic.d.ts +0 -10
  300. package/dist/types/twisty/model/PromiseFreshener.d.ts +0 -13
  301. package/dist/types/twisty/model/TwistyPlayerModel.d.ts +0 -85
  302. package/dist/types/twisty/model/TwistySceneModel.d.ts +0 -27
  303. package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts +0 -10
  304. package/dist/types/twisty/model/helpers.d.ts +0 -4
  305. package/dist/types/twisty/model/props/TwistyProp.d.ts +0 -59
  306. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts +0 -4
  307. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts +0 -26
  308. package/dist/types/twisty/model/props/general/ArbitraryStringProp.d.ts +0 -4
  309. package/dist/types/twisty/model/props/general/URLProp.d.ts +0 -5
  310. package/dist/types/twisty/model/props/puzzle/display/FoundationDisplayProp.d.ts +0 -5
  311. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts +0 -10
  312. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts +0 -9
  313. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts +0 -50
  314. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts +0 -26
  315. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts +0 -11
  316. package/dist/types/twisty/model/props/puzzle/state/AnchorTransformationProp.d.ts +0 -14
  317. package/dist/types/twisty/model/props/puzzle/state/CatchUpMoveProp.d.ts +0 -10
  318. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts +0 -16
  319. package/dist/types/twisty/model/props/puzzle/state/CurrentMoveInfoProp.d.ts +0 -13
  320. package/dist/types/twisty/model/props/puzzle/state/CurrentStateProp.d.ts +0 -14
  321. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts +0 -19
  322. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts +0 -11
  323. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts +0 -14
  324. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts +0 -11
  325. package/dist/types/twisty/model/props/puzzle/state/MovePressInputProp.d.ts +0 -10
  326. package/dist/types/twisty/model/props/puzzle/state/NaiveMoveCountProp.d.ts +0 -9
  327. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts +0 -13
  328. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts +0 -9
  329. package/dist/types/twisty/model/props/puzzle/state/SetupTransformationProp.d.ts +0 -5
  330. package/dist/types/twisty/model/props/puzzle/structure/KPuzzleProp.d.ts +0 -10
  331. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts +0 -5
  332. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts +0 -10
  333. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +0 -25
  334. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts +0 -12
  335. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts +0 -24
  336. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts +0 -21
  337. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts +0 -14
  338. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts +0 -5
  339. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts +0 -15
  340. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts +0 -11
  341. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts +0 -10
  342. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts +0 -21
  343. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts +0 -10
  344. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts +0 -5
  345. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts +0 -28
  346. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts +0 -14
  347. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts +0 -10
  348. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts +0 -11
  349. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts +0 -12
  350. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts +0 -12
  351. package/dist/types/twisty/views/2D/KPuzzleSVGWrapper.d.ts +0 -17
  352. package/dist/types/twisty/views/2D/Twisty2DPuzzle.css.d.ts +0 -2
  353. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts +0 -27
  354. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts +0 -15
  355. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts +0 -19
  356. package/dist/types/twisty/views/3D/DragTracker.d.ts +0 -27
  357. package/dist/types/twisty/views/3D/RendererPool.d.ts +0 -3
  358. package/dist/types/twisty/views/3D/TAU.d.ts +0 -2
  359. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts +0 -21
  360. package/dist/types/twisty/views/3D/Twisty3DRenderTarget.d.ts +0 -3
  361. package/dist/types/twisty/views/3D/Twisty3DScene.d.ts +0 -14
  362. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts +0 -33
  363. package/dist/types/twisty/views/3D/Twisty3DVantage.css.d.ts +0 -2
  364. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +0 -36
  365. package/dist/types/twisty/views/3D/TwistyOrbitControls.d.ts +0 -23
  366. package/dist/types/twisty/views/3D/TwistyOrbitControls.spec.d.ts +0 -4
  367. package/dist/types/twisty/views/3D/puzzles/Cube3D.d.ts +0 -58
  368. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts +0 -64
  369. package/dist/types/twisty/views/3D/puzzles/Twisty3DPuzzle.d.ts +0 -5
  370. package/dist/types/twisty/views/ClassListManager.d.ts +0 -10
  371. package/dist/types/twisty/views/ManagedCustomElement.d.ts +0 -19
  372. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts +0 -17
  373. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts +0 -2
  374. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts +0 -40
  375. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts +0 -4
  376. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts +0 -60
  377. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts +0 -2
  378. package/dist/types/twisty/views/TwistyAlgViewer.d.ts +0 -51
  379. package/dist/types/twisty/views/TwistyPlayer.css.d.ts +0 -2
  380. package/dist/types/twisty/views/TwistyPlayer.d.ts +0 -112
  381. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts +0 -79
  382. package/dist/types/twisty/views/TwistyViewerWrapper.css.d.ts +0 -2
  383. package/dist/types/twisty/views/canvas.d.ts +0 -2
  384. package/dist/types/twisty/views/control-panel/TwistyButtons.css.d.ts +0 -3
  385. package/dist/types/twisty/views/control-panel/TwistyButtons.d.ts +0 -32
  386. package/dist/types/twisty/views/control-panel/TwistyScrubber.css.d.ts +0 -2
  387. package/dist/types/twisty/views/control-panel/TwistyScrubber.d.ts +0 -13
  388. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts +0 -14
  389. package/dist/types/twisty/views/document.d.ts +0 -1
  390. package/dist/types/twisty/views/node-custom-element-shims.d.ts +0 -4
  391. package/dist/types/twisty/views/screenshot.d.ts +0 -11
  392. package/dist/types/twisty/views/stream/TwistyStreamSource.css.d.ts +0 -2
  393. package/dist/types/twisty/views/stream/TwistyStreamSource.d.ts +0 -12
  394. package/dist/types/twisty/views/twizzle/TwizzleLink.css.d.ts +0 -2
  395. package/dist/types/twisty/views/twizzle/TwizzleLink.d.ts +0 -11
  396. package/dist/types/twisty/views/twizzle/url-params.d.ts +0 -18
  397. package/dist/types/vendor/comlink-everywhere/inside/index.d.ts +0 -4
  398. package/dist/types/vendor/comlink-everywhere/node-adapter.d.ts +0 -6
  399. package/dist/types/vendor/comlink-everywhere/outside/index.d.ts +0 -5
  400. package/dist/types/vendor/cstimer/src/js/lib/mathlib.d.ts +0 -4
  401. package/dist/types/vendor/cstimer/src/js/scramble/444-solver.d.ts +0 -3
  402. package/dist/types/vendor/min2phase/3x3x3-min2phase.d.ts +0 -2
  403. package/dist/types/vendor/p-lazy/p-lazy.d.ts +0 -9
  404. package/dist/types/vendor/random-uint-below/get-random-values.d.ts +0 -2
  405. package/dist/types/vendor/random-uint-below/index.d.ts +0 -3
  406. package/dist/types/vendor/random-uint-below/random-choice.d.ts +0 -1
  407. package/dist/types/vendor/random-uint-below/random53BitValue.d.ts +0 -1
  408. package/dist/types/vendor/sq12phase/sq1-solver.d.ts +0 -1
  409. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts +0 -32
  410. package/dist/types/vendor/unsafe-raw-aes/unsafe-raw-aes.d.ts +0 -3
  411. package/dist/types/vendor/xyzzy/fto-solver-original.d.ts +0 -148
  412. package/dist/types/vendor/xyzzy/fto-solver.d.ts +0 -1
  413. package/dist/types/vendor/xyzzy/kilosolver.d.ts +0 -2
  414. package/dist/types/vendor/xyzzy/master_tetraminx-solver.d.ts +0 -1
  415. package/dist/types/vendor/xyzzy/redi_cube.d.ts +0 -2
@@ -2,7 +2,7 @@ import {
2
2
  Alg,
3
3
  Move,
4
4
  TraversalDownUp
5
- } from "./chunk-DO7GZAW4.js";
5
+ } from "./chunk-QZOJPCN5.js";
6
6
  import {
7
7
  __privateAdd,
8
8
  __privateGet,
@@ -138,6 +138,24 @@ function moveToTransformationUncached(kpuzzle, move) {
138
138
  throw new Error(`Invalid move for KPuzzle (${kpuzzle.name()}): ${move}`);
139
139
  }
140
140
 
141
+ // src/cubing/kpuzzle/3x3x3/puzzle-orientation.ts
142
+ function experimentalIs3x3x3Solved(state, options) {
143
+ if (options.ignorePuzzleOrientation) {
144
+ state = normalizePuzzleOrientation(state);
145
+ }
146
+ if (options.ignoreCenterOrientation) {
147
+ state = new KState(state.kpuzzle, {
148
+ EDGES: state.stateData.EDGES,
149
+ CORNERS: state.stateData.CORNERS,
150
+ CENTERS: {
151
+ pieces: state.stateData.CENTERS.pieces,
152
+ orientation: new Array(6).fill(0)
153
+ }
154
+ });
155
+ }
156
+ return !!state.experimentalToTransformation()?.isIdentityTransformation();
157
+ }
158
+
141
159
  // src/cubing/kpuzzle/KState.ts
142
160
  var KState = class {
143
161
  constructor(kpuzzle, stateData) {
@@ -184,6 +202,12 @@ var KState = class {
184
202
  }
185
203
  return new KTransformation(this.kpuzzle, transformationData);
186
204
  }
205
+ experimentalIs3x3x3Solved(options) {
206
+ if (this.kpuzzle.name() !== "3x3x3") {
207
+ throw new Error("`KState.experimentalIs3x3x3Solved()` only supports 3x3x3 states.");
208
+ }
209
+ return experimentalIs3x3x3Solved(this, options);
210
+ }
187
211
  };
188
212
 
189
213
  // src/cubing/kpuzzle/KTransformation.ts
@@ -837,10 +861,279 @@ cube3x3x3KPuzzleDefinition.moves["Bv"] = {
837
861
  // src/cubing/kpuzzle/index.ts
838
862
  var experimental3x3x3KPuzzle = new KPuzzle(cube3x3x3KPuzzleDefinition);
839
863
 
864
+ // src/cubing/protocol/binary/orbit-indexing.ts
865
+ function identityPermutation(numElems) {
866
+ const arr = new Array(numElems);
867
+ for (let i = 0; i < numElems; i++) {
868
+ arr[i] = i;
869
+ }
870
+ return arr;
871
+ }
872
+ function orientationsToMask(radix, orientations) {
873
+ let val = 0;
874
+ for (const orientation of orientations) {
875
+ val *= radix;
876
+ val += orientation;
877
+ }
878
+ return val;
879
+ }
880
+ function maskToOrientations(radix, numElems, mask) {
881
+ const arr = [];
882
+ while (mask > 0) {
883
+ arr.push(mask % radix);
884
+ mask = Math.floor(mask / radix);
885
+ }
886
+ return new Array(numElems - arr.length).fill(0).concat(arr.reverse());
887
+ }
888
+ function permutationToLex(permutation) {
889
+ const n = permutation.length;
890
+ let lexicographicIdx = 0;
891
+ for (let i = 0; i < n - 1; i++) {
892
+ lexicographicIdx = lexicographicIdx * (n - i);
893
+ for (let j = i + 1; j < n; j++) {
894
+ if (permutation[i] > permutation[j]) {
895
+ lexicographicIdx += 1;
896
+ }
897
+ }
898
+ }
899
+ return lexicographicIdx;
900
+ }
901
+ function lexToPermutation(numPieces, lexicographicIdx) {
902
+ const permutation = new Array(numPieces);
903
+ permutation[numPieces - 1] = 0;
904
+ for (let i = numPieces - 2; i >= 0; i--) {
905
+ permutation[i] = lexicographicIdx % (numPieces - i);
906
+ lexicographicIdx = Math.floor(lexicographicIdx / (numPieces - i));
907
+ for (let j = i + 1; j < numPieces; j++) {
908
+ if (permutation[j] >= permutation[i]) {
909
+ permutation[j] = permutation[j] + 1;
910
+ }
911
+ }
912
+ }
913
+ return permutation;
914
+ }
915
+
916
+ // src/cubing/protocol/binary/puzzle-orientation.ts
917
+ function puzzleOrientationIdx(state) {
918
+ const idxU = state.stateData["CENTERS"].pieces[0];
919
+ const idxD = state.stateData["CENTERS"].pieces[5];
920
+ const unadjustedIdxL = state.stateData["CENTERS"].pieces[1];
921
+ let idxL = unadjustedIdxL;
922
+ if (idxU < unadjustedIdxL) {
923
+ idxL--;
924
+ }
925
+ if (idxD < unadjustedIdxL) {
926
+ idxL--;
927
+ }
928
+ return [idxU, idxL];
929
+ }
930
+ var puzzleOrientationCacheRaw = new Array(6).fill(0).map(() => {
931
+ return new Array(6);
932
+ });
933
+ var puzzleOrientationCacheInitialized = false;
934
+ function puzzleOrientationCache() {
935
+ if (!puzzleOrientationCacheInitialized) {
936
+ {
937
+ const uAlgs = ["", "z", "x", "z'", "x'", "x2"].map((s) => Alg.fromString(s));
938
+ const yAlg = new Alg("y");
939
+ for (const uAlg of uAlgs) {
940
+ let transformation = experimental3x3x3KPuzzle.algToTransformation(uAlg);
941
+ for (let i = 0; i < 4; i++) {
942
+ transformation = transformation.applyAlg(yAlg);
943
+ const [idxU, idxL] = puzzleOrientationIdx(transformation.toKState());
944
+ puzzleOrientationCacheRaw[idxU][idxL] = transformation.invert();
945
+ }
946
+ }
947
+ }
948
+ }
949
+ return puzzleOrientationCacheRaw;
950
+ }
951
+ function normalizePuzzleOrientation(state) {
952
+ const [idxU, idxL] = puzzleOrientationIdx(state);
953
+ const orientationTransformation = puzzleOrientationCache()[idxU][idxL];
954
+ return state.applyTransformation(orientationTransformation);
955
+ }
956
+ function reorientPuzzle(state, idxU, idxL) {
957
+ return state.applyTransformation(puzzleOrientationCache()[idxU][idxL].invert());
958
+ }
959
+
960
+ // src/cubing/protocol/binary/binary3x3x3.ts
961
+ var BIT_LENGTHS = [29, 12, 16, 13, 3, 2, 1, 12];
962
+ function arraySum(arr) {
963
+ let total = 0;
964
+ for (const entry of arr) {
965
+ total += entry;
966
+ }
967
+ return total;
968
+ }
969
+ function splitBinary(bitLengths, buffy) {
970
+ const u8buffy = new Uint8Array(buffy);
971
+ let at = 0;
972
+ let bits = 0;
973
+ let accum = 0;
974
+ const values = [];
975
+ for (const bitLength of bitLengths) {
976
+ while (bits < bitLength) {
977
+ accum = accum << 8 | u8buffy[at++];
978
+ bits += 8;
979
+ }
980
+ values.push(accum >> bits - bitLength & (1 << bitLength) - 1);
981
+ bits -= bitLength;
982
+ }
983
+ return values;
984
+ }
985
+ function concatBinary(bitLengths, values) {
986
+ const buffy = new Uint8Array(Math.ceil(arraySum(bitLengths) / 8));
987
+ let at = 0;
988
+ let bits = 0;
989
+ let accum = 0;
990
+ for (let i = 0; i < bitLengths.length; i++) {
991
+ accum = accum << bitLengths[i] | values[i];
992
+ bits += bitLengths[i];
993
+ while (bits >= 8) {
994
+ buffy[at++] = accum >> bits - 8;
995
+ bits -= 8;
996
+ }
997
+ }
998
+ if (bits > 0) {
999
+ buffy[at++] = accum << 8 - bits;
1000
+ }
1001
+ return buffy;
1002
+ }
1003
+ function supportsPuzzleOrientation(components) {
1004
+ return components.poIdxU !== 7;
1005
+ }
1006
+ function reid3x3x3ToBinaryComponents(state) {
1007
+ const normedState = normalizePuzzleOrientation(state);
1008
+ const epLex = permutationToLex(normedState.stateData["EDGES"].pieces);
1009
+ const eoMask = orientationsToMask(2, normedState.stateData["EDGES"].orientation);
1010
+ const cpLex = permutationToLex(normedState.stateData["CORNERS"].pieces);
1011
+ const coMask = orientationsToMask(3, normedState.stateData["CORNERS"].orientation);
1012
+ const [poIdxU, poIdxL] = puzzleOrientationIdx(state);
1013
+ const moSupport = 1;
1014
+ const moMask = orientationsToMask(4, normedState.stateData["CENTERS"].orientation);
1015
+ return {
1016
+ epLex,
1017
+ eoMask,
1018
+ cpLex,
1019
+ coMask,
1020
+ poIdxU,
1021
+ poIdxL,
1022
+ moSupport,
1023
+ moMask
1024
+ };
1025
+ }
1026
+ function binaryComponentsToTwizzleBinary(components) {
1027
+ const { epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask } = components;
1028
+ return concatBinary(BIT_LENGTHS, [
1029
+ epLex,
1030
+ eoMask,
1031
+ cpLex,
1032
+ coMask,
1033
+ poIdxU,
1034
+ poIdxL,
1035
+ moSupport,
1036
+ moMask
1037
+ ]);
1038
+ }
1039
+ function reid3x3x3ToTwizzleBinary(state) {
1040
+ const components = reid3x3x3ToBinaryComponents(state);
1041
+ return binaryComponentsToTwizzleBinary(components);
1042
+ }
1043
+ function twizzleBinaryToBinaryComponents(buffer) {
1044
+ const [epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask] = splitBinary(BIT_LENGTHS, buffer);
1045
+ return {
1046
+ epLex,
1047
+ eoMask,
1048
+ cpLex,
1049
+ coMask,
1050
+ poIdxU,
1051
+ poIdxL,
1052
+ moSupport,
1053
+ moMask
1054
+ };
1055
+ }
1056
+ function binaryComponentsToReid3x3x3(components) {
1057
+ if (components.moSupport !== 1) {
1058
+ throw new Error("Must support center orientation.");
1059
+ }
1060
+ const normedState = new KState(experimental3x3x3KPuzzle, {
1061
+ EDGES: {
1062
+ pieces: lexToPermutation(12, components.epLex),
1063
+ orientation: maskToOrientations(2, 12, components.eoMask)
1064
+ },
1065
+ CORNERS: {
1066
+ pieces: lexToPermutation(8, components.cpLex),
1067
+ orientation: maskToOrientations(3, 8, components.coMask)
1068
+ },
1069
+ CENTERS: {
1070
+ pieces: identityPermutation(6),
1071
+ orientation: maskToOrientations(4, 6, components.moMask)
1072
+ }
1073
+ });
1074
+ if (!supportsPuzzleOrientation(components)) {
1075
+ return normedState;
1076
+ }
1077
+ return reorientPuzzle(normedState, components.poIdxU, components.poIdxL);
1078
+ }
1079
+ function validateComponents(components) {
1080
+ const errors = [];
1081
+ if (components.epLex < 0 || components.epLex >= 479001600) {
1082
+ errors.push(`epLex (${components.epLex}) out of range`);
1083
+ }
1084
+ if (components.cpLex < 0 || components.cpLex >= 40320) {
1085
+ errors.push(`cpLex (${components.cpLex}) out of range`);
1086
+ }
1087
+ if (components.coMask < 0 || components.coMask >= 6561) {
1088
+ errors.push(`coMask (${components.coMask}) out of range`);
1089
+ }
1090
+ if (components.poIdxU < 0 || components.poIdxU >= 6) {
1091
+ if (supportsPuzzleOrientation(components)) {
1092
+ errors.push(`poIdxU (${components.poIdxU}) out of range`);
1093
+ }
1094
+ }
1095
+ if (components.eoMask < 0 || components.eoMask >= 4096) {
1096
+ errors.push(`eoMask (${components.eoMask}) out of range`);
1097
+ }
1098
+ if (components.moMask < 0 || components.moMask >= 4096) {
1099
+ errors.push(`moMask (${components.moMask}) out of range`);
1100
+ }
1101
+ if (components.poIdxL < 0 || components.poIdxL >= 4) {
1102
+ errors.push(`poIdxL (${components.poIdxL}) out of range`);
1103
+ }
1104
+ if (components.moSupport < 0 || components.moSupport >= 2) {
1105
+ errors.push(`moSupport (${components.moSupport}) out of range`);
1106
+ }
1107
+ return errors;
1108
+ }
1109
+ function twizzleBinaryToReid3x3x3(buffy) {
1110
+ const components = twizzleBinaryToBinaryComponents(buffy);
1111
+ const errors = validateComponents(components);
1112
+ if (errors.length !== 0) {
1113
+ throw new Error(`Invalid binary state components: ${errors.join(", ")}`);
1114
+ }
1115
+ return binaryComponentsToReid3x3x3(components);
1116
+ }
1117
+
1118
+ // src/cubing/protocol/binary/hex.ts
1119
+ function bufferToSpacedHex(buffer) {
1120
+ return Array.prototype.map.call(new Uint8Array(buffer), (x) => ("00" + x.toString(16)).slice(-2)).join(" ");
1121
+ }
1122
+ function spacedHexToBuffer(hex) {
1123
+ return new Uint8Array(hex.split(" ").map((c) => parseInt(c, 16)));
1124
+ }
1125
+
840
1126
  export {
1127
+ normalizePuzzleOrientation,
1128
+ reid3x3x3ToTwizzleBinary,
1129
+ twizzleBinaryToBinaryComponents,
1130
+ binaryComponentsToReid3x3x3,
1131
+ twizzleBinaryToReid3x3x3,
1132
+ bufferToSpacedHex,
1133
+ spacedHexToBuffer,
841
1134
  KState,
842
1135
  KTransformation,
843
1136
  KPuzzle,
844
1137
  experimental3x3x3KPuzzle
845
1138
  };
846
- //# sourceMappingURL=chunk-YAOUFM4D.js.map
1139
+ //# sourceMappingURL=chunk-HUCMGBEC.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/kpuzzle/combine.ts", "../../src/cubing/kpuzzle/construct.ts", "../../src/cubing/kpuzzle/3x3x3/puzzle-orientation.ts", "../../src/cubing/kpuzzle/KState.ts", "../../src/cubing/kpuzzle/KTransformation.ts", "../../src/cubing/kpuzzle/calculate.ts", "../../src/cubing/kpuzzle/KPuzzle.ts", "../../src/cubing/kpuzzle/3x3x3/3x3x3.kpuzzle.json.ts", "../../src/cubing/kpuzzle/index.ts", "../../src/cubing/protocol/binary/orbit-indexing.ts", "../../src/cubing/protocol/binary/puzzle-orientation.ts", "../../src/cubing/protocol/binary/binary3x3x3.ts", "../../src/cubing/protocol/binary/hex.ts"],
4
+ "sourcesContent": ["import { isOrbitTransformationDataIdentityUncached } from \"./calculate\";\nimport type {\n KPuzzleDefinition,\n KStateData,\n KTransformationData,\n} from \"./KPuzzleDefinition\";\n\nexport function combineTransformationData(\n definition: KPuzzleDefinition,\n transformationData1: KTransformationData,\n transformationData2: KTransformationData,\n): KTransformationData {\n const newTransformationData = {} as KTransformationData;\n for (const orbitName in definition.orbits) {\n const orbitDefinition = definition.orbits[orbitName];\n const orbit1 = transformationData1[orbitName];\n const orbit2 = transformationData2[orbitName];\n if (\n isOrbitTransformationDataIdentityUncached(\n orbitDefinition.numOrientations,\n orbit2,\n )\n ) {\n // common case for big cubes\n newTransformationData[orbitName] = orbit1;\n } else if (\n isOrbitTransformationDataIdentityUncached(\n orbitDefinition.numOrientations,\n orbit1,\n )\n ) {\n newTransformationData[orbitName] = orbit2;\n } else {\n const newPerm = new Array(orbitDefinition.numPieces);\n if (orbitDefinition.numOrientations === 1) {\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n newPerm[idx] = orbit1.permutation[orbit2.permutation[idx]];\n }\n newTransformationData[orbitName] = {\n permutation: newPerm,\n orientation: orbit1.orientation,\n };\n } else {\n const newOri = new Array(orbitDefinition.numPieces);\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n newOri[idx] =\n (orbit1.orientation[orbit2.permutation[idx]] +\n orbit2.orientation[idx]) %\n orbitDefinition.numOrientations;\n newPerm[idx] = orbit1.permutation[orbit2.permutation[idx]];\n }\n newTransformationData[orbitName] = {\n permutation: newPerm,\n orientation: newOri,\n };\n }\n }\n }\n return newTransformationData;\n}\n\nexport function applyTransformationDataToStateData(\n definition: KPuzzleDefinition,\n stateData: KStateData,\n transformationData: KTransformationData,\n): KStateData {\n const newStateData = {} as KStateData;\n for (const orbitName in definition.orbits) {\n const orbitDefinition = definition.orbits[orbitName];\n const orbit1 = stateData[orbitName];\n const orbit2 = transformationData[orbitName];\n if (\n isOrbitTransformationDataIdentityUncached(\n orbitDefinition.numOrientations,\n orbit2,\n )\n ) {\n // common case for big cubes\n newStateData[orbitName] = orbit1;\n } else {\n const newPieces = new Array(orbitDefinition.numPieces);\n if (orbitDefinition.numOrientations === 1) {\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n newPieces[idx] = orbit1.pieces[orbit2.permutation[idx]];\n }\n newStateData[orbitName] = {\n pieces: newPieces,\n orientation: orbit1.orientation,\n };\n } else {\n const newOri = new Array(orbitDefinition.numPieces);\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n newOri[idx] =\n (orbit1.orientation[orbit2.permutation[idx]] +\n orbit2.orientation[idx]) %\n orbitDefinition.numOrientations;\n newPieces[idx] = orbit1.pieces[orbit2.permutation[idx]];\n }\n newStateData[orbitName] = {\n pieces: newPieces,\n orientation: newOri,\n };\n }\n }\n }\n return newStateData;\n}\n", "import type { Move } from \"../alg\";\nimport { repeatTransformationUncached } from \"./calculate\";\nimport type { KPuzzle } from \"./KPuzzle\";\nimport type {\n KPuzzleDefinition,\n KTransformationData,\n KTransformationOrbitData,\n} from \"./KPuzzleDefinition\";\n\nconst FREEZE: boolean = false;\n\nconst identityOrbitCache = new Map<number, KTransformationOrbitData>();\nfunction constructIdentityOrbitTransformation(\n numPieces: number,\n): KTransformationOrbitData {\n const cached = identityOrbitCache.get(numPieces);\n if (cached) {\n return cached;\n }\n\n const newPermutation = new Array(numPieces);\n const newOrientation = new Array(numPieces);\n for (let i = 0; i < numPieces; i++) {\n newPermutation[i] = i;\n newOrientation[i] = 0;\n }\n const orbitTransformation = {\n permutation: newPermutation,\n orientation: newOrientation,\n };\n if (FREEZE) {\n Object.freeze(newPermutation); // TODO\n Object.freeze(newOrientation); // TODO\n Object.freeze(orbitTransformation); // TODO\n }\n identityOrbitCache.set(numPieces, orbitTransformation);\n return orbitTransformation;\n}\n\nexport function constructIdentityTransformationDataUncached(\n definition: KPuzzleDefinition,\n): KTransformationData {\n const transformation = {} as KTransformationData;\n for (const [orbitName, orbitDefinition] of Object.entries(\n definition.orbits,\n )) {\n transformation[orbitName] = constructIdentityOrbitTransformation(\n orbitDefinition.numPieces,\n );\n }\n if (FREEZE) {\n Object.freeze(transformation); // TODO\n }\n return transformation;\n}\n\nexport function moveToTransformationUncached(\n kpuzzle: KPuzzle,\n move: Move,\n): KTransformationData {\n const quantumKey = move.quantum.toString();\n let quantumMoveDefinition = kpuzzle.definition.moves[quantumKey] as\n | KTransformationData\n | undefined;\n\n if (!quantumMoveDefinition) {\n const derivedFrom =\n kpuzzle.definition.experimentalDerivedMoves?.[quantumKey];\n\n if (derivedFrom) {\n // TODO: avoid the round trip?\n quantumMoveDefinition =\n kpuzzle.algToTransformation(derivedFrom).transformationData;\n }\n }\n\n if (quantumMoveDefinition) {\n return repeatTransformationUncached(\n kpuzzle,\n quantumMoveDefinition,\n move.amount,\n );\n }\n\n // Handle e.g. `y2` if `y2` is defined.\n // Note: this doesn't handle multiples.\n const moveDefinition = kpuzzle.definition.moves[move.toString()];\n if (moveDefinition) {\n return moveDefinition;\n }\n\n // Handle e.g. `y2'` if `y2` is defined.\n // Note: this doesn't handle multiples.\n const inverseMoveDefinition =\n kpuzzle.definition.moves[move.invert().toString()];\n if (inverseMoveDefinition) {\n return repeatTransformationUncached(kpuzzle, inverseMoveDefinition, -1);\n }\n\n throw new Error(`Invalid move for KPuzzle (${kpuzzle.name()}): ${move}`);\n}\n", "import { experimentalNormalizePuzzleOrientation as normalize3x3x3Orientation } from \"../../protocol\";\nimport { KState } from \"../KState\";\n\n// The `options` argument is required for now, because we haven't yet come up\n// with a general way to specify different kinds of solved for the same puzle.\nexport function experimentalIs3x3x3Solved(\n state: KState,\n options: {\n ignorePuzzleOrientation: boolean;\n ignoreCenterOrientation: boolean;\n },\n): boolean {\n if (options.ignorePuzzleOrientation) {\n state = normalize3x3x3Orientation(state);\n }\n if (options.ignoreCenterOrientation) {\n state = new KState(state.kpuzzle, {\n EDGES: state.stateData.EDGES,\n CORNERS: state.stateData.CORNERS,\n CENTERS: {\n pieces: state.stateData.CENTERS.pieces,\n orientation: new Array(6).fill(0),\n },\n });\n }\n return !!state.experimentalToTransformation()?.isIdentityTransformation(); // TODO: Compare to start state instead?\n}\n", "import type { KPuzzle, KTransformationData } from \".\";\nimport type { Alg, Move } from \"../alg\";\nimport { experimentalIs3x3x3Solved } from \"./3x3x3/puzzle-orientation\";\nimport { applyTransformationDataToStateData } from \"./combine\";\nimport type { KTransformationSource } from \"./KPuzzle\";\nimport type { KStateData, KTransformationOrbitData } from \"./KPuzzleDefinition\";\nimport { KTransformation } from \"./KTransformation\";\n\nexport class KState {\n constructor(\n public readonly kpuzzle: KPuzzle,\n public readonly stateData: KStateData,\n ) {}\n\n toJSON(): any {\n return {\n experimentalPuzzleName: this.kpuzzle.name(),\n stateData: this.stateData,\n };\n }\n\n static fromTransformation(transformation: KTransformation): KState {\n const newStateData = applyTransformationDataToStateData(\n transformation.kpuzzle.definition,\n transformation.kpuzzle.definition.startStateData,\n transformation.transformationData,\n );\n return new KState(transformation.kpuzzle, newStateData);\n }\n\n // Convenience function\n /** @deprecated */\n apply(source: KTransformationSource): KState {\n return this.applyTransformation(this.kpuzzle.toTransformation(source));\n }\n\n applyTransformation(transformation: KTransformation): KState {\n if (transformation.isIdentityTransformation()) {\n return new KState(this.kpuzzle, this.stateData);\n }\n const newStateData = applyTransformationDataToStateData(\n this.kpuzzle.definition,\n this.stateData,\n transformation.transformationData,\n );\n return new KState(this.kpuzzle, newStateData);\n }\n\n applyMove(move: Move | string): KState {\n return this.applyTransformation(this.kpuzzle.moveToTransformation(move));\n }\n\n applyAlg(alg: Alg | string): KState {\n return this.applyTransformation(this.kpuzzle.algToTransformation(alg));\n }\n\n /** @deprecated */\n experimentalToTransformation(): KTransformation | null {\n if (!this.kpuzzle.canConvertStateToUniqueTransformation()) {\n return null;\n }\n const transformationData: KTransformationData = {};\n for (const [orbitName, stateOrbitData] of Object.entries(this.stateData)) {\n const transformationOrbit: KTransformationOrbitData = {\n permutation: stateOrbitData.pieces,\n orientation: stateOrbitData.orientation,\n };\n transformationData[orbitName] = transformationOrbit;\n }\n return new KTransformation(this.kpuzzle, transformationData);\n }\n\n experimentalIs3x3x3Solved(options: {\n ignorePuzzleOrientation: boolean;\n ignoreCenterOrientation: boolean;\n }): boolean {\n if (this.kpuzzle.name() !== \"3x3x3\") {\n throw new Error(\n \"`KState.experimentalIs3x3x3Solved()` only supports 3x3x3 states.\",\n );\n }\n return experimentalIs3x3x3Solved(this, options);\n }\n}\n", "import type { Alg, Move } from \"../alg\";\nimport {\n invertTransformation,\n isTransformationDataIdentical,\n repeatTransformationUncached,\n transformationRepetitionOrder,\n} from \"./calculate\";\nimport { combineTransformationData } from \"./combine\";\nimport { constructIdentityTransformationDataUncached } from \"./construct\";\nimport type { KPuzzle, KTransformationSource } from \"./KPuzzle\";\nimport type { KTransformationData } from \"./KPuzzleDefinition\";\nimport { KState } from \"./KState\";\n\nexport class KTransformation {\n constructor(\n public readonly kpuzzle: KPuzzle,\n public readonly transformationData: KTransformationData,\n ) {}\n\n toJSON(): any {\n return {\n experimentalPuzzleName: this.kpuzzle.name(),\n transformationData: this.transformationData,\n };\n }\n\n invert(): KTransformation {\n return new KTransformation(\n this.kpuzzle,\n invertTransformation(this.kpuzzle, this.transformationData),\n );\n }\n\n // For optimizations, we want to make it cheap to rely on optimizations when a\n // transformation is an identity. Here, we try to make it cheaper by:\n // - only calculating when needed, and\n // - caching the result.\n #cachedIsIdentity: boolean | undefined; // TODO: is `null` worse here?\n isIdentityTransformation(): boolean {\n return (this.#cachedIsIdentity ??= this.isIdentical(\n this.kpuzzle.identityTransformation(),\n ));\n }\n\n /** @deprecated */\n static experimentalConstructIdentity(kpuzzle: KPuzzle) {\n const transformation = new KTransformation(\n kpuzzle,\n constructIdentityTransformationDataUncached(kpuzzle.definition),\n );\n transformation.#cachedIsIdentity = true;\n return transformation;\n }\n\n isIdentical(t2: KTransformation): boolean {\n return isTransformationDataIdentical(\n this.kpuzzle,\n this.transformationData,\n t2.transformationData,\n );\n }\n\n // Convenience function\n /** @deprecated */\n apply(source: KTransformationSource): KTransformation {\n return this.applyTransformation(this.kpuzzle.toTransformation(source));\n }\n\n applyTransformation(t2: KTransformation): KTransformation {\n if (this.kpuzzle !== t2.kpuzzle) {\n throw new Error(\n `Tried to apply a transformation for a KPuzzle (${t2.kpuzzle.name()}) to a different KPuzzle (${this.kpuzzle.name()}).`,\n );\n }\n\n if (this.#cachedIsIdentity) {\n return new KTransformation(this.kpuzzle, t2.transformationData);\n }\n if (t2.#cachedIsIdentity) {\n return new KTransformation(this.kpuzzle, this.transformationData);\n }\n\n return new KTransformation(\n this.kpuzzle,\n combineTransformationData(\n this.kpuzzle.definition,\n this.transformationData,\n t2.transformationData,\n ),\n );\n }\n\n applyMove(move: Move | string): KTransformation {\n return this.applyTransformation(this.kpuzzle.moveToTransformation(move));\n }\n\n applyAlg(alg: Alg | string): KTransformation {\n return this.applyTransformation(this.kpuzzle.algToTransformation(alg));\n }\n\n // Convenience. Useful for chaining.\n toKState(): KState {\n return KState.fromTransformation(this);\n }\n\n repetitionOrder(): number {\n return transformationRepetitionOrder(this.kpuzzle.definition, this);\n }\n\n selfMultiply(amount: number): KTransformation {\n return new KTransformation(\n this.kpuzzle,\n repeatTransformationUncached(\n this.kpuzzle,\n this.transformationData,\n amount,\n ),\n );\n }\n}\n", "import type { KPuzzleDefinition } from \".\";\nimport {\n Alg,\n Commutator,\n Conjugate,\n Grouping,\n LineComment,\n Move,\n Newline,\n Pause,\n TraversalDownUp,\n} from \"../alg\";\nimport { combineTransformationData } from \"./combine\";\nimport type { KPuzzle } from \"./KPuzzle\";\nimport type {\n KOrbitDefinition,\n KTransformationOrbitData,\n KTransformationData,\n} from \"./KPuzzleDefinition\";\nimport { KTransformation } from \"./KTransformation\";\n\nexport function isOrbitTransformationDataIdentityUncached(\n numOrientations: number,\n orbitTransformationData: KTransformationOrbitData,\n): boolean {\n // TODO\n // if (o === lasto) {\n // return true;\n // }\n const { permutation } = orbitTransformationData;\n const numPieces = permutation.length;\n for (let idx = 0; idx < numPieces; idx++) {\n if (permutation[idx] !== idx) {\n return false;\n }\n }\n if (numOrientations > 1) {\n const { orientation } = orbitTransformationData;\n for (let idx = 0; idx < numPieces; idx++) {\n if (orientation[idx] !== 0) {\n return false;\n }\n }\n }\n // lasto = o; // TODO\n return true;\n}\n\nexport function isOrbitTransformationDataIdentical(\n orbitDefinition: KOrbitDefinition,\n orbitTransformationData1: KTransformationOrbitData,\n orbitTransformationData2: KTransformationOrbitData,\n options: {\n ignoreOrientation?: boolean;\n ignorePermutation?: boolean;\n } = {},\n): boolean {\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n if (\n !options?.ignoreOrientation &&\n orbitTransformationData1.orientation[idx] !==\n orbitTransformationData2.orientation[idx]\n ) {\n return false;\n }\n if (\n !options?.ignorePermutation &&\n orbitTransformationData1.permutation[idx] !==\n orbitTransformationData2.permutation[idx]\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport function isTransformationDataIdentical(\n kpuzzle: KPuzzle,\n transformationData1: KTransformationData,\n transformationData2: KTransformationData,\n): boolean {\n for (const [orbitName, orbitDefinition] of Object.entries(\n kpuzzle.definition.orbits,\n )) {\n if (\n !isOrbitTransformationDataIdentical(\n orbitDefinition,\n transformationData1[orbitName],\n transformationData2[orbitName],\n )\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport function invertTransformation(\n kpuzzle: KPuzzle,\n transformationData: KTransformationData,\n): KTransformationData {\n const newTransformationData: KTransformationData = {};\n for (const orbitName in kpuzzle.definition.orbits) {\n const orbitDefinition: KOrbitDefinition =\n kpuzzle.definition.orbits[orbitName];\n const orbitTransformationData = transformationData[orbitName];\n if (\n isOrbitTransformationDataIdentityUncached(\n orbitDefinition.numOrientations,\n orbitTransformationData,\n )\n ) {\n newTransformationData[orbitName] = orbitTransformationData;\n } else if (orbitDefinition.numOrientations === 1) {\n const newPerm = new Array(orbitDefinition.numPieces);\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n newPerm[orbitTransformationData.permutation[idx]] = idx;\n }\n newTransformationData[orbitName] = {\n permutation: newPerm,\n orientation: orbitTransformationData.orientation,\n };\n } else {\n const newPerm = new Array(orbitDefinition.numPieces);\n const newOri = new Array(orbitDefinition.numPieces);\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n const fromIdx = orbitTransformationData.permutation[idx];\n newPerm[fromIdx] = idx;\n newOri[fromIdx] =\n (orbitDefinition.numOrientations -\n orbitTransformationData.orientation[idx] +\n orbitDefinition.numOrientations) %\n orbitDefinition.numOrientations;\n }\n newTransformationData[orbitName] = {\n permutation: newPerm,\n orientation: newOri,\n };\n }\n }\n return newTransformationData;\n}\n\nexport function repeatTransformationUncached(\n kpuzzle: KPuzzle,\n transformationData: KTransformationData,\n amount: number,\n): KTransformationData {\n // This is used for move construction, so we optimize for the quantum move case.\n if (amount === 1) {\n return transformationData;\n }\n if (amount < 0) {\n return repeatTransformationUncached(\n kpuzzle,\n invertTransformation(kpuzzle, transformationData),\n -amount,\n );\n }\n if (amount === 0) {\n // TODO\n const { transformationData } = kpuzzle.identityTransformation();\n return transformationData;\n }\n let halfish = transformationData;\n if (amount !== 2) {\n halfish = repeatTransformationUncached(\n kpuzzle,\n transformationData,\n Math.floor(amount / 2),\n );\n }\n const twiceHalfish = combineTransformationData(\n kpuzzle.definition,\n halfish,\n halfish,\n );\n if (amount % 2 === 0) {\n return twiceHalfish;\n } else {\n return combineTransformationData(\n kpuzzle.definition,\n transformationData,\n twiceHalfish,\n );\n }\n}\n\nclass AlgToTransformationTraversal extends TraversalDownUp<\n KPuzzle,\n KTransformation\n> {\n traverseAlg(alg: Alg, kpuzzle: KPuzzle): KTransformation {\n let transformation: KTransformation | null = null;\n for (const unit of alg.units()) {\n if (transformation) {\n transformation = transformation.applyTransformation(\n this.traverseUnit(unit, kpuzzle),\n );\n } else {\n transformation = this.traverseUnit(unit, kpuzzle);\n }\n }\n return transformation ?? kpuzzle.identityTransformation();\n }\n traverseGrouping(grouping: Grouping, kpuzzle: KPuzzle): KTransformation {\n const algTransformation = this.traverseAlg(grouping.alg, kpuzzle);\n return new KTransformation(\n kpuzzle,\n repeatTransformationUncached(\n kpuzzle,\n algTransformation.transformationData,\n grouping.amount,\n ),\n );\n }\n traverseMove(move: Move, kpuzzle: KPuzzle): KTransformation {\n return kpuzzle.moveToTransformation(move);\n }\n traverseCommutator(\n commutator: Commutator,\n kpuzzle: KPuzzle,\n ): KTransformation {\n const aTransformation = this.traverseAlg(commutator.A, kpuzzle);\n const bTransformation = this.traverseAlg(commutator.B, kpuzzle);\n return aTransformation\n .applyTransformation(bTransformation)\n .applyTransformation(aTransformation.invert())\n .applyTransformation(bTransformation.invert());\n }\n traverseConjugate(conjugate: Conjugate, kpuzzle: KPuzzle): KTransformation {\n const aTransformation = this.traverseAlg(conjugate.A, kpuzzle);\n const bTransformation = this.traverseAlg(conjugate.B, kpuzzle);\n return aTransformation\n .applyTransformation(bTransformation)\n .applyTransformation(aTransformation.invert());\n }\n traversePause(_: Pause, kpuzzle: KPuzzle): KTransformation {\n return kpuzzle.identityTransformation();\n }\n traverseNewline(_: Newline, kpuzzle: KPuzzle): KTransformation {\n return kpuzzle.identityTransformation();\n }\n traverseLineComment(_: LineComment, kpuzzle: KPuzzle): KTransformation {\n return kpuzzle.identityTransformation();\n }\n}\n\nconst algToTransformationInstance = new AlgToTransformationTraversal();\nexport const algToTransformation = algToTransformationInstance.traverseAlg.bind(\n algToTransformationInstance,\n) as (alg: Alg, kpuzzle: KPuzzle) => KTransformation;\n\nexport function canConvertStateToUniqueTransformationUncached(\n definition: KPuzzleDefinition,\n): boolean {\n for (const [orbitName, orbitDefinition] of Object.entries(definition)) {\n const pieces = new Array(orbitDefinition.numPieces).fill(false);\n for (const piece of this.definition.startStateData[orbitName].pieces) {\n pieces[piece] = true;\n }\n for (const piece of pieces) {\n if (!piece) {\n return false;\n }\n }\n }\n return true;\n}\n\nfunction gcd(a: number, b: number): number {\n if (b) {\n return gcd(b, a % b);\n }\n return a;\n}\n\n/* calculate the order of a particular transformation. */\nexport function transformationRepetitionOrder(\n definition: KPuzzleDefinition,\n transformation: KTransformation,\n): number {\n let order: number = 1;\n for (const orbitName in definition.orbits) {\n const orbitDefinition = definition.orbits[orbitName];\n const transformationOrbit = transformation.transformationData[orbitName];\n const orbitPieces = new Array(orbitDefinition.numPieces);\n for (let startIdx = 0; startIdx < orbitDefinition.numPieces; startIdx++) {\n if (!orbitPieces[startIdx]) {\n let currentIdx = startIdx;\n let orientationSum = 0;\n let cycleLength = 0;\n for (;;) {\n orbitPieces[currentIdx] = true;\n orientationSum =\n orientationSum + transformationOrbit.orientation[currentIdx];\n cycleLength = cycleLength + 1;\n currentIdx = transformationOrbit.permutation[currentIdx];\n if (currentIdx === startIdx) {\n break;\n }\n }\n if (orientationSum !== 0) {\n cycleLength =\n (cycleLength * orbitDefinition.numOrientations) /\n gcd(orbitDefinition.numOrientations, orientationSum);\n }\n order = (order * cycleLength) / gcd(order, cycleLength);\n }\n }\n }\n return order;\n}\n", "import { Alg, Move } from \"../alg\";\nimport type { PGNotation } from \"../puzzle-geometry/PuzzleGeometry\";\nimport { algToTransformation } from \"./calculate\";\nimport { moveToTransformationUncached } from \"./construct\";\nimport type {\n KPuzzleDefinition,\n KTransformationData,\n} from \"./KPuzzleDefinition\";\nimport { KState } from \"./KState\";\nimport { KTransformation } from \"./KTransformation\";\n\nexport type KTransformationSource = Alg | Move | string | KTransformation;\n\nexport class KPuzzle {\n private experimentalPGNotation: PGNotation | undefined;\n constructor(\n public readonly definition: KPuzzleDefinition,\n options?: {\n experimentalPGNotation?: PGNotation;\n },\n ) {\n this.experimentalPGNotation = options?.experimentalPGNotation;\n }\n\n name(): string {\n return this.definition.name; // TODO\n }\n\n identityTransformation(): KTransformation {\n return KTransformation.experimentalConstructIdentity(this);\n }\n\n #moveToTransformationDataCache = new Map<string, KTransformationData>();\n moveToTransformation(move: Move | string): KTransformation {\n if (typeof move === \"string\") {\n move = new Move(move);\n }\n const cacheKey = move.toString();\n const cachedTransformationData: KTransformationData | undefined =\n this.#moveToTransformationDataCache.get(cacheKey);\n if (cachedTransformationData) {\n return new KTransformation(this, cachedTransformationData);\n }\n\n if (this.experimentalPGNotation) {\n const transformationData = this.experimentalPGNotation.lookupMove(move);\n if (!transformationData) {\n throw new Error(`could not map to internal move: ${move}`);\n }\n this.#moveToTransformationDataCache.set(cacheKey, transformationData);\n return new KTransformation(this, transformationData);\n }\n\n const transformationData = moveToTransformationUncached(this, move);\n this.#moveToTransformationDataCache.set(cacheKey, transformationData);\n return new KTransformation(this, transformationData);\n }\n\n algToTransformation(alg: Alg | string): KTransformation {\n if (typeof alg === \"string\") {\n alg = new Alg(alg);\n }\n return algToTransformation(alg, this);\n }\n\n /** @deprecated */\n toTransformation(source: KTransformationSource): KTransformation {\n if (typeof source === \"string\") {\n return this.algToTransformation(source);\n } else if ((source as Alg | null)?.is?.(Alg)) {\n return this.algToTransformation(source as Alg);\n } else if ((source as Move | null)?.is?.(Move)) {\n return this.moveToTransformation(source as Move);\n } else {\n return source as KTransformation;\n }\n }\n\n startState(): KState {\n return new KState(this, this.definition.startStateData);\n }\n\n #cachedCanConvertStateToUniqueTransformation: boolean | undefined;\n // TODO: Handle incomplete start state data\n canConvertStateToUniqueTransformation(): boolean {\n return (this.#cachedCanConvertStateToUniqueTransformation ??=\n ((): boolean => {\n for (const [orbitName, orbitDefinition] of Object.entries(\n this.definition.orbits,\n )) {\n const pieces = new Array(orbitDefinition.numPieces).fill(false);\n for (const piece of this.definition.startStateData[orbitName]\n .pieces) {\n pieces[piece] = true;\n }\n for (const piece of pieces) {\n if (!piece) {\n return false;\n }\n }\n }\n return true;\n })());\n }\n\n // TODO: Remove completely with v0.25\n /** @deprecated */\n get state(): never {\n throw new Error(\"KPuzzle is now a different (stateless) class.\");\n }\n\n // TODO: Remove completely with v0.25\n /** @deprecated */\n reset(): never {\n throw new Error(\"KPuzzle is now a different (stateless) class.\");\n }\n\n // TODO: Remove completely with v0.25\n /** @deprecated */\n applyMove(_move: Move): never {\n throw new Error(\n \"KPuzzle is now a different class. Try `.moveToTransformation()` to get the transformation for a move.\",\n );\n }\n\n // TODO: Remove completely with v0.25\n /** @deprecated */\n applyAlg(_alg: Alg): never {\n throw new Error(\n \"KPuzzle is now a different class. Try `.algToTransformation()` to get the transformation for an alg.\",\n );\n }\n}\n", "// TODO: This file is here to avoid dependency loops, but it should eventually\n// move back into `cubing/puzzles`. We currently have a few functions that are\n// hardcoded to require synchronous access to this definition, and we need to\n// find a better way to do that.\n\nimport type { KPuzzleDefinition } from \"../KPuzzleDefinition\";\n\nexport const cube3x3x3KPuzzleDefinition: KPuzzleDefinition = {\n name: \"3x3x3\",\n orbits: {\n EDGES: { numPieces: 12, numOrientations: 2 },\n CORNERS: { numPieces: 8, numOrientations: 3 },\n CENTERS: { numPieces: 6, numOrientations: 4 },\n },\n startStateData: {\n EDGES: {\n pieces: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n pieces: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n pieces: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 0, 0, 0],\n },\n },\n moves: {\n U: {\n EDGES: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [1, 0, 0, 0, 0, 0],\n },\n },\n y: {\n EDGES: {\n permutation: [1, 2, 3, 0, 5, 6, 7, 4, 10, 8, 11, 9],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 7, 4, 5, 6],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 2, 3, 4, 1, 5],\n orientation: [1, 0, 0, 0, 0, 3],\n },\n },\n x: {\n EDGES: {\n permutation: [4, 8, 0, 9, 6, 10, 2, 11, 5, 7, 1, 3],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [4, 0, 3, 5, 7, 6, 2, 1],\n orientation: [2, 1, 2, 1, 1, 2, 1, 2],\n },\n CENTERS: {\n permutation: [2, 1, 5, 3, 0, 4],\n orientation: [0, 3, 0, 1, 2, 2],\n },\n },\n L: {\n EDGES: {\n permutation: [0, 1, 2, 11, 4, 5, 6, 9, 8, 3, 10, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [0, 1, 6, 2, 4, 3, 5, 7],\n orientation: [0, 0, 2, 1, 0, 2, 1, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 1, 0, 0, 0, 0],\n },\n },\n F: {\n EDGES: {\n permutation: [9, 1, 2, 3, 8, 5, 6, 7, 0, 4, 10, 11],\n orientation: [1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0],\n },\n CORNERS: {\n permutation: [3, 1, 2, 5, 0, 4, 6, 7],\n orientation: [1, 0, 0, 2, 2, 1, 0, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 1, 0, 0, 0],\n },\n },\n R: {\n EDGES: {\n permutation: [0, 8, 2, 3, 4, 10, 6, 7, 5, 9, 1, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [4, 0, 2, 3, 7, 5, 6, 1],\n orientation: [2, 1, 0, 0, 1, 0, 0, 2],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 1, 0, 0],\n },\n },\n B: {\n EDGES: {\n permutation: [0, 1, 10, 3, 4, 5, 11, 7, 8, 9, 6, 2],\n orientation: [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1],\n },\n CORNERS: {\n permutation: [0, 7, 1, 3, 4, 5, 2, 6],\n orientation: [0, 2, 1, 0, 0, 0, 2, 1],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 0, 1, 0],\n },\n },\n D: {\n EDGES: {\n permutation: [0, 1, 2, 3, 7, 4, 5, 6, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 0, 0, 1],\n },\n },\n z: {\n EDGES: {\n permutation: [9, 3, 11, 7, 8, 1, 10, 5, 0, 4, 2, 6],\n orientation: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [3, 2, 6, 5, 0, 4, 7, 1],\n orientation: [1, 2, 1, 2, 2, 1, 2, 1],\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientation: [1, 1, 1, 1, 3, 1],\n },\n },\n M: {\n EDGES: {\n permutation: [2, 1, 6, 3, 0, 5, 4, 7, 8, 9, 10, 11],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientation: [2, 0, 0, 0, 2, 0],\n },\n },\n E: {\n EDGES: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 8, 10],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientation: [0, 0, 0, 0, 0, 0],\n },\n },\n S: {\n EDGES: {\n permutation: [0, 3, 2, 7, 4, 1, 6, 5, 8, 9, 10, 11],\n orientation: [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientation: [1, 1, 0, 1, 0, 1],\n },\n },\n u: {\n EDGES: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7, 10, 8, 11, 9],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 2, 3, 4, 1, 5],\n orientation: [1, 0, 0, 0, 0, 0],\n },\n },\n l: {\n EDGES: {\n permutation: [2, 1, 6, 11, 0, 5, 4, 9, 8, 3, 10, 7],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [0, 1, 6, 2, 4, 3, 5, 7],\n orientation: [0, 0, 2, 1, 0, 2, 1, 0],\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientation: [2, 1, 0, 0, 2, 0],\n },\n },\n f: {\n EDGES: {\n permutation: [9, 3, 2, 7, 8, 1, 6, 5, 0, 4, 10, 11],\n orientation: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0],\n },\n CORNERS: {\n permutation: [3, 1, 2, 5, 0, 4, 6, 7],\n orientation: [1, 0, 0, 2, 2, 1, 0, 0],\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientation: [1, 1, 1, 1, 0, 1],\n },\n },\n r: {\n EDGES: {\n permutation: [4, 8, 0, 3, 6, 10, 2, 7, 5, 9, 1, 11],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [4, 0, 2, 3, 7, 5, 6, 1],\n orientation: [2, 1, 0, 0, 1, 0, 0, 2],\n },\n CENTERS: {\n permutation: [2, 1, 5, 3, 0, 4],\n orientation: [0, 0, 0, 1, 2, 2],\n },\n },\n b: {\n EDGES: {\n permutation: [0, 5, 10, 1, 4, 7, 11, 3, 8, 9, 6, 2],\n orientation: [0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1],\n },\n CORNERS: {\n permutation: [0, 7, 1, 3, 4, 5, 2, 6],\n orientation: [0, 2, 1, 0, 0, 0, 2, 1],\n },\n CENTERS: {\n permutation: [3, 0, 2, 5, 4, 1],\n orientation: [3, 3, 0, 3, 1, 3],\n },\n },\n d: {\n EDGES: {\n permutation: [0, 1, 2, 3, 7, 4, 5, 6, 9, 11, 8, 10],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientation: [0, 0, 0, 0, 0, 1],\n },\n },\n },\n};\n\ncube3x3x3KPuzzleDefinition.moves[\"Uw\"] = cube3x3x3KPuzzleDefinition.moves[\"u\"];\ncube3x3x3KPuzzleDefinition.moves[\"Lw\"] = cube3x3x3KPuzzleDefinition.moves[\"l\"];\ncube3x3x3KPuzzleDefinition.moves[\"Fw\"] = cube3x3x3KPuzzleDefinition.moves[\"f\"];\ncube3x3x3KPuzzleDefinition.moves[\"Rw\"] = cube3x3x3KPuzzleDefinition.moves[\"r\"];\ncube3x3x3KPuzzleDefinition.moves[\"Bw\"] = cube3x3x3KPuzzleDefinition.moves[\"b\"];\ncube3x3x3KPuzzleDefinition.moves[\"Dw\"] = cube3x3x3KPuzzleDefinition.moves[\"d\"];\n\ncube3x3x3KPuzzleDefinition.moves[\"Rv\"] = cube3x3x3KPuzzleDefinition.moves[\"x\"];\ncube3x3x3KPuzzleDefinition.moves[\"Uv\"] = cube3x3x3KPuzzleDefinition.moves[\"y\"];\ncube3x3x3KPuzzleDefinition.moves[\"Fv\"] = cube3x3x3KPuzzleDefinition.moves[\"z\"];\ncube3x3x3KPuzzleDefinition.moves[\"Lv\"] = {\n EDGES: {\n permutation: [2, 10, 6, 11, 0, 8, 4, 9, 1, 3, 5, 7],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [1, 7, 6, 2, 0, 3, 5, 4],\n orientation: [2, 1, 2, 1, 1, 2, 1, 2],\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientation: [2, 1, 0, 3, 2, 0],\n },\n};\ncube3x3x3KPuzzleDefinition.moves[\"Dv\"] = {\n EDGES: {\n permutation: [3, 0, 1, 2, 7, 4, 5, 6, 9, 11, 8, 10],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [3, 0, 1, 2, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientation: [3, 0, 0, 0, 0, 1],\n },\n};\ncube3x3x3KPuzzleDefinition.moves[\"Bv\"] = {\n EDGES: {\n permutation: [8, 5, 10, 1, 9, 7, 11, 3, 4, 0, 6, 2],\n orientation: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [4, 7, 1, 0, 5, 3, 2, 6],\n orientation: [1, 2, 1, 2, 2, 1, 2, 1],\n },\n CENTERS: {\n permutation: [3, 0, 2, 5, 4, 1],\n orientation: [3, 3, 3, 3, 1, 3],\n },\n};\n", "export { KPuzzle } from \"./KPuzzle\";\nexport type {\n KPuzzleDefinition,\n KStateData,\n KTransformationData,\n} from \"./KPuzzleDefinition\";\nexport { KState } from \"./KState\";\nexport { KTransformation } from \"./KTransformation\";\n\nimport { cube3x3x3KPuzzleDefinition } from \"./3x3x3/3x3x3.kpuzzle.json\";\nimport { KPuzzle } from \"./KPuzzle\";\nexport const experimental3x3x3KPuzzle = new KPuzzle(cube3x3x3KPuzzleDefinition);\n", "export function identityPermutation(numElems: number): number[] {\n const arr = new Array<number>(numElems);\n for (let i = 0; i < numElems; i++) {\n arr[i] = i;\n }\n return arr;\n}\n\n// Inclusive start, exclusive end (similar to `Array.prototype.slice`)\nexport function orientationsToMask(\n radix: number,\n orientations: number[],\n): number {\n let val = 0;\n for (const orientation of orientations) {\n val *= radix;\n val += orientation;\n }\n return val;\n}\n\n// Inclusive start, exclusive end (similar to `Array.prototype.slice`)\nexport function maskToOrientations(\n radix: number,\n numElems: number,\n mask: number,\n): number[] {\n const arr = [];\n while (mask > 0) {\n arr.push(mask % radix);\n mask = Math.floor(mask / radix);\n }\n return new Array<number>(numElems - arr.length).fill(0).concat(arr.reverse());\n}\n\n// From https://www.jaapsch.net/puzzles/compindx.htm#perm\nexport function permutationToLex(permutation: number[]): number {\n const n = permutation.length;\n let lexicographicIdx = 0;\n for (let i = 0; i < n - 1; i++) {\n lexicographicIdx = lexicographicIdx * (n - i);\n for (let j = i + 1; j < n; j++) {\n if (permutation[i] > permutation[j]) {\n lexicographicIdx += 1;\n }\n }\n }\n return lexicographicIdx;\n}\n\n// From https://www.jaapsch.net/puzzles/compindx.htm#perm\nexport function lexToPermutation(\n numPieces: number,\n lexicographicIdx: number,\n): number[] {\n const permutation: number[] = new Array(numPieces);\n permutation[numPieces - 1] = 0;\n for (let i = numPieces - 2; i >= 0; i--) {\n permutation[i] = lexicographicIdx % (numPieces - i);\n lexicographicIdx = Math.floor(lexicographicIdx / (numPieces - i));\n for (let j = i + 1; j < numPieces; j++) {\n if (permutation[j] >= permutation[i]) {\n permutation[j] = permutation[j] + 1;\n }\n }\n }\n return permutation;\n}\n", "import { Alg } from \"../../alg\";\nimport { experimental3x3x3KPuzzle, KTransformation } from \"../../kpuzzle\";\nimport type { KState } from \"../../kpuzzle/KState\";\n\nexport function puzzleOrientationIdx(state: KState): [number, number] {\n const idxU = state.stateData[\"CENTERS\"].pieces[0];\n const idxD = state.stateData[\"CENTERS\"].pieces[5];\n const unadjustedIdxL = state.stateData[\"CENTERS\"].pieces[1];\n let idxL = unadjustedIdxL;\n if (idxU < unadjustedIdxL) {\n idxL--;\n }\n if (idxD < unadjustedIdxL) {\n idxL--;\n }\n return [idxU, idxL];\n}\n\nconst puzzleOrientationCacheRaw: KTransformation[][] = new Array(6)\n .fill(0)\n .map(() => {\n return new Array<KTransformation>(6);\n });\n\nconst puzzleOrientationCacheInitialized = false;\nfunction puzzleOrientationCache(): KTransformation[][] {\n if (!puzzleOrientationCacheInitialized) {\n // We use a new block to avoid keeping a reference to temporary vars.\n // kpuzzle todo\n {\n const uAlgs: Alg[] = [\"\", \"z\", \"x\", \"z'\", \"x'\", \"x2\"].map((s) =>\n Alg.fromString(s),\n );\n const yAlg = new Alg(\"y\");\n for (const uAlg of uAlgs) {\n let transformation = experimental3x3x3KPuzzle.algToTransformation(uAlg);\n for (let i = 0; i < 4; i++) {\n transformation = transformation.applyAlg(yAlg);\n const [idxU, idxL] = puzzleOrientationIdx(transformation.toKState());\n puzzleOrientationCacheRaw[idxU][idxL] = transformation.invert();\n }\n }\n }\n }\n return puzzleOrientationCacheRaw;\n}\n\nexport function normalizePuzzleOrientation(state: KState): KState {\n const [idxU, idxL] = puzzleOrientationIdx(state);\n const orientationTransformation = puzzleOrientationCache()[idxU][idxL];\n return state.applyTransformation(orientationTransformation);\n}\n\n// TODO: combine with `orientPuzzle`?\nexport function reorientPuzzle(\n state: KState,\n idxU: number,\n idxL: number,\n): KState {\n return state.applyTransformation(\n puzzleOrientationCache()[idxU][idxL].invert(),\n );\n}\n", "import { experimental3x3x3KPuzzle, KState } from \"../../kpuzzle\";\nimport {\n identityPermutation,\n lexToPermutation,\n maskToOrientations,\n orientationsToMask,\n permutationToLex,\n} from \"./orbit-indexing\";\nimport {\n normalizePuzzleOrientation,\n puzzleOrientationIdx,\n reorientPuzzle,\n} from \"./puzzle-orientation\";\n\ntype Binary3x3x3State = ArrayBuffer;\n\n// Bit lengths of the encoded components, in order.\nconst BIT_LENGTHS = [29, 12, 16, 13, 3, 2, 1, 12];\n\n// These fields are sorted by the order in which they appear in the binary format.\nexport interface Binary3x3x3Components {\n epLex: number; // 29 bits, edge permutation\n eoMask: number; // 12 bits, edge orientation\n cpLex: number; // 16 bits, corner permutation\n coMask: number; // 13 bits, corner orientation\n poIdxU: number; // 3 bits, puzzle orientation (U face)\n poIdxL: number; // 2 bits, puzzle orientation (L face)\n moSupport: number; // 1 bit, center orientation support\n moMask: number; // 12 bits, center orientation\n}\n\n// There are various clever ways to do this, but this is simple and efficient.\nfunction arraySum(arr: number[]): number {\n let total = 0;\n for (const entry of arr) {\n total += entry;\n }\n return total;\n}\n\n// Due to limitations in JS bit operations, this is unsafe if any of the bit lengths span across the contents of more than 4 bytes.\n// - Safe: [8, 32]\n// - Unsafe: [4, 32, 4]\n// - Unsafe: [40, 4]\nfunction splitBinary(bitLengths: number[], buffy: ArrayBuffer): number[] {\n const u8buffy = new Uint8Array(buffy);\n let at = 0;\n let bits = 0;\n let accum = 0;\n const values: number[] = [];\n for (const bitLength of bitLengths) {\n while (bits < bitLength) {\n accum = (accum << 8) | u8buffy[at++];\n bits += 8;\n }\n values.push((accum >> (bits - bitLength)) & ((1 << bitLength) - 1));\n bits -= bitLength;\n }\n return values;\n}\n\n// See above for safety notes.\nfunction concatBinary(bitLengths: number[], values: number[]): ArrayBuffer {\n const buffy = new Uint8Array(Math.ceil(arraySum(bitLengths) / 8));\n let at = 0;\n let bits = 0;\n let accum = 0;\n for (let i = 0; i < bitLengths.length; i++) {\n accum = (accum << bitLengths[i]) | values[i];\n bits += bitLengths[i];\n while (bits >= 8) {\n buffy[at++] = accum >> (bits - 8);\n bits -= 8;\n }\n }\n if (bits > 0) {\n buffy[at++] = accum << (8 - bits);\n }\n return buffy;\n}\n\n// 0x111 (for idxU) means \"not supported\"\nfunction supportsPuzzleOrientation(components: Binary3x3x3Components): boolean {\n return components.poIdxU !== 7;\n}\n\nexport function reid3x3x3ToBinaryComponents(\n state: KState,\n): Binary3x3x3Components {\n const normedState = normalizePuzzleOrientation(state);\n\n const epLex = permutationToLex(normedState.stateData[\"EDGES\"].pieces);\n const eoMask = orientationsToMask(\n 2,\n normedState.stateData[\"EDGES\"].orientation,\n );\n const cpLex = permutationToLex(normedState.stateData[\"CORNERS\"].pieces);\n const coMask = orientationsToMask(\n 3,\n normedState.stateData[\"CORNERS\"].orientation,\n );\n const [poIdxU, poIdxL] = puzzleOrientationIdx(state);\n const moSupport = 1; // Required for now.\n const moMask = orientationsToMask(\n 4,\n normedState.stateData[\"CENTERS\"].orientation,\n );\n\n return {\n epLex,\n eoMask,\n cpLex,\n coMask,\n poIdxU,\n poIdxL,\n moSupport,\n moMask,\n };\n}\n\nexport function binaryComponentsToTwizzleBinary(\n components: Binary3x3x3Components,\n): Binary3x3x3State {\n const { epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask } =\n components;\n\n return concatBinary(BIT_LENGTHS, [\n epLex,\n eoMask,\n cpLex,\n coMask,\n poIdxU,\n poIdxL,\n moSupport,\n moMask,\n ]);\n}\n\nexport function reid3x3x3ToTwizzleBinary(state: KState): Binary3x3x3State {\n const components: Binary3x3x3Components = reid3x3x3ToBinaryComponents(state);\n return binaryComponentsToTwizzleBinary(components);\n}\n\nexport function twizzleBinaryToBinaryComponents(\n buffer: ArrayBuffer,\n): Binary3x3x3Components {\n const [epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask] =\n splitBinary(BIT_LENGTHS, buffer);\n\n return {\n epLex,\n eoMask,\n cpLex,\n coMask,\n poIdxU,\n poIdxL,\n moSupport,\n moMask,\n };\n}\n\nexport function binaryComponentsToReid3x3x3(\n components: Binary3x3x3Components,\n): KState {\n if (components.moSupport !== 1) {\n throw new Error(\"Must support center orientation.\");\n }\n\n const normedState = new KState(experimental3x3x3KPuzzle, {\n EDGES: {\n pieces: lexToPermutation(12, components.epLex),\n orientation: maskToOrientations(2, 12, components.eoMask),\n },\n CORNERS: {\n pieces: lexToPermutation(8, components.cpLex),\n orientation: maskToOrientations(3, 8, components.coMask),\n },\n CENTERS: {\n pieces: identityPermutation(6),\n orientation: maskToOrientations(4, 6, components.moMask),\n },\n });\n\n if (!supportsPuzzleOrientation(components)) {\n return normedState;\n }\n\n return reorientPuzzle(normedState, components.poIdxU, components.poIdxL);\n}\n\n// Returns a list of error string.\n// An empty list means validation success.\nfunction validateComponents(components: Binary3x3x3Components): string[] {\n const errors = [];\n if (components.epLex < 0 || components.epLex >= 479001600) {\n errors.push(`epLex (${components.epLex}) out of range`);\n }\n if (components.cpLex < 0 || components.cpLex >= 40320) {\n errors.push(`cpLex (${components.cpLex}) out of range`);\n }\n if (components.coMask < 0 || components.coMask >= 6561) {\n errors.push(`coMask (${components.coMask}) out of range`);\n }\n if (components.poIdxU < 0 || components.poIdxU >= 6) {\n // 0x111 (for idxU) means \"not supported\"\n if (supportsPuzzleOrientation(components)) {\n errors.push(`poIdxU (${components.poIdxU}) out of range`);\n }\n }\n // The following cannot be (f decoded from binary properl) out of rangey.\n if (components.eoMask < 0 || components.eoMask >= 4096) {\n errors.push(`eoMask (${components.eoMask}) out of range`);\n }\n if (components.moMask < 0 || components.moMask >= 4096) {\n errors.push(`moMask (${components.moMask}) out of range`);\n }\n if (components.poIdxL < 0 || components.poIdxL >= 4) {\n errors.push(`poIdxL (${components.poIdxL}) out of range`);\n }\n if (components.moSupport < 0 || components.moSupport >= 2) {\n errors.push(`moSupport (${components.moSupport}) out of range`);\n }\n return errors;\n}\n\nexport function twizzleBinaryToReid3x3x3(buffy: ArrayBuffer): KState {\n const components = twizzleBinaryToBinaryComponents(buffy);\n const errors = validateComponents(components);\n if (errors.length !== 0) {\n throw new Error(`Invalid binary state components: ${errors.join(\", \")}`);\n }\n return binaryComponentsToReid3x3x3(components);\n}\n", "export function bufferToSpacedHex(buffer: ArrayBuffer): string {\n // buffer is an ArrayBuffer\n return (\n Array.prototype.map.call(new Uint8Array(buffer), (x: number) =>\n (\"00\" + x.toString(16)).slice(-2),\n ) as string[]\n ).join(\" \");\n}\n\nexport function spacedHexToBuffer(hex: string): Uint8Array {\n return new Uint8Array(hex.split(\" \").map((c) => parseInt(c, 16)));\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  randomChoiceFactory
3
- } from "./chunk-43SBQEWR.js";
3
+ } from "./chunk-V55YSWJY.js";
4
4
  import {
5
5
  puzzles
6
- } from "./chunk-YRNGJPFS.js";
6
+ } from "./chunk-XQKTAWAA.js";
7
7
  import {
8
8
  KState
9
- } from "./chunk-YAOUFM4D.js";
9
+ } from "./chunk-HUCMGBEC.js";
10
10
  import {
11
11
  Alg,
12
12
  AlgBuilder,
13
13
  Move
14
- } from "./chunk-DO7GZAW4.js";
14
+ } from "./chunk-QZOJPCN5.js";
15
15
 
16
16
  // src/cubing/search/inside/inside-worker.ts
17
17
  var isInsideWorker = false;
@@ -462,7 +462,7 @@ async function random333State() {
462
462
  }
463
463
  var cachedImport = null;
464
464
  function dynamicMin2phaseGWT() {
465
- return cachedImport ?? (cachedImport = import("./3x3x3-min2phase-UBW46KDU.js"));
465
+ return cachedImport ?? (cachedImport = import("./3x3x3-min2phase-GFNNX26U.js"));
466
466
  }
467
467
  async function solve333(s) {
468
468
  mustBeInsideWorker();
@@ -502,4 +502,4 @@ export {
502
502
  random333OrientedScramble,
503
503
  random333FewestMovesScramble
504
504
  };
505
- //# sourceMappingURL=chunk-RPPJMADS.js.map
505
+ //# sourceMappingURL=chunk-J7OB2GEM.js.map