cubing 0.40.0 → 0.41.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 (76) hide show
  1. package/dist/esm/bluetooth/index.js +7 -7
  2. package/dist/esm/bluetooth/index.js.map +2 -2
  3. package/dist/esm/{chunk-2UHC65GH.js → chunk-2MAPPPWG.js} +5 -5
  4. package/dist/esm/chunk-2MAPPPWG.js.map +7 -0
  5. package/dist/esm/{chunk-ZILJKTYP.js → chunk-BTVDGT5H.js} +17 -17
  6. package/dist/esm/{chunk-JXW26CFJ.js → chunk-DNOZJX34.js} +3 -3
  7. package/dist/esm/{chunk-F6V2QBMP.js → chunk-F72PPD54.js} +72 -64
  8. package/dist/esm/chunk-F72PPD54.js.map +7 -0
  9. package/dist/esm/{chunk-TKIXG2EX.js → chunk-LWPMAFQX.js} +8 -8
  10. package/dist/esm/chunk-LWPMAFQX.js.map +7 -0
  11. package/dist/esm/{chunk-TBVTYIMY.js → chunk-QFJEREMI.js} +3 -3
  12. package/dist/esm/chunk-QFJEREMI.js.map +7 -0
  13. package/dist/esm/{chunk-IZJ3YK5S.js → chunk-RYRRMKVS.js} +14 -13
  14. package/dist/esm/chunk-RYRRMKVS.js.map +7 -0
  15. package/dist/esm/{chunk-NBVZ7LEM.js → chunk-SNYTAYI2.js} +95 -105
  16. package/dist/esm/chunk-SNYTAYI2.js.map +7 -0
  17. package/dist/esm/{chunk-NZAWY3EU.js → chunk-UOO5TXR6.js} +29 -29
  18. package/dist/esm/chunk-UOO5TXR6.js.map +7 -0
  19. package/dist/esm/{chunk-45VMKYXT.js → chunk-VRFVPBCT.js} +3 -5
  20. package/dist/esm/chunk-VRFVPBCT.js.map +7 -0
  21. package/dist/esm/inside-DLVM67HZ.js +17 -0
  22. package/dist/esm/kpuzzle/index.js +3 -3
  23. package/dist/esm/notation/index.js +3 -3
  24. package/dist/esm/protocol/index.js +3 -3
  25. package/dist/esm/puzzle-geometry/index.js +43 -26
  26. package/dist/esm/puzzle-geometry/index.js.map +2 -2
  27. package/dist/esm/puzzles/index.js +3 -3
  28. package/dist/esm/{puzzles-dynamic-side-events-DHAI7HWB.js → puzzles-dynamic-side-events-42Q52YAB.js} +157 -85
  29. package/dist/esm/puzzles-dynamic-side-events-42Q52YAB.js.map +7 -0
  30. package/dist/esm/{puzzles-dynamic-unofficial-QXSDLTK5.js → puzzles-dynamic-unofficial-PCHNKY4Y.js} +13 -13
  31. package/dist/esm/{puzzles-dynamic-unofficial-QXSDLTK5.js.map → puzzles-dynamic-unofficial-PCHNKY4Y.js.map} +2 -2
  32. package/dist/esm/scramble/index.js +7 -7
  33. package/dist/esm/search/index.js +7 -7
  34. package/dist/esm/{search-dynamic-sgs-side-events-LBEIUPJE.js → search-dynamic-sgs-side-events-7RLPMUUQ.js} +5 -5
  35. package/dist/esm/{search-dynamic-sgs-unofficial-PHDE4BVE.js → search-dynamic-sgs-unofficial-IXO75L3Y.js} +5 -5
  36. package/dist/esm/{search-dynamic-solve-4x4x4-EJB3WWMV.js → search-dynamic-solve-4x4x4-IP6UC7HF.js} +5 -5
  37. package/dist/esm/search-worker-entry.js.js +1 -1
  38. package/dist/esm/twisty/index.js +28 -22
  39. package/dist/esm/twisty/index.js.map +2 -2
  40. package/dist/esm/{twisty-dynamic-3d-EI5ZUVCP.js → twisty-dynamic-3d-6SRUMP27.js} +13 -13
  41. package/dist/esm/twisty-dynamic-3d-6SRUMP27.js.map +7 -0
  42. package/dist/esm/{twsearch-ZALDQ4TE.js → twsearch-D6TM63UU.js} +8 -8
  43. package/dist/esm/twsearch-D6TM63UU.js.map +7 -0
  44. package/dist/types/{KState-33ce1f57.d.ts → KPattern-85fd8579.d.ts} +33 -29
  45. package/dist/types/{TwizzleLink-19143923.d.ts → TwizzleLink-7d147be8.d.ts} +7 -7
  46. package/dist/types/bluetooth/index.d.ts +6 -6
  47. package/dist/types/{bluetooth-puzzle-29072a56.d.ts → bluetooth-puzzle-da601f13.d.ts} +3 -3
  48. package/dist/types/kpuzzle/index.d.ts +1 -1
  49. package/dist/types/notation/index.d.ts +2 -2
  50. package/dist/types/{outside-b7760f77.d.ts → outside-51ce651a.d.ts} +8 -8
  51. package/dist/types/protocol/index.d.ts +4 -4
  52. package/dist/types/puzzle-geometry/index.d.ts +2 -2
  53. package/dist/types/puzzles/index.d.ts +3 -3
  54. package/dist/types/scramble/index.d.ts +2 -2
  55. package/dist/types/search/index.d.ts +3 -3
  56. package/dist/types/stream/index.d.ts +2 -2
  57. package/dist/types/twisty/index.d.ts +7 -7
  58. package/package.json +1 -1
  59. package/dist/esm/chunk-2UHC65GH.js.map +0 -7
  60. package/dist/esm/chunk-45VMKYXT.js.map +0 -7
  61. package/dist/esm/chunk-F6V2QBMP.js.map +0 -7
  62. package/dist/esm/chunk-IZJ3YK5S.js.map +0 -7
  63. package/dist/esm/chunk-NBVZ7LEM.js.map +0 -7
  64. package/dist/esm/chunk-NZAWY3EU.js.map +0 -7
  65. package/dist/esm/chunk-TBVTYIMY.js.map +0 -7
  66. package/dist/esm/chunk-TKIXG2EX.js.map +0 -7
  67. package/dist/esm/inside-BGMQCQ2A.js +0 -17
  68. package/dist/esm/puzzles-dynamic-side-events-DHAI7HWB.js.map +0 -7
  69. package/dist/esm/twisty-dynamic-3d-EI5ZUVCP.js.map +0 -7
  70. package/dist/esm/twsearch-ZALDQ4TE.js.map +0 -7
  71. /package/dist/esm/{chunk-ZILJKTYP.js.map → chunk-BTVDGT5H.js.map} +0 -0
  72. /package/dist/esm/{chunk-JXW26CFJ.js.map → chunk-DNOZJX34.js.map} +0 -0
  73. /package/dist/esm/{inside-BGMQCQ2A.js.map → inside-DLVM67HZ.js.map} +0 -0
  74. /package/dist/esm/{search-dynamic-sgs-side-events-LBEIUPJE.js.map → search-dynamic-sgs-side-events-7RLPMUUQ.js.map} +0 -0
  75. /package/dist/esm/{search-dynamic-sgs-unofficial-PHDE4BVE.js.map → search-dynamic-sgs-unofficial-IXO75L3Y.js.map} +0 -0
  76. /package/dist/esm/{search-dynamic-solve-4x4x4-EJB3WWMV.js.map → search-dynamic-solve-4x4x4-IP6UC7HF.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/puzzles/stickerings/mask.ts", "../../src/cubing/puzzles/stickerings/puzzle-stickerings.ts", "../../src/cubing/puzzles/stickerings/cube-like-stickerings.ts", "../../src/cubing/puzzles/async/lazy-cached.ts", "../../src/cubing/vendor/mit/p-lazy/p-lazy.ts", "../../src/cubing/puzzles/async/async-pg3d.ts", "../../src/cubing/puzzles/implementations/dynamic/3x3x3/3x3x3.kpuzzle.json.ts", "../../src/cubing/puzzles/PuzzleLoader.ts", "../../src/cubing/puzzles/implementations/dynamic/2x2x2/puzzle-orientation.ts", "../../src/cubing/puzzles/customPGPuzzleLoader.ts", "../../src/cubing/puzzles/cubing-private/index.ts", "../../src/cubing/puzzles/implementations/dynamic/3x3x3/puzzle-orientation.ts"],
4
+ "sourcesContent": ["// TODO: figure out where to house this permanently.\n\nimport type { Move } from \"../../alg\";\nimport type { KPuzzle } from \"../../kpuzzle\";\n\nexport type FaceletMeshStickeringMask =\n | \"regular\"\n | \"dim\"\n | \"oriented\"\n | \"ignored\"\n | \"invisible\";\n\nexport type FaceletStickeringMask = {\n mask: FaceletMeshStickeringMask;\n hintMask?: FaceletMeshStickeringMask;\n};\n\nexport type PieceStickeringMask = {\n // TODO: foundation?\n facelets: (FaceletMeshStickeringMask | FaceletStickeringMask | null)[];\n};\n\nexport type OrbitStickeringMask = {\n pieces: (PieceStickeringMask | null)[];\n};\n\nexport type StickeringMask = {\n specialBehaviour?: \"picture\"; // TODO: remove this\n name?: string; // TODO\n orbits: Record<string, OrbitStickeringMask>;\n};\n\nexport function getFaceletStickeringMask(\n stickeringMask: StickeringMask,\n orbitName: string,\n pieceIdx: number,\n faceletIdx: number,\n hint: boolean,\n): FaceletMeshStickeringMask {\n const orbitStickeringMask = stickeringMask.orbits[orbitName];\n const pieceStickeringMask: PieceStickeringMask | null =\n orbitStickeringMask.pieces[pieceIdx];\n if (pieceStickeringMask === null) {\n return regular;\n }\n const faceletStickeringMask:\n | FaceletMeshStickeringMask\n | FaceletStickeringMask\n | null = pieceStickeringMask.facelets?.[faceletIdx];\n if (faceletStickeringMask === null) {\n return regular;\n }\n if (typeof faceletStickeringMask === \"string\") {\n return faceletStickeringMask;\n }\n if (hint) {\n return faceletStickeringMask.hintMask ?? faceletStickeringMask.mask;\n }\n console.log(faceletStickeringMask);\n return faceletStickeringMask.mask;\n}\n\n// TODO: Revert this to a normal enum, or write a standard to codify the names?\nexport enum PieceStickering {\n Regular = \"Regular\",\n Dim = \"Dim\",\n Ignored = \"Ignored\",\n OrientationStickers = \"OrientationStickers\",\n Invisible = \"Invisible\",\n Ignoriented = \"Ignoriented\",\n IgnoreNonPrimary = \"IgnoreNonPrimary\",\n PermuteNonPrimary = \"PermuteNonPrimary\",\n OrientationWithoutPermutation = \"OrientationWithoutPermutation\",\n}\n\nexport class PieceAnnotation<T> {\n stickerings: Map<string, T[]> = new Map();\n constructor(kpuzzle: KPuzzle, defaultValue: T) {\n for (const orbitDefinition of kpuzzle.definition.orbits) {\n this.stickerings.set(\n orbitDefinition.orbitName,\n new Array(orbitDefinition.numPieces).fill(defaultValue),\n );\n }\n }\n}\n\nconst regular = \"regular\";\nconst ignored = \"ignored\";\nconst oriented = \"oriented\";\nconst invisible = \"invisible\";\nconst dim = \"dim\";\n\n// We specify 5 facelets, because that's the maximum we need for any built-in puzzles (e.g. Megaminx centers or icosa vertices).\n// TODO: use \"primary\" and \"non-primary\" fields instead of listing all non-primary facelets.\nconst pieceStickerings: Record<string, PieceStickeringMask> = {\n // regular\n [PieceStickering.Regular]: {\n // r\n facelets: [regular, regular, regular, regular, regular],\n },\n\n // ignored\n [PieceStickering.Ignored]: {\n // i\n facelets: [ignored, ignored, ignored, ignored, ignored],\n },\n\n // oriented stickers\n [PieceStickering.OrientationStickers]: {\n // o\n facelets: [oriented, oriented, oriented, oriented, oriented],\n },\n\n // \"OLL\"\n [PieceStickering.IgnoreNonPrimary]: {\n // riiii\n facelets: [regular, ignored, ignored, ignored, ignored],\n },\n\n // invisible\n [PieceStickering.Invisible]: {\n // invisiblePiece\n facelets: [invisible, invisible, invisible, invisible, invisible],\n },\n\n // \"PLL\"\n [PieceStickering.PermuteNonPrimary]: {\n // drrrr\n facelets: [dim, regular, regular, regular, regular],\n },\n\n // ignored\n [PieceStickering.Dim]: {\n // d\n facelets: [dim, dim, dim, dim, dim],\n },\n\n // \"OLL\"\n [PieceStickering.Ignoriented]: {\n // diiii\n facelets: [dim, ignored, ignored, ignored, ignored],\n },\n [PieceStickering.OrientationWithoutPermutation]: {\n // oiiii\n facelets: [oriented, ignored, ignored, ignored, ignored],\n },\n};\n\nexport function getPieceStickeringMask(\n pieceStickering: PieceStickering,\n): PieceStickeringMask {\n return pieceStickerings[pieceStickering];\n}\n\nexport class PuzzleStickering extends PieceAnnotation<PieceStickering> {\n constructor(kpuzzle: KPuzzle) {\n super(kpuzzle, PieceStickering.Regular);\n }\n\n set(pieceSet: PieceSet, pieceStickering: PieceStickering): PuzzleStickering {\n for (const [orbitName, pieces] of this.stickerings.entries()) {\n for (let i = 0; i < pieces.length; i++) {\n if (pieceSet.stickerings.get(orbitName)![i]) {\n pieces[i] = pieceStickering;\n }\n }\n }\n return this;\n }\n\n toStickeringMask(): StickeringMask {\n const stickeringMask: StickeringMask = { orbits: {} };\n for (const [orbitName, pieceStickerings] of this.stickerings.entries()) {\n const pieces: PieceStickeringMask[] = [];\n const orbitStickeringMask: OrbitStickeringMask = {\n pieces,\n };\n stickeringMask.orbits[orbitName] = orbitStickeringMask;\n for (const pieceStickering of pieceStickerings) {\n pieces.push(getPieceStickeringMask(pieceStickering));\n }\n }\n return stickeringMask;\n }\n}\n\nexport type PieceSet = PieceAnnotation<boolean>;\n\nexport class StickeringManager {\n constructor(private kpuzzle: KPuzzle) {}\n\n and(pieceSets: PieceSet[]): PieceSet {\n const newPieceSet = new PieceAnnotation<boolean>(this.kpuzzle, false);\n for (const orbitDefinition of this.kpuzzle.definition.orbits) {\n pieceLoop: for (let i = 0; i < orbitDefinition.numPieces; i++) {\n newPieceSet.stickerings.get(orbitDefinition.orbitName)![i] = true;\n for (const pieceSet of pieceSets) {\n if (!pieceSet.stickerings.get(orbitDefinition.orbitName)![i]) {\n newPieceSet.stickerings.get(orbitDefinition.orbitName)![i] = false;\n continue pieceLoop;\n }\n }\n }\n }\n return newPieceSet;\n }\n\n or(pieceSets: PieceSet[]): PieceSet {\n // TODO: unify impl with and?\n const newPieceSet = new PieceAnnotation<boolean>(this.kpuzzle, false);\n for (const orbitDefinition of this.kpuzzle.definition.orbits) {\n pieceLoop: for (let i = 0; i < orbitDefinition.numPieces; i++) {\n newPieceSet.stickerings.get(orbitDefinition.orbitName)![i] = false;\n for (const pieceSet of pieceSets) {\n if (pieceSet.stickerings.get(orbitDefinition.orbitName)![i]) {\n newPieceSet.stickerings.get(orbitDefinition.orbitName)![i] = true;\n continue pieceLoop;\n }\n }\n }\n }\n return newPieceSet;\n }\n\n not(pieceSet: PieceSet): PieceSet {\n const newPieceSet = new PieceAnnotation<boolean>(this.kpuzzle, false);\n for (const orbitDefinition of this.kpuzzle.definition.orbits) {\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n newPieceSet.stickerings.get(orbitDefinition.orbitName)![i] =\n !pieceSet.stickerings.get(orbitDefinition.orbitName)![i];\n }\n }\n return newPieceSet;\n }\n\n all(): PieceSet {\n return this.and(this.moves([])); // TODO: are the degenerate cases for and/or the wrong way around\n }\n\n move(moveSource: Move | string): PieceSet {\n const transformation = this.kpuzzle.moveToTransformation(moveSource);\n const newPieceSet = new PieceAnnotation<boolean>(this.kpuzzle, false);\n for (const orbitDefinition of this.kpuzzle.definition.orbits) {\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n if (\n transformation.transformationData[orbitDefinition.orbitName]\n .permutation[i] !== i ||\n transformation.transformationData[orbitDefinition.orbitName]\n .orientationDelta[i] !== 0\n ) {\n newPieceSet.stickerings.get(orbitDefinition.orbitName)![i] = true;\n }\n }\n }\n return newPieceSet;\n }\n\n moves(moveSources: (Move | string)[]): PieceSet[] {\n return moveSources.map((moveSource) => this.move(moveSource));\n }\n\n orbits(orbitNames: string[]): PieceSet {\n const pieceSet = new PieceAnnotation<boolean>(this.kpuzzle, false);\n for (const orbitName of orbitNames) {\n pieceSet.stickerings.get(orbitName)!.fill(true);\n }\n return pieceSet;\n }\n\n orbitPrefix(orbitPrefix: string): PieceSet {\n const pieceSet = new PieceAnnotation<boolean>(this.kpuzzle, false);\n for (const orbitDefinition of this.kpuzzle.definition.orbits) {\n if (orbitDefinition.orbitName.startsWith(orbitPrefix)) {\n pieceSet.stickerings.get(orbitDefinition.orbitName)!.fill(true);\n }\n }\n return pieceSet;\n }\n // trueCounts(pieceSet: PieceSet): Record<string, number> {\n // const counts: Record<string, number> = {};\n // for (const orbitDefinition of this.def.orbits) {\n // let count = 0;\n // for (let i = 0; i < orbitDefinition.numPieces; i++) {\n // if (pieceSet.stickerings.get(orbitDefinition.orbitName)![i]) {\n // count++;\n // }\n // }\n // counts[orbitName] = count;\n // }\n // return counts;\n // }\n}\n", "import type { PuzzleID } from \"../../twisty\";\n\nconst LL = \"Last Layer\";\nconst LS = \"Last Slot\";\nconst megaAnd3x3x3LL = {\n \"3x3x3\": LL,\n megaminx: LL,\n};\nconst megaAnd3x3x3LS = {\n \"3x3x3\": LS,\n megaminx: LS,\n};\n\nexport const experimentalStickerings: Record<\n string,\n { groups?: Partial<Record<PuzzleID, string>> }\n> = {\n full: { groups: { \"3x3x3\": \"Stickering\", megaminx: \"Stickering\" } }, // default\n OLL: { groups: megaAnd3x3x3LL },\n PLL: { groups: megaAnd3x3x3LL },\n LL: { groups: megaAnd3x3x3LL },\n EOLL: { groups: megaAnd3x3x3LL },\n COLL: { groups: megaAnd3x3x3LL },\n OCLL: { groups: megaAnd3x3x3LL },\n CPLL: { groups: megaAnd3x3x3LL },\n CLL: { groups: megaAnd3x3x3LL },\n EPLL: { groups: megaAnd3x3x3LL },\n ELL: { groups: megaAnd3x3x3LL },\n ZBLL: { groups: megaAnd3x3x3LL },\n LS: { groups: megaAnd3x3x3LS },\n ELS: { groups: megaAnd3x3x3LS },\n CLS: { groups: megaAnd3x3x3LS },\n ZBLS: { groups: megaAnd3x3x3LS },\n VLS: { groups: megaAnd3x3x3LS },\n WVLS: { groups: megaAnd3x3x3LS },\n F2L: { groups: { \"3x3x3\": \"CFOP (Fridrich)\" } },\n Daisy: { groups: { \"3x3x3\": \"CFOP (Fridrich)\" } },\n Cross: { groups: { \"3x3x3\": \"CFOP (Fridrich)\" } },\n EO: { groups: { \"3x3x3\": \"ZZ\" } },\n EOline: { groups: { \"3x3x3\": \"ZZ\" } },\n EOcross: { groups: { \"3x3x3\": \"ZZ\" } },\n CMLL: { groups: { \"3x3x3\": \"Roux\" } },\n L10P: { groups: { \"3x3x3\": \"Roux\" } },\n L6E: { groups: { \"3x3x3\": \"Roux\" } },\n L6EO: { groups: { \"3x3x3\": \"Roux\" } },\n \"2x2x2\": { groups: { \"3x3x3\": \"Petrus\" } },\n \"2x2x3\": { groups: { \"3x3x3\": \"Petrus\" } },\n L2C: {\n groups: {\n \"4x4x4\": \"Reduction\",\n \"5x5x5\": \"Reduction\",\n \"6x6x6\": \"Reduction\",\n },\n },\n PBL: {\n groups: {\n \"2x2x2\": \"Ortega\",\n },\n },\n \"Void Cube\": { groups: { \"3x3x3\": \"Miscellaneous\" } },\n invisible: { groups: { \"3x3x3\": \"Miscellaneous\" } },\n picture: { groups: { \"3x3x3\": \"Miscellaneous\" } },\n \"centers-only\": { groups: { \"3x3x3\": \"Miscellaneous\" } }, // TODO\n \"experimental-centers-U\": {},\n \"experimental-centers-U-D\": {},\n \"experimental-centers-U-L-D\": {},\n \"experimental-centers-U-L-B-D\": {},\n \"experimental-centers\": {},\n \"experimental-fto-fc\": { groups: { fto: \"Bencisco\" } },\n \"experimental-fto-f2t\": { groups: { fto: \"Bencisco\" } },\n \"experimental-fto-sc\": { groups: { fto: \"Bencisco\" } },\n \"experimental-fto-l2c\": { groups: { fto: \"Bencisco\" } },\n \"experimental-fto-lbt\": { groups: { fto: \"Bencisco\" } },\n \"experimental-fto-l3t\": { groups: { fto: \"Bencisco\" } },\n};\n", "import type { ExperimentalStickering, PuzzleID } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n type PieceSet,\n PieceStickering,\n type StickeringMask,\n PuzzleStickering,\n StickeringManager,\n} from \"./mask\";\nimport { experimentalStickerings } from \"./puzzle-stickerings\";\n\n// TODO: cache calculations?\nexport async function cubeLikeStickeringMask(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n const kpuzzle = await puzzleLoader.kpuzzle();\n const puzzleStickering = new PuzzleStickering(kpuzzle);\n const m = new StickeringManager(kpuzzle);\n\n const LL = (): PieceSet => m.move(\"U\");\n const orUD = (): PieceSet => m.or(m.moves([\"U\", \"D\"]));\n const orLR = (): PieceSet => m.or(m.moves([\"L\", \"R\"]));\n const M = (): PieceSet => m.not(orLR());\n\n const F2L = (): PieceSet => m.not(LL());\n\n const CENTERS = (): PieceSet => m.orbitPrefix(\"CENTER\");\n const EDGES = (): PieceSet => m.orbitPrefix(\"EDGE\");\n const CORNERS = (): PieceSet =>\n m.or([\n m.orbitPrefix(\"CORNER\"),\n m.orbitPrefix(\"C4RNER\"),\n m.orbitPrefix(\"C5RNER\"),\n ]);\n\n const L6E = (): PieceSet => m.or([M(), m.and([LL(), EDGES()])]);\n const centerLL = (): PieceSet => m.and([LL(), CENTERS()]);\n\n const edgeFR = (): PieceSet => m.and([m.and(m.moves([\"F\", \"R\"])), EDGES()]);\n const cornerDFR = (): PieceSet =>\n m.and([m.and(m.moves([\"F\", \"R\"])), CORNERS(), m.not(LL())]);\n const slotFR = (): PieceSet => m.or([cornerDFR(), edgeFR()]);\n\n function dimF2L(): void {\n puzzleStickering.set(F2L(), PieceStickering.Dim);\n }\n\n function setPLL(): void {\n puzzleStickering.set(LL(), PieceStickering.PermuteNonPrimary);\n puzzleStickering.set(centerLL(), PieceStickering.Dim); // For PG\n }\n\n function setOLL(): void {\n puzzleStickering.set(LL(), PieceStickering.IgnoreNonPrimary);\n puzzleStickering.set(centerLL(), PieceStickering.Regular); // For PG\n }\n\n function dimOLL(): void {\n puzzleStickering.set(LL(), PieceStickering.Ignoriented);\n puzzleStickering.set(centerLL(), PieceStickering.Dim); // For PG\n }\n\n switch (stickering) {\n case \"full\":\n break;\n case \"PLL\": {\n dimF2L();\n setPLL();\n break;\n }\n case \"CLS\": {\n dimF2L();\n puzzleStickering.set(cornerDFR(), PieceStickering.Regular);\n puzzleStickering.set(LL(), PieceStickering.Ignoriented);\n puzzleStickering.set(m.and([LL(), CENTERS()]), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([LL(), CORNERS()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n }\n case \"OLL\": {\n dimF2L();\n setOLL();\n break;\n }\n case \"EOLL\": {\n dimF2L();\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n break;\n }\n case \"COLL\": {\n dimF2L();\n puzzleStickering.set(m.and([LL(), EDGES()]), PieceStickering.Ignoriented);\n puzzleStickering.set(m.and([LL(), CENTERS()]), PieceStickering.Dim);\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n }\n case \"OCLL\": {\n dimF2L();\n dimOLL();\n puzzleStickering.set(\n m.and([LL(), CORNERS()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n }\n case \"CPLL\": {\n dimF2L();\n puzzleStickering.set(\n m.and([CORNERS(), LL()]),\n PieceStickering.PermuteNonPrimary,\n );\n puzzleStickering.set(\n m.and([m.not(CORNERS()), LL()]),\n PieceStickering.Dim,\n );\n break;\n }\n case \"CLL\": {\n dimF2L();\n puzzleStickering.set(\n m.not(m.and([CORNERS(), LL()])),\n PieceStickering.Dim,\n );\n break;\n }\n case \"EPLL\": {\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([LL(), EDGES()]),\n PieceStickering.PermuteNonPrimary,\n );\n break;\n }\n case \"ELL\": {\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.Dim);\n puzzleStickering.set(m.and([LL(), EDGES()]), PieceStickering.Regular);\n break;\n }\n case \"ELS\": {\n dimF2L();\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n puzzleStickering.set(edgeFR(), PieceStickering.Regular);\n puzzleStickering.set(cornerDFR(), PieceStickering.Ignored);\n break;\n }\n case \"LL\": {\n dimF2L();\n break;\n }\n case \"F2L\": {\n puzzleStickering.set(LL(), PieceStickering.Ignored);\n break;\n }\n case \"ZBLL\": {\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.PermuteNonPrimary);\n puzzleStickering.set(centerLL(), PieceStickering.Dim); // For PG\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n }\n case \"ZBLS\": {\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n break;\n }\n case \"VLS\": {\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n setOLL();\n break;\n }\n case \"WVLS\": {\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n puzzleStickering.set(m.and([LL(), EDGES()]), PieceStickering.Ignoriented);\n puzzleStickering.set(m.and([LL(), CENTERS()]), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([LL(), CORNERS()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n }\n case \"LS\": {\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n puzzleStickering.set(LL(), PieceStickering.Ignored);\n puzzleStickering.set(centerLL(), PieceStickering.Dim);\n break;\n }\n case \"EO\": {\n puzzleStickering.set(CORNERS(), PieceStickering.Ignored);\n puzzleStickering.set(\n EDGES(),\n PieceStickering.OrientationWithoutPermutation,\n );\n break;\n }\n case \"EOline\": {\n puzzleStickering.set(CORNERS(), PieceStickering.Ignored);\n puzzleStickering.set(\n EDGES(),\n PieceStickering.OrientationWithoutPermutation,\n );\n puzzleStickering.set(m.and(m.moves([\"D\", \"M\"])), PieceStickering.Regular);\n break;\n }\n case \"EOcross\": {\n puzzleStickering.set(\n EDGES(),\n PieceStickering.OrientationWithoutPermutation,\n );\n puzzleStickering.set(m.move(\"D\"), PieceStickering.Regular);\n puzzleStickering.set(CORNERS(), PieceStickering.Ignored);\n break;\n }\n case \"CMLL\": {\n puzzleStickering.set(F2L(), PieceStickering.Dim);\n puzzleStickering.set(L6E(), PieceStickering.Ignored);\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n }\n case \"L10P\": {\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n puzzleStickering.set(m.and([CORNERS(), LL()]), PieceStickering.Regular);\n break;\n }\n case \"L6E\": {\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n break;\n }\n case \"L6EO\": {\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n puzzleStickering.set(\n L6E(),\n PieceStickering.OrientationWithoutPermutation,\n );\n puzzleStickering.set(\n m.and([CENTERS(), orUD()]),\n PieceStickering.OrientationStickers,\n ); // For PG\n break;\n }\n case \"Daisy\": {\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(CENTERS(), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([m.move(\"D\"), CENTERS()]),\n PieceStickering.Regular,\n );\n puzzleStickering.set(\n m.and([m.move(\"U\"), EDGES()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n }\n case \"Cross\": {\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(CENTERS(), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([m.move(\"D\"), CENTERS()]),\n PieceStickering.Regular,\n );\n puzzleStickering.set(\n m.and([m.move(\"D\"), EDGES()]),\n PieceStickering.Regular,\n );\n break;\n }\n case \"2x2x2\": {\n puzzleStickering.set(\n m.or(m.moves([\"U\", \"F\", \"R\"])),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(\n m.and([m.or(m.moves([\"U\", \"F\", \"R\"])), CENTERS()]),\n PieceStickering.Dim,\n );\n break;\n }\n case \"2x2x3\": {\n puzzleStickering.set(m.all(), PieceStickering.Dim);\n puzzleStickering.set(\n m.or(m.moves([\"U\", \"F\", \"R\"])),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(\n m.and([m.or(m.moves([\"U\", \"F\", \"R\"])), CENTERS()]),\n PieceStickering.Dim,\n );\n puzzleStickering.set(\n m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"R\"])))]),\n PieceStickering.Regular,\n );\n break;\n }\n case \"L2C\": {\n puzzleStickering.set(\n m.or(m.moves([\"L\", \"R\", \"B\", \"D\"])),\n PieceStickering.Dim,\n );\n puzzleStickering.set(m.not(CENTERS()), PieceStickering.Ignored);\n break;\n }\n case \"PBL\": {\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(\n m.or(m.moves([\"U\", \"D\"])),\n PieceStickering.PermuteNonPrimary,\n );\n break;\n }\n case \"Void Cube\": {\n puzzleStickering.set(CENTERS(), PieceStickering.Invisible);\n break;\n }\n case \"picture\":\n // fallthrough\n case \"invisible\": {\n puzzleStickering.set(m.all(), PieceStickering.Invisible);\n break;\n }\n case \"centers-only\": {\n puzzleStickering.set(m.not(CENTERS()), PieceStickering.Ignored);\n break;\n }\n default:\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n puzzleStickering.set(m.and(m.moves([])), PieceStickering.Dim);\n }\n return puzzleStickering.toStickeringMask();\n}\n\nexport async function cubeLikeStickeringList(\n puzzleID: PuzzleID,\n options?: { use3x3x3Fallbacks: boolean },\n): Promise<ExperimentalStickering[]> {\n const stickerings: ExperimentalStickering[] = [];\n const stickeringsFallback: ExperimentalStickering[] = [];\n for (const [name, info] of Object.entries(experimentalStickerings)) {\n if (info.groups) {\n if (puzzleID in info.groups) {\n stickerings.push(name);\n } else if (options?.use3x3x3Fallbacks && \"3x3x3\" in info.groups) {\n stickeringsFallback.push(name);\n }\n }\n }\n return stickerings.concat(stickeringsFallback);\n}\n", "export function getCached<T>(getValue: () => Promise<T>): () => Promise<T> {\n let cachedPromise: Promise<T> | null = null;\n return (): Promise<T> => {\n return (cachedPromise ??= getValue());\n };\n}\n", "// @ts-nocheck\n\nexport class PLazy<T> extends Promise<T> {\n constructor(executor) {\n super((resolve) => {\n resolve();\n });\n\n this._executor = executor;\n }\n\n static from(function_) {\n return new PLazy((resolve) => {\n resolve(function_());\n });\n }\n\n static resolve(value) {\n return new PLazy((resolve) => {\n resolve(value);\n });\n }\n\n static reject(error) {\n return new PLazy((_resolve, reject) => {\n reject(error);\n });\n }\n\n then(onFulfilled, onRejected) {\n this._promise = this._promise || new Promise(this._executor);\n\n return this._promise.then(onFulfilled, onRejected);\n }\n\n catch(onRejected) {\n this._promise = this._promise || new Promise(this._executor);\n\n return this._promise.catch(onRejected);\n }\n}\n\nexport function from<T>(function_): Promise<T> {\n return new PLazy((resolve) => {\n resolve(function_());\n });\n}\n", "import { KPuzzle, type KPuzzleDefinition } from \"../../kpuzzle\";\nimport type { PuzzleGeometry } from \"../../puzzle-geometry\";\nimport type { ExperimentalStickering, PuzzleID } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport type { StickeringMask } from \"../stickerings/mask\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"../stickerings/cube-like-stickerings\";\nimport { getCached } from \"./lazy-cached\";\nimport {\n Move,\n type PuzzleSpecificSimplifyOptions,\n QuantumMove,\n} from \"../../alg\";\nimport { PLazy } from \"../../vendor/mit/p-lazy/p-lazy\";\n\n// TODO: modify this to handle TwistyPlayer options\nexport async function asyncGetPuzzleGeometry(\n puzzleName: string,\n): Promise<PuzzleGeometry> {\n const puzzleGeometry = await import(\"../../puzzle-geometry\");\n return puzzleGeometry.getPuzzleGeometryByName(puzzleName, {\n allMoves: true,\n orientCenters: true,\n addRotations: true,\n });\n}\n\n// TODO: can we cache the puzzleGeometry to avoid duplicate calls, without\n// wasting memory? Maybe just save the latest one for successive calls about the\n// same puzzle?\nexport async function asyncGetKPuzzle(\n pgPromise: Promise<PuzzleGeometry>,\n puzzleName: string,\n): Promise<KPuzzle> {\n const pg = await pgPromise;\n const kpuzzleDefinition: KPuzzleDefinition = pg.getKPuzzleDefinition(true);\n kpuzzleDefinition.name = puzzleName;\n const puzzleGeometry = await import(\"../../puzzle-geometry\");\n const pgNotation = new puzzleGeometry.ExperimentalPGNotation(\n pg,\n pg.getOrbitsDef(true),\n );\n return new KPuzzle(pgNotation.remapKPuzzleDefinition(kpuzzleDefinition), {\n experimentalPGNotation: pgNotation,\n });\n}\n\nexport function asyncLazyKPuzzleGetter(\n pgPromise: Promise<PuzzleGeometry>,\n puzzleName: string,\n): () => Promise<KPuzzle> {\n return getCached(() => asyncGetKPuzzle(pgPromise, puzzleName));\n}\n\ntype PuzzleLoaderConstructorArgs = {\n pgID?: string;\n id: string;\n fullName: string;\n inventedBy?: string[];\n inventionYear?: number;\n};\n\nexport class PGPuzzleLoader implements PuzzleLoader {\n pgId?: string;\n id: string;\n fullName: string;\n inventedBy?: string[];\n inventionYear?: number;\n constructor(info: PuzzleLoaderConstructorArgs) {\n this.pgId = info.pgID;\n this.id = info.id;\n this.fullName = info.fullName;\n this.inventedBy = info.inventedBy;\n this.inventionYear = info.inventionYear;\n }\n\n #cachedPG: Promise<PuzzleGeometry> | undefined;\n pg(): Promise<PuzzleGeometry> {\n return (this.#cachedPG ??= asyncGetPuzzleGeometry(this.pgId ?? this.id));\n }\n\n #cachedKPuzzle: Promise<KPuzzle> | undefined;\n kpuzzle(): Promise<KPuzzle> {\n return (this.#cachedKPuzzle ??= asyncGetKPuzzle(this.pg(), this.id));\n }\n\n #cachedSVG: Promise<string> | undefined;\n svg(): Promise<string> {\n return (this.#cachedSVG ??= (async () =>\n (await this.pg()).generatesvg())());\n }\n\n puzzleSpecificSimplifyOptionsPromise = puzzleSpecificSimplifyOptionsPromise(\n this.kpuzzle.bind(this),\n );\n}\n\nexport class CubePGPuzzleLoader extends PGPuzzleLoader {\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return cubeLikeStickeringMask(this, stickering);\n }\n stickerings = () =>\n cubeLikeStickeringList(this.id as PuzzleID, { use3x3x3Fallbacks: true });\n}\n\nexport function puzzleSpecificSimplifyOptionsPromise(\n kpuzzlePromiseFn: () => Promise<KPuzzle>,\n): Promise<PuzzleSpecificSimplifyOptions> {\n return new PLazy(\n async (resolve: (options: PuzzleSpecificSimplifyOptions) => void) => {\n const kpuzzle = await kpuzzlePromiseFn();\n resolve({\n quantumMoveOrder: (m: QuantumMove) => {\n return kpuzzle.moveToTransformation(new Move(m)).repetitionOrder();\n },\n });\n },\n );\n}\n", "import type { KPuzzleDefinition } from \"../../../../kpuzzle\";\n\nexport const cube3x3x3KPuzzleDefinition: KPuzzleDefinition = {\n name: \"3x3x3\",\n orbits: [\n { orbitName: \"EDGES\", numPieces: 12, numOrientations: 2 },\n { orbitName: \"CORNERS\", numPieces: 8, numOrientations: 3 },\n { orbitName: \"CENTERS\", numPieces: 6, numOrientations: 4 },\n ],\n defaultPattern: {\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 orientationMod: [1, 1, 1, 1, 1, 1],\n },\n },\n moves: {\n U: {\n EDGES: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11],\n orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 2, 3, 4, 1, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [2, 1, 2, 1, 1, 2, 1, 2],\n },\n CENTERS: {\n permutation: [2, 1, 5, 3, 0, 4],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 2, 1, 0, 2, 1, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [1, 0, 0, 2, 2, 1, 0, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [2, 1, 0, 0, 1, 0, 0, 2],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 2, 1, 0, 0, 0, 2, 1],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [1, 2, 1, 2, 2, 1, 2, 1],\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 2, 3, 4, 1, 5],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 2, 1, 0, 2, 1, 0],\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [1, 0, 0, 2, 2, 1, 0, 0],\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [2, 1, 0, 0, 1, 0, 0, 2],\n },\n CENTERS: {\n permutation: [2, 1, 5, 3, 0, 4],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 2, 1, 0, 0, 0, 2, 1],\n },\n CENTERS: {\n permutation: [3, 0, 2, 5, 4, 1],\n orientationDelta: [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 orientationDelta: [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 orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientationDelta: [0, 0, 0, 0, 0, 1],\n },\n },\n },\n derivedMoves: {\n Uw: \"u\",\n Lw: \"l\",\n Fw: \"f\",\n Rw: \"r\",\n Bw: \"b\",\n Dw: \"d\",\n\n Uv: \"y\",\n Lv: \"x'\",\n Fv: \"z\",\n Rv: \"x\",\n Bv: \"z'\",\n Dv: \"y'\",\n\n \"2U\": \"u U'\",\n \"2L\": \"l L'\",\n \"2F\": \"f F'\",\n \"2R\": \"r R'\",\n \"2B\": \"b B'\",\n \"2D\": \"d D'\",\n },\n};\n", "import type { PuzzleSpecificSimplifyOptions } from \"../alg\";\nimport type { AppendOptions } from \"../alg/simplify\";\nimport type { KPuzzle } from \"../kpuzzle\";\nimport type { PuzzleGeometry } from \"../puzzle-geometry\";\nimport type { ExperimentalStickering } from \"../twisty\";\nimport type { StickeringMask } from \"./stickerings/mask\";\n\nexport interface PuzzleLoader {\n id: string;\n // shortName?: string;\n fullName: string;\n inventedBy?: string[];\n inventionYear?: number; // TODO: date?\n /** @deprecated */\n def?: never;\n kpuzzle: () => Promise<KPuzzle>; // TODO\n svg: () => Promise<string>;\n llSVG?: () => Promise<string>;\n pg?: () => Promise<PuzzleGeometry>;\n stickeringMask?: (\n stickering: ExperimentalStickering,\n ) => Promise<StickeringMask>;\n stickerings?: () => Promise<ExperimentalStickering[]>;\n puzzleSpecificSimplifyOptions?: PuzzleSpecificSimplifyOptions;\n puzzleSpecificSimplifyOptionsPromise?: Promise<PuzzleSpecificSimplifyOptions>; // TODO\n}\n\n// TODO: consolidate the `puzzleSpecificSimplifyOptionsPromise` with `puzzleSpecificSimplifyOptions` somehow, so that we don't have to do this.\nexport async function getPartialAppendOptionsForPuzzleSpecificSimplifyOptions(\n puzzleLoader: PuzzleLoader,\n): Promise<AppendOptions> {\n const puzzleSpecificSimplifyOptions =\n await (puzzleLoader.puzzleSpecificSimplifyOptions ??\n puzzleLoader.puzzleSpecificSimplifyOptionsPromise);\n if (!puzzleSpecificSimplifyOptions) {\n return {};\n }\n return { puzzleLoader: { puzzleSpecificSimplifyOptions } };\n}\n", "import { Alg } from \"../../../../alg\";\nimport type { KPuzzle, KPattern, KTransformation } from \"../../../../kpuzzle\";\n\nexport function puzzleOrientation2x2x2Idx(state: KPattern): number {\n const inverse = state.experimentalToTransformation()!.invert();\n\n const inverseDFL = inverse.transformationData[\"CORNERS\"];\n return inverseDFL.permutation[6] * 3 + inverseDFL.orientationDelta[6];\n}\n\nconst puzzleOrientationCacheRaw: {\n transformation: KTransformation;\n alg: Alg;\n}[] = new Array<KTransformation>(24) as any;\n\nconst puzzleOrientationCacheInitialized = false;\n// We rely on the (first) caller to pass in the `KPuzzle`, so that we don't need to get our own synchronous reference.\nexport function puzzleOrientation2x2x2Cache(\n kpuzzle: KPuzzle,\n): typeof puzzleOrientationCacheRaw {\n if (!puzzleOrientationCacheInitialized) {\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 = kpuzzle.algToTransformation(uAlg);\n for (let i = 0; i < 4; i++) {\n transformation = transformation.applyAlg(yAlg);\n const idx = puzzleOrientation2x2x2Idx(transformation.toKPattern());\n puzzleOrientationCacheRaw[idx] = {\n transformation: transformation.invert(),\n alg: uAlg.concat(yAlg),\n };\n }\n }\n }\n }\n return puzzleOrientationCacheRaw;\n}\n\nexport function normalize2x2x2Orientation(state: KPattern): {\n normalizedState: KPattern;\n normalizationAlg: Alg;\n} {\n const idx = puzzleOrientation2x2x2Idx(state);\n const { transformation, alg } = puzzleOrientation2x2x2Cache(state.kpuzzle)[\n idx\n ];\n return {\n normalizedState: state.applyTransformation(transformation),\n normalizationAlg: alg.invert(),\n };\n}\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 experimentalIs2x2x2Solved(\n state: KPattern,\n options: {\n ignorePuzzleOrientation: boolean;\n },\n): boolean {\n if (options.ignorePuzzleOrientation) {\n state = normalize2x2x2Orientation(state).normalizedState;\n }\n return !!state.experimentalToTransformation()!.isIdentityTransformation(); // TODO: Compare to start state instead?\n}\n", "import { KPuzzle } from \"../kpuzzle\";\nimport type { PuzzleGeometry } from \"../puzzle-geometry\";\nimport type { PuzzleDescriptionString } from \"../puzzle-geometry/PGPuzzles\";\nimport {\n asyncGetKPuzzle,\n puzzleSpecificSimplifyOptionsPromise,\n} from \"./async/async-pg3d\";\nimport type { PuzzleLoader } from \"./PuzzleLoader\";\n\n// TODO: modify this to handle TwistyPlayer options\nexport async function descAsyncGetPuzzleGeometry(\n desc: PuzzleDescriptionString,\n options?: { includeCenterOrbits?: boolean; includeEdgeOrbits?: boolean },\n): Promise<PuzzleGeometry> {\n const puzzleGeometry = await import(\"../puzzle-geometry\");\n return puzzleGeometry.getPuzzleGeometryByDesc(desc, {\n allMoves: true,\n orientCenters: true,\n addRotations: true,\n ...options,\n });\n}\n\nexport async function asyncGetKPuzzleByDesc(\n desc: PuzzleDescriptionString,\n options?: { includeCenterOrbits?: boolean; includeEdgeOrbits?: boolean },\n): Promise<KPuzzle> {\n const pgPromise = descAsyncGetPuzzleGeometry(desc, options);\n return asyncGetKPuzzle(pgPromise, `description: ${desc}`);\n}\n\n// TODO: Can we avoid relying on IDs to deduplicate work at higher levels?\nlet nextCustomID = 1;\n\nexport function customPGPuzzleLoader(\n desc: PuzzleDescriptionString,\n info?: {\n fullName?: string;\n inventedBy?: string[];\n inventionYear?: number;\n },\n): PuzzleLoader {\n const customID = nextCustomID++;\n let cachedKPuzzle: Promise<KPuzzle> | null = null;\n const kpuzzlePromiseFn = async () => {\n return (cachedKPuzzle ??= asyncGetKPuzzleByDesc(desc));\n };\n const puzzleLoader: PuzzleLoader = {\n id: `custom-${customID}`,\n fullName: info?.fullName ?? `Custom Puzzle (instance #${customID})`,\n kpuzzle: kpuzzlePromiseFn,\n svg: async () => {\n const pg = await descAsyncGetPuzzleGeometry(desc);\n return pg.generatesvg();\n },\n pg: async () => {\n return descAsyncGetPuzzleGeometry(desc);\n },\n puzzleSpecificSimplifyOptionsPromise:\n puzzleSpecificSimplifyOptionsPromise(kpuzzlePromiseFn),\n };\n if (info?.inventedBy) {\n puzzleLoader.inventedBy = info.inventedBy;\n }\n if (info?.inventionYear) {\n puzzleLoader.inventionYear = info.inventionYear;\n }\n return puzzleLoader;\n}\n", "import { KPuzzle } from \"../../kpuzzle\";\nimport { cube3x3x3KPuzzleDefinition as experimentalCube3x3x3KPuzzleDefinition } from \"../implementations/dynamic/3x3x3/3x3x3.kpuzzle.json\";\nimport { experimentalIs3x3x3Solved } from \"../implementations/dynamic/3x3x3/puzzle-orientation\";\nexport { getPartialAppendOptionsForPuzzleSpecificSimplifyOptions } from \"../PuzzleLoader\";\nexport { experimentalCube3x3x3KPuzzleDefinition };\n\n/** @deprecated */\nexport const experimental3x3x3KPuzzle = new KPuzzle(\n experimentalCube3x3x3KPuzzleDefinition,\n);\nexperimentalCube3x3x3KPuzzleDefinition.experimentalIsStateSolved =\n experimentalIs3x3x3Solved;\n\nexport {\n experimentalIs3x3x3Solved,\n normalize3x3x3Orientation as experimentalNormalize3x3x3Orientation,\n puzzleOrientation3x3x3Cache as experimentalPuzzleOrientation3x3x3Cache,\n puzzleOrientation3x3x3Idx as experimentalPuzzleOrientation3x3x3Idx,\n} from \"../implementations/dynamic/3x3x3/puzzle-orientation\"; // TODO: Actually dynamic\nexport { experimentalStickerings } from \"../stickerings/puzzle-stickerings\";\n\nexport {\n experimentalIs2x2x2Solved,\n normalize2x2x2Orientation as experimentalNormalize2x2x2Orientation,\n puzzleOrientation2x2x2Cache as experimentalPuzzleOrientation2x2x2Cache,\n puzzleOrientation2x2x2Idx as experimentalPuzzleOrientation2x2x2Idx,\n} from \"../implementations/dynamic/2x2x2/puzzle-orientation\"; // TODO: Actually dynamic\n\nexport { customPGPuzzleLoader as experimentalCustomPGPuzzleLoader } from \"../customPGPuzzleLoader\";\nexport { getFaceletStickeringMask as experimentalGetFaceletStickeringMask } from \"../stickerings/mask\";\nexport type {\n PieceStickeringMask as ExperimentalPieceStickeringMask,\n FaceletMeshStickeringMask as ExperimentalFaceletMeshStickeringMask,\n StickeringMask as ExperimentalStickeringMask,\n} from \"../stickerings/mask\";\nexport {\n getPieceStickeringMask as experimentalGetPieceStickeringMask,\n PieceStickering as ExperimentalPieceStickering,\n} from \"../stickerings/mask\";\n", "import { Alg } from \"../../../../alg\";\nimport { KPattern, KTransformation } from \"../../../../kpuzzle\";\nimport { experimental3x3x3KPuzzle } from \"../../../cubing-private\";\n\nexport function puzzleOrientation3x3x3Idx(state: KPattern): [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;\nexport function puzzleOrientation3x3x3Cache(): 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] = puzzleOrientation3x3x3Idx(\n transformation.toKPattern(),\n );\n puzzleOrientationCacheRaw[idxU][idxL] = transformation.invert();\n }\n }\n }\n }\n return puzzleOrientationCacheRaw;\n}\n\nexport function normalize3x3x3Orientation(state: KPattern): KPattern {\n const [idxU, idxL] = puzzleOrientation3x3x3Idx(state);\n const orientationTransformation = puzzleOrientation3x3x3Cache()[idxU][idxL];\n return state.applyTransformation(orientationTransformation);\n}\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: KPattern,\n options: {\n ignorePuzzleOrientation: boolean;\n ignoreCenterOrientation: boolean;\n },\n): boolean {\n if (options.ignorePuzzleOrientation) {\n state = normalize3x3x3Orientation(state);\n }\n // TODO(orientationMod)\n if (options.ignoreCenterOrientation) {\n state = new KPattern(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"],
5
+ "mappings": "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",
6
+ "names": ["pieceStickerings", "LL", "puzzleOrientationCacheRaw", "puzzleOrientationCacheInitialized"]
7
+ }
@@ -7,22 +7,22 @@ import {
7
7
  random333Scramble,
8
8
  setIsInsideWorker,
9
9
  solve333
10
- } from "./chunk-TKIXG2EX.js";
10
+ } from "./chunk-LWPMAFQX.js";
11
11
  import {
12
12
  countMoves
13
- } from "./chunk-45VMKYXT.js";
13
+ } from "./chunk-VRFVPBCT.js";
14
14
  import {
15
15
  cube2x2x2,
16
16
  puzzles
17
- } from "./chunk-ZILJKTYP.js";
17
+ } from "./chunk-BTVDGT5H.js";
18
18
  import {
19
19
  from,
20
20
  normalize2x2x2Orientation
21
- } from "./chunk-NBVZ7LEM.js";
21
+ } from "./chunk-SNYTAYI2.js";
22
22
  import {
23
- KPuzzle,
24
- KState
25
- } from "./chunk-F6V2QBMP.js";
23
+ KPattern,
24
+ KPuzzle
25
+ } from "./chunk-F72PPD54.js";
26
26
  import {
27
27
  Alg,
28
28
  AlgBuilder,
@@ -135,7 +135,7 @@ var TrembleSolver = class {
135
135
  const loc = cubieSeq[i];
136
136
  const orbitName = loc.orbitName;
137
137
  const idx = loc.permutationIdx;
138
- key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientation[idx]}`;
138
+ key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;
139
139
  }
140
140
  const info = step.lookup[key];
141
141
  if (!info) {
@@ -151,7 +151,7 @@ var TrembleSolver = class {
151
151
  const location = cubieSeq[i];
152
152
  const orbitName = location.orbitName;
153
153
  const idx = location.permutationIdx;
154
- if (transformation.transformationData[orbitName].permutation[idx] !== idx || transformation.transformationData[orbitName].orientation[idx] !== 0) {
154
+ if (transformation.transformationData[orbitName].permutation[idx] !== idx || transformation.transformationData[orbitName].orientationDelta[idx] !== 0) {
155
155
  throw new Error("bad SGS :-(");
156
156
  }
157
157
  }
@@ -168,14 +168,14 @@ function randomStateFromSGS(kpuzzle, sgs) {
168
168
  sgsAction.transformation
169
169
  );
170
170
  }
171
- return transformation.toKState();
171
+ return transformation.toKPattern();
172
172
  }
173
173
 
174
174
  // src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts
175
- var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-LBEIUPJE.js"));
175
+ var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-7RLPMUUQ.js"));
176
176
 
177
177
  // src/cubing/search/inside/solve/twsearch.ts
178
- var twsearchPromise = from(async () => import("./twsearch-ZALDQ4TE.js"));
178
+ var twsearchPromise = from(async () => import("./twsearch-D6TM63UU.js"));
179
179
  var existingPuzzleDefString;
180
180
  var existingMoveSubsetString;
181
181
  function mustBeNaturalNumber(meaning, n) {
@@ -321,21 +321,21 @@ async function solve222ForScramble(state) {
321
321
  }
322
322
  function mutatingRandomizeOrbit(kpuzzle, orbitName, state, options) {
323
323
  randomPermuteInPlace(state.stateData[orbitName].pieces);
324
- const orbitDef = kpuzzle.definition.orbits[orbitName];
324
+ const orbitDefinition = kpuzzle.lookupOrbitDefinition(orbitName);
325
325
  const ori = state.stateData[orbitName].orientation;
326
326
  let sum = 0;
327
- for (let i = 0; i < orbitDef.numPieces; i++) {
328
- const o = randomUIntBelow(orbitDef.numOrientations);
327
+ for (let i = 0; i < orbitDefinition.numPieces; i++) {
328
+ const o = randomUIntBelow(orbitDefinition.numOrientations);
329
329
  ori[i] = o;
330
330
  sum += o;
331
331
  }
332
332
  if (options && "orientationSum" in options) {
333
- ori[0] = ((ori[0] + options.orientationSum - sum) % orbitDef.numOrientations + orbitDef.numOrientations) % orbitDef.numOrientations;
333
+ ori[0] = ((ori[0] + options.orientationSum - sum) % orbitDefinition.numOrientations + orbitDefinition.numOrientations) % orbitDefinition.numOrientations;
334
334
  }
335
335
  }
336
336
  async function random222State() {
337
337
  const kpuzzle = await puzzles["2x2x2"].kpuzzle();
338
- const stateCopy = new KState(
338
+ const stateCopy = new KPattern(
339
339
  kpuzzle,
340
340
  structuredClone(kpuzzle.startState().stateData)
341
341
  );
@@ -350,7 +350,7 @@ async function random222Scramble() {
350
350
  console.info("Filtered out a 2x2x2 state!");
351
351
  state = await random222State();
352
352
  }
353
- const inverseState = state.experimentalToTransformation().invert().toKState();
353
+ const inverseState = state.experimentalToTransformation().invert().toKPattern();
354
354
  let sol = await solve222ForScramble(inverseState);
355
355
  while (isCancelling(sol)) {
356
356
  sol = await solve222ForScramble(inverseState);
@@ -359,7 +359,7 @@ async function random222Scramble() {
359
359
  }
360
360
 
361
361
  // src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts
362
- var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-EJB3WWMV.js"));
362
+ var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-IP6UC7HF.js"));
363
363
 
364
364
  // src/cubing/search/inside/solve/puzzles/4x4x4.ts
365
365
  var randomSuffixes = [
@@ -452,7 +452,7 @@ async function oriented555RandomMoves() {
452
452
  var dynamicFTOSolver = from(() => import("./search-dynamic-solve-fto-GGEYM3K6.js"));
453
453
 
454
454
  // src/cubing/search/inside/solve/puzzles/fto.ts
455
- var dynamic = from(() => import("./search-dynamic-sgs-unofficial-PHDE4BVE.js"));
455
+ var dynamic = from(() => import("./search-dynamic-sgs-unofficial-IXO75L3Y.js"));
456
456
  async function randomFTOScramble() {
457
457
  mustBeInsideWorker();
458
458
  return new Alg(await (await dynamicFTOSolver).randomFTOScrambleString());
@@ -496,7 +496,7 @@ async function solveMegaminx(state) {
496
496
  const trembleSolver = await getCachedTrembleSolver2();
497
497
  const stateDataWithoutMO = structuredClone(state.stateData);
498
498
  stateDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);
499
- const stateWithoutMO = new KState(
499
+ const stateWithoutMO = new KPattern(
500
500
  await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),
501
501
  stateDataWithoutMO
502
502
  );
@@ -540,7 +540,7 @@ async function randomPyraminxScrambleFixedOrientation() {
540
540
  }
541
541
 
542
542
  // src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts
543
- var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-PHDE4BVE.js"));
543
+ var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-IXO75L3Y.js"));
544
544
 
545
545
  // src/cubing/search/inside/solve/puzzles/redi_cube.ts
546
546
  async function randomRediCubeScramble() {
@@ -562,7 +562,7 @@ async function getCachedTrembleSolver4() {
562
562
  })());
563
563
  }
564
564
  async function resetCenterOrientation(state) {
565
- return new KState(
565
+ return new KPattern(
566
566
  await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),
567
567
  {
568
568
  CORNERS: state.stateData.CORNERS,
@@ -767,23 +767,23 @@ var insideAPI = {
767
767
  return (await insideAPI.randomScrambleForEvent(eventID)).toString();
768
768
  },
769
769
  solve333ToString: async (stateData) => {
770
- const state = new KState(await puzzles["3x3x3"].kpuzzle(), stateData);
770
+ const state = new KPattern(await puzzles["3x3x3"].kpuzzle(), stateData);
771
771
  return (await solve333(state)).toString();
772
772
  },
773
773
  solve222ToString: async (stateData) => {
774
- const state = new KState(await puzzles["2x2x2"].kpuzzle(), stateData);
774
+ const state = new KPattern(await puzzles["2x2x2"].kpuzzle(), stateData);
775
775
  return (await solve222HTMSubOptimal(state)).toString();
776
776
  },
777
777
  solveSkewbToString: async (stateData) => {
778
- const state = new KState(await puzzles["skewb"].kpuzzle(), stateData);
778
+ const state = new KPattern(await puzzles["skewb"].kpuzzle(), stateData);
779
779
  return (await solveSkewb(state)).toString();
780
780
  },
781
781
  solvePyraminxToString: async (stateData) => {
782
- const state = new KState(await puzzles["pyraminx"].kpuzzle(), stateData);
782
+ const state = new KPattern(await puzzles["pyraminx"].kpuzzle(), stateData);
783
783
  return (await solvePyraminx(state)).toString();
784
784
  },
785
785
  solveMegaminxToString: async (stateData) => {
786
- const state = new KState(await puzzles["megaminx"].kpuzzle(), stateData);
786
+ const state = new KPattern(await puzzles["megaminx"].kpuzzle(), stateData);
787
787
  return (await solveMegaminx(state)).toString();
788
788
  },
789
789
  setDebugMeasurePerf: async (measure) => {
@@ -797,4 +797,4 @@ var insideAPI = {
797
797
  export {
798
798
  insideAPI
799
799
  };
800
- //# sourceMappingURL=chunk-NZAWY3EU.js.map
800
+ //# sourceMappingURL=chunk-UOO5TXR6.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../src/cubing/search/inside/solve/tremble.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts", "../../src/cubing/search/inside/solve/twsearch.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts", "../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../src/cubing/search/inside/solve/puzzles/big-cubes.ts", "../../src/cubing/search/inside/solve/puzzles/5x5x5.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts", "../../src/cubing/search/inside/solve/puzzles/fto.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts", "../../src/cubing/search/inside/solve/puzzles/kilominx.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts", "../../src/cubing/search/inside/solve/puzzles/master_tetraminx.ts", "../../src/cubing/search/inside/solve/puzzles/megaminx.ts", "../../src/cubing/search/inside/solve/puzzles/pyraminx.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts", "../../src/cubing/search/inside/solve/puzzles/redi_cube.ts", "../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../src/cubing/search/inside/solve/puzzles/dynamic/sq1/index.ts", "../../src/cubing/search/inside/solve/puzzles/sq1.ts", "../../src/cubing/search/inside/api.ts"],
4
+ "sourcesContent": ["import { Alg, Move } from \"../../../../alg\";\nimport type { KPuzzle } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { cube2x2x2, puzzles } from \"../../../../puzzles\";\nimport { randomPermuteInPlace, randomUIntBelow } from \"random-uint-below\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\nimport { solveTwsearch, twsearchPromise } from \"../twsearch\";\nimport { experimentalNormalize2x2x2Orientation } from \"../../../../puzzles/cubing-private\";\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgsCachedData: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedData222();\n return new TrembleSolver(\n await puzzles[\"2x2x2\"].kpuzzle(),\n sgsCachedData,\n \"URFLBD\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitialize222(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nexport async function solve222HTMSubOptimal(\n state: KPattern,\n maxDepth: number = 11,\n): Promise<Alg> {\n mustBeInsideWorker();\n return await solveTwsearch(\n (\n await cube2x2x2.kpuzzle()\n ).definition,\n state.stateData,\n {\n moveSubset: \"UFLR\".split(\"\"), // TODO: <U, F, R>\n maxDepth,\n },\n );\n}\n\n// TODO: fix def consistency.\n// TODO: why is this ending up with the wrong rotation sometimes?\nexport async function solve222HTMOptimal(\n state: KPattern,\n maxDepth: number = 11,\n): Promise<Alg> {\n mustBeInsideWorker();\n const { normalizedState, normalizationAlg } =\n experimentalNormalize2x2x2Orientation(state);\n const orientedResult = await solveTwsearch(\n (\n await cube2x2x2.kpuzzle()\n ).definition,\n normalizedState.stateData,\n {\n moveSubset: \"UFLR\".split(\"\"), // TODO: <U, F, R>\n maxDepth,\n },\n );\n return normalizationAlg.concat(orientedResult);\n}\n\nasync function hasHTMSolutionWithFewerMoves(\n state: KPattern,\n filterMin: number,\n): Promise<boolean> {\n try {\n (await solve222HTMOptimal(state, filterMin - 1)).log();\n return true;\n } catch (e) {\n if (e instanceof (await twsearchPromise).NoSolutionError) {\n return false;\n }\n throw e;\n }\n}\n\nfunction isCancelling(alg: Alg): boolean {\n let lastFamily: undefined | string;\n for (const node of alg.childAlgNodes()) {\n const move = node.as(Move);\n if (!move) {\n throw new Error(\"Unexpected solution with a non-move node!\");\n }\n const { family } = move;\n if (\n lastFamily &&\n ((lastFamily === \"L\" && family === \"R\") ||\n (lastFamily === \"R\" && family === \"L\"))\n ) {\n return true;\n }\n lastFamily = family;\n }\n return false;\n}\n\n// TODO: fix def consistency.\nexport async function solve222ForScramble(state: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return solveTwsearch(\n (await cube2x2x2.kpuzzle()).definition,\n state.stateData,\n {\n moveSubset: \"UFLR\".split(\"\"),\n minDepth: 11,\n },\n );\n}\n\n// TODO: factor out and test.\nfunction mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n state: KPattern,\n options?: { orientationSum?: number },\n): void {\n randomPermuteInPlace(state.stateData[orbitName].pieces);\n\n const orbitDefinition = kpuzzle.lookupOrbitDefinition(orbitName);\n const ori = state.stateData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n const o = randomUIntBelow(orbitDefinition.numOrientations);\n ori[i] = o;\n sum += o;\n }\n\n // console.log(\"aaaa\", options && \"orientationSum\" in options);\n if (options && \"orientationSum\" in options) {\n // console.log(\"sfdsf\", options!.orientationSum),\n ori[0] =\n (((ori[0] + options.orientationSum! - sum) %\n orbitDefinition.numOrientations) +\n orbitDefinition.numOrientations) %\n orbitDefinition.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222State(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const stateCopy: KPattern = new KPattern(\n kpuzzle,\n structuredClone(kpuzzle.startState().stateData),\n ); // TODO\n mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", stateCopy, {\n orientationSum: 0,\n });\n return stateCopy;\n}\n\nexport async function random222Scramble(): Promise<Alg> {\n let state = await random222State();\n while (await hasHTMSolutionWithFewerMoves(state, 4)) {\n console.info(\"Filtered out a 2x2x2 state!\");\n state = await random222State();\n }\n const inverseState = state\n .experimentalToTransformation()!\n .invert()\n .toKPattern(); // Note: Inversion is not needed for randomness, but it is more consistent with other code.\n let sol = await solve222ForScramble(inverseState);\n while (isCancelling(sol)) {\n // Rely on `--randomstart` to find us a non-cancelling with \u22482/3 probability.\n // TODO: Check that this works for 100% of states.\n sol = await solve222ForScramble(inverseState);\n }\n\n return sol;\n}\n", "import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../alg\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle\";\nimport type { KPattern } from \"../../../kpuzzle/KPattern\";\nimport { experimentalCountMoves } from \"../../../notation\";\nimport { randomChoice } from \"random-uint-below\";\nimport type { SGSCachedData } from \"./parseSGS\";\n\nconst DEFAULT_STAGE1_DEPTH_LIMIT = 2; // Moderately performant default.\n\nconst DOUBLECHECK_PLACED_PIECES = true;\nconst DEBUG = false;\n\n// TODO: Take moves instead of move names?\nfunction calculateMoves(\n kpuzzle: KPuzzle,\n moveNames: string[],\n): {\n move: Move;\n transformation: KTransformation;\n}[] {\n const searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[] = [];\n // const identity = identityTransformation(def); // TODO\n // TODO: Make it easy to filter moves.\n moveNames.forEach(function (moveName) {\n const rootMove = new Move(moveName);\n if (rootMove.amount !== 1) {\n throw new Error(\n \"SGS cannot handle def moves with an amount other than 1 yet.\",\n );\n }\n let transformation = kpuzzle.identityTransformation();\n for (let i = 1; true; i++) {\n transformation = transformation.applyMove(rootMove);\n if (transformation.isIdentityTransformation()) {\n break;\n }\n searchMoves.push({\n move: rootMove.modified({ amount: i }),\n transformation,\n });\n }\n });\n return searchMoves;\n}\n\n// function badRandomMoves(moves: string[], ksp: KSolvePuzzle): KSolvePuzzleState {\n// // var sum = 0;\n// var scramble = \"\";\n// for (var i = 0; i < 1000; i++) {\n// scramble = scramble + \" \" + moves[Math.floor(moves.length * Math.random())];\n// }\n// // var sol = \"\";\n// const indexer = new TreeAlgIndexer(ksp, Alg.fromString(scramble));\n// return indexer.transformAtIndex(indexer.numMoves()) as any; // TODO\n// }\n\nexport class TrembleSolver {\n private searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[];\n\n constructor(\n private kpuzzle: KPuzzle,\n private sgs: SGSCachedData,\n trembleMoveNames?: string[],\n ) {\n this.searchMoves = calculateMoves(\n this.kpuzzle,\n trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves),\n );\n }\n\n // public badRandomMoves(): KSolvePuzzleState {\n // return badRandomMoves(this.moves, this.ksp);\n // }\n\n public async solve(\n state: KPattern,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = state.experimentalToTransformation();\n if (!transformation) {\n throw new Error(\n \"distinguishable pieces are not supported in tremble solver yt\",\n );\n }\n let bestAlg: Alg | null = null;\n let bestLen = 1000000;\n const recur = (\n recursiveTransformation: KTransformation, // TODO: Support KStatq1\n togo: number,\n sofar: Alg,\n ) => {\n // console.log(\"recur\");\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);\n if (!sgsAlg) {\n return;\n }\n // console.log(\"sgs done!\", sofar.toString(), \"|\", sgsAlg.toString());\n const newAlg = sofar.concat(sgsAlg).experimentalSimplify({\n cancel: {\n directional: \"any-direction\",\n puzzleSpecificModWrap: \"canonical-centered\",\n },\n puzzleSpecificSimplifyOptions: { quantumMoveOrder },\n });\n\n const len = experimentalCountMoves(newAlg);\n if (bestAlg === null || len < bestLen) {\n if (DEBUG) {\n console.log(`New best (${len} moves): ${newAlg.toString()}`);\n console.log(`Tremble moves are: ${sofar.toString()}`);\n }\n bestAlg = newAlg;\n bestLen = len;\n }\n return;\n }\n for (const searchMove of this.searchMoves) {\n recur(\n recursiveTransformation.applyTransformation(\n searchMove.transformation,\n ),\n togo - 1,\n sofar.concat([searchMove.move]),\n );\n }\n };\n for (let d = 0; d <= stage1DepthLimit; d++) {\n recur(transformation, d, new Alg());\n }\n if (bestAlg === null) {\n throw new Error(\"SGS search failed.\");\n }\n return bestAlg;\n }\n\n private sgsPhaseSolve(\n initialTransformation: KTransformation, // TODO: Handle KPattern\n bestLenSofar: number,\n ): Alg | null {\n // const pieceNames = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\n\n // function loggo(s: string) {\n // // console.warn(s);\n // // document.body.appendChild(document.createElement(\"div\")).textContent = s;\n // }\n\n // console.log(\"sgsPhaseSolve\");\n const algBuilder = new AlgBuilder();\n let transformation = initialTransformation;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseTransformation = transformation.invert();\n for (let i = 0; i < cubieSeq.length; i++) {\n const loc = cubieSeq[i];\n const orbitName = loc.orbitName;\n const idx = loc.permutationIdx;\n key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;\n }\n // console.log(key, step.lookup);\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {\n return null;\n }\n transformation = transformation.applyTransformation(info.transformation);\n if (DOUBLECHECK_PLACED_PIECES) {\n for (let i = 0; i < cubieSeq.length; i++) {\n const location = cubieSeq[i];\n const orbitName = location.orbitName;\n const idx = location.permutationIdx;\n if (\n transformation.transformationData[orbitName].permutation[idx] !==\n idx ||\n transformation.transformationData[orbitName].orientationDelta[\n idx\n ] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport function randomStateFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): KPattern {\n let transformation = kpuzzle.identityTransformation();\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n transformation = transformation.applyTransformation(\n sgsAction.transformation,\n );\n }\n return transformation.toKPattern();\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const searchDynamicSideEvents = from<\n typeof import(\"./search-dynamic-sgs-side-events\")\n>(() => import(\"./search-dynamic-sgs-side-events\"));\n", "import type { Alg } from \"../../../alg\";\nimport {\n KPuzzle,\n type KPuzzleDefinition,\n type KPatternData,\n type KTransformationData,\n} from \"../../../kpuzzle\";\nimport { from } from \"../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const twsearchPromise: Promise<\n typeof import(\"../../../vendor/mpl/twsearch\")\n> = from(async () => import(\"../../../vendor/mpl/twsearch\"));\n\nexport interface TwsearchOptions {\n moveSubset?: string[];\n startState?: KTransformationData;\n minDepth?: number;\n maxDepth?: number;\n}\n\nlet existingPuzzleDefString: undefined | string;\nlet existingMoveSubsetString: undefined | string;\n\nfunction mustBeNaturalNumber(meaning: string, n: number): void {\n if (typeof n !== \"number\" || !Number.isInteger(n) || n < 0) {\n throw new Error(`Invalid ${meaning}: ${n}`);\n }\n}\n\nexport async function solveTwsearch(\n def: KPuzzleDefinition,\n stateData: KPatternData,\n options?: TwsearchOptions,\n): Promise<Alg> {\n const {\n setArg,\n setKPuzzleDefString,\n serializeDefToTws,\n solveState,\n serializeScrambleState,\n } = await twsearchPromise;\n const kpuzzle = new KPuzzle(def);\n setArg(\"--startprunedepth 5\"); // TODO\n let moveSubsetString = \"\"; // TODO: pass the full set of moves, to avoid rotations not being treated as moves.\n if (options) {\n if (options.moveSubset) {\n moveSubsetString = options?.moveSubset?.join(\",\");\n // TODO: better, reusable validation\n if (moveSubsetString.includes(\" \")) {\n throw new Error(\"A move contains a space\u203D\");\n }\n if (moveSubsetString.includes(\"-\")) {\n throw new Error(\"A move contains a dash\");\n }\n setArg(`--moves ${moveSubsetString}`); // TODO: remove the need for this.\n }\n let { minDepth, maxDepth } = options;\n if (typeof minDepth !== \"undefined\") {\n mustBeNaturalNumber(\"minDepth\", minDepth);\n if (typeof maxDepth !== \"undefined\") {\n mustBeNaturalNumber(\"maxDepth\", maxDepth);\n } else {\n maxDepth = 1000000;\n }\n\n setArg(\"--randomstart\");\n setArg(`--mindepth ${minDepth}`);\n setArg(`--maxdepth ${maxDepth}`);\n } else if (typeof maxDepth !== \"undefined\") {\n mustBeNaturalNumber(\"maxDepth\", maxDepth);\n setArg(\"--mindepth 0\");\n setArg(`--maxdepth ${maxDepth}`);\n }\n }\n\n const puzzleDefString = serializeDefToTws(kpuzzle, options);\n if (existingPuzzleDefString) {\n if (existingPuzzleDefString !== puzzleDefString) {\n throw new Error(\n \"Attempted to solve two puzzles in the same worker using `twsearch`. This is not currently supported!\",\n );\n }\n } else {\n existingPuzzleDefString = puzzleDefString;\n await setKPuzzleDefString(puzzleDefString);\n }\n\n if (\n typeof existingMoveSubsetString !== \"undefined\" &&\n moveSubsetString !== existingMoveSubsetString\n ) {\n throw new Error(\n \"Attempted to solve two different move subsets in the same worker using `twsearch`. This is not currently supported!\",\n );\n }\n\n return await solveState(serializeScrambleState(\"SearchState\", stateData));\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamic4x4x4Solver = from<\n typeof import(\"./search-dynamic-solve-4x4x4\")\n>(() => import(\"./search-dynamic-solve-4x4x4\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\nimport { dynamic4x4x4Solver } from \"./dynamic/4x4x4\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nexport async function initialize444(): Promise<void> {\n return (await dynamic4x4x4Solver).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n return (await dynamic4x4x4Solver).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../../alg\";\nimport { randomChoice, randomUIntBelow } from \"random-uint-below\";\n\nfunction numMoves(n: number): number {\n switch (n) {\n case 5:\n return 60;\n case 6:\n return 80;\n default:\n return 100;\n }\n}\n\nconst axesFaces = [\n [\"U\", \"D\"],\n [\"L\", \"R\"],\n [\"F\", \"B\"],\n];\nconst axesMovesCache: Map<number, QuantumMove[][]> = new Map();\nfunction cachedAxesMoves(n: number): QuantumMove[][] {\n const existing = axesMovesCache.get(n);\n if (existing) {\n return existing;\n }\n const axesMoves = [];\n for (const faces of axesFaces) {\n const axisMoveFamilies: QuantumMove[] = [];\n axesMoves.push(axisMoveFamilies);\n\n for (const face of faces) {\n axisMoveFamilies.push(new QuantumMove(face));\n if (n > 3) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`));\n }\n for (let i = 3; i <= n / 2; i++) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`, i));\n }\n }\n }\n axesMovesCache.set(n, axesMoves);\n return axesMoves;\n}\n\n// TODO: Document this algorithm and compare to TNoodle.\nexport async function bigCubeRandomMoves(n: number): Promise<Alg> {\n const axesMoves = cachedAxesMoves(n);\n\n const cachedNumMoves = numMoves(n);\n const algBuilder = new AlgBuilder();\n let currentAxisIdx = 0;\n const currentAxisQuantumMoves = new Set();\n while (algBuilder.experimentalNumAlgNodes() < cachedNumMoves) {\n const newAxisIdx = randomUIntBelow(3);\n if (newAxisIdx !== currentAxisIdx) {\n currentAxisQuantumMoves.clear();\n }\n currentAxisIdx = newAxisIdx;\n\n const quantumMove = randomChoice(axesMoves[currentAxisIdx]);\n const quantumMoveStr = quantumMove.toString();\n if (currentAxisQuantumMoves.has(quantumMoveStr)) {\n // Skip duplicates and resample with replacement.\n continue;\n }\n currentAxisQuantumMoves.add(quantumMoveStr);\n algBuilder.push(new Move(quantumMove, randomChoice([1, 2, -1])));\n }\n\n return algBuilder.toAlg();\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\nimport { bigCubeRandomMoves } from \"./big-cubes\";\n\nconst randomSuffixes = [\n [null, \"3Rw\", \"3Rw2\", \"3Rw'\", \"3Fw\", \"3Fw'\"],\n [null, \"3Dw\", \"3Dw2\", \"3Dw'\"],\n];\n\nexport async function oriented555RandomMoves(): Promise<Alg> {\n return addOrientationSuffix(await bigCubeRandomMoves(5), randomSuffixes);\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicFTOSolver = from<\n typeof import(\"./search-dynamic-solve-fto\")\n>(() => import(\"./search-dynamic-solve-fto\"));\n", "import { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { from } from \"../../../../vendor/mit/p-lazy/p-lazy\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { dynamicFTOSolver } from \"./dynamic/fto\";\n\nconst dynamic = from<\n typeof import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\")\n>(() => import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\"));\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (await dynamic).sgsDataFTO();\n return new TrembleSolver(await puzzles[\"fto\"].kpuzzle(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"D\",\n \"B\",\n \"BR\",\n \"BL\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeFTO(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveFTO(state: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n state,\n TREMBLE_DEPTH,\n () => 3, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomFTOScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(await (await dynamicFTOSolver).randomFTOScrambleString());\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicKilominxSolver = from<\n typeof import(\"./search-dynamic-solve-kilominx\")\n>(() => import(\"./search-dynamic-solve-kilominx\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicKilominxSolver } from \"./dynamic/kilominx\";\n\nexport async function randomKilominxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamicKilominxSolver).getRandomKilominxScramble();\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicMasterTetraminxSolver = from<\n typeof import(\"./search-dynamic-solve-master_tetraminx\")\n>(() => import(\"./search-dynamic-solve-master_tetraminx\"));\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicMasterTetraminxSolver } from \"./dynamic/master_tetraminx\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(\n await (\n await dynamicMasterTetraminxSolver\n ).randomMasterTetraminxScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPatternData } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedSGSDataMegaminx();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n json,\n [\"U\", \"R\", \"F\", \"L\", \"BR\", \"BL\", \"FR\", \"FL\", \"DR\", \"DL\", \"B\", \"D\"],\n );\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(state: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const stateDataWithoutMO: KPatternData = structuredClone(state.stateData);\n stateDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);\n const stateWithoutMO = new KPattern(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n stateDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n stateWithoutMO,\n TREMBLE_DEPTH,\n () => 5, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataPyraminx();\n return new TrembleSolver(\n await puzzles.pyraminx.kpuzzle(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializePyraminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nexport async function solvePyraminx(state: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxStateFixedOrientation(): Promise<KPattern> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await puzzles.pyraminx.kpuzzle(),\n await (await searchDynamicSideEvents).sgsDataPyraminxFixedOrientation(),\n );\n}\n\nexport async function randomPyraminxScrambleFixedOrientation(): Promise<Alg> {\n return solvePyraminx(await randomPyraminxStateFixedOrientation());\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const searchDynamicUnofficial = from<\n typeof import(\"./search-dynamic-sgs-unofficial\")\n>(() => import(\"./search-dynamic-sgs-unofficial\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { searchDynamicUnofficial } from \"./dynamic/sgs-unofficial\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await searchDynamicUnofficial).getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataSkewb();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nasync function resetCenterOrientation(state: KPattern): Promise<KPattern> {\n return new KPattern(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n {\n CORNERS: state.stateData.CORNERS,\n CENTERS: {\n pieces: state.stateData.CENTERS.pieces,\n orientation: new Array(6).fill(0),\n },\n },\n );\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(state: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n await resetCenterOrientation(state),\n TREMBLE_DEPTH,\n (quantumMove: QuantumMove) => (quantumMove.family === \"y\" ? 4 : 3), // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomSkewbFixedCornerState(): Promise<KPattern> {\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n await (await searchDynamicSideEvents).sgsDataSkewbFixedCorner(),\n );\n}\n\nexport async function randomSkewbFixedCornerScramble(): Promise<Alg> {\n return solveSkewb(await randomSkewbFixedCornerState());\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicSq1Solver = from<\n typeof import(\"./search-dynamic-solve-sq1\")\n>(() => import(\"./search-dynamic-solve-sq1\"));\n", "import { Alg } from \"../../../../alg\";\nimport { dynamicSq1Solver } from \"./dynamic/sq1\";\n\nexport async function getRandomSquare1Scramble(): Promise<Alg> {\n return Alg.fromString(\n await (await dynamicSq1Solver).getRandomSquare1ScrambleString(),\n );\n}\n", "import type { Alg } from \"../../alg\";\nimport {\n type KPuzzleDefinition,\n KPattern,\n type KPatternData,\n} from \"../../kpuzzle\";\nimport { puzzles } from \"../../puzzles\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport {\n preInitialize222,\n random222Scramble,\n solve222HTMSubOptimal,\n} from \"./solve/puzzles/2x2x2\";\nimport {\n initialize333,\n random333FewestMovesScramble,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4\";\nimport { oriented555RandomMoves } from \"./solve/puzzles/5x5x5\";\nimport { bigCubeRandomMoves } from \"./solve/puzzles/big-cubes\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto\";\nimport { randomKilominxScramble } from \"./solve/puzzles/kilominx\";\nimport { randomMasterTetraminxScramble } from \"./solve/puzzles/master_tetraminx\";\nimport { solveMegaminx } from \"./solve/puzzles/megaminx\";\nimport {\n randomPyraminxScrambleFixedOrientation,\n solvePyraminx,\n} from \"./solve/puzzles/pyraminx\";\nimport { randomRediCubeScramble } from \"./solve/puzzles/redi_cube\";\nimport {\n randomSkewbFixedCornerScramble,\n solveSkewb,\n} from \"./solve/puzzles/skewb\";\nimport { getRandomSquare1Scramble } from \"./solve/puzzles/sq1\";\nimport { solveTwsearch, type TwsearchOptions } from \"./solve/twsearch\";\n\nconst IDLE_PREFETCH_TIMEOUT_MS = 1000;\n\nsetIsInsideWorker(true);\n\nlet DEBUG_MEASURE_PERF = true;\nexport function setDebugMeasurePerf(newDebugMeasurePerf: boolean): void {\n DEBUG_MEASURE_PERF = newDebugMeasurePerf;\n}\n\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\n\nasync function measurePerf<T>(\n name: string,\n f: () => T | Promise<T>,\n options?: { isPrefetch?: boolean },\n): Promise<T> {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n\n const start = now();\n const result = f();\n if ((result as any)?.then) {\n await result;\n }\n const end = now();\n console.warn(\n `${name}${options?.isPrefetch ? \" (prefetched)\" : \"\"}: ${Math.round(\n end - start,\n )}ms`,\n );\n return result;\n}\n\nconst prefetchPromises: Map<string, Promise<Alg>> = new Map();\n// This would just be a number, except `node` is extremely silly and returns an object instead.\n// https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\nlet queuedPrefetchTimeoutID: ReturnType<typeof setTimeout> | null = null;\n\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"random222Scramble\", random222Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"333fm\":\n return measurePerf(\n \"random333FewestMovesScramble\",\n random333FewestMovesScramble,\n );\n case \"333bf\":\n case \"333mb\":\n return measurePerf(\n \"random333OrientedScramble\",\n random333OrientedScramble,\n );\n case \"444\":\n return measurePerf(\"random444Scramble\", random444Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"444bf\":\n return measurePerf(\n \"random444OrientedScramble\",\n random444OrientedScramble,\n );\n case \"555\":\n return measurePerf(\n \"bigCubeScramble(5)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 5),\n );\n case \"555bf\":\n return measurePerf(\"oriented555RandomMoves\", oriented555RandomMoves);\n case \"666\":\n return measurePerf(\n \"bigCubeScramble(6)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 6),\n );\n case \"777\":\n return measurePerf(\n \"bigCubeScramble(7)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 7),\n );\n case \"skewb\":\n return measurePerf(\n \"randomSkewbFixedCornerScramble\",\n randomSkewbFixedCornerScramble,\n );\n case \"pyram\":\n return measurePerf(\n \"randomPyraminxScrambleFixedOrientation\",\n randomPyraminxScrambleFixedOrientation,\n );\n case \"sq1\":\n return measurePerf(\"getRandomSquare1Scramble\", getRandomSquare1Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"master_tetraminx\":\n return measurePerf(\n \"randomMasterTetraminxScramble\",\n randomMasterTetraminxScramble,\n );\n case \"kilominx\":\n return measurePerf(\"randomKilominxScramble\", randomKilominxScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"redi_cube\":\n return measurePerf(\"randomRediCubeScramble\", randomRediCubeScramble, {\n isPrefetch: options?.isPrefetch,\n });\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n}\n\nexport enum PrefetchLevel {\n Auto = \"auto\",\n None = \"none\",\n Immediate = \"immediate\",\n}\n\nlet currentPrefetchLevel = PrefetchLevel.Auto;\n\nexport const insideAPI = {\n initialize: async (eventID: string) => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize444);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n setScramblePrefetchLevel(prefetchLevel: `${PrefetchLevel}`) {\n currentPrefetchLevel = prefetchLevel as PrefetchLevel;\n },\n\n randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n let promise = prefetchPromises.get(eventID);\n if (promise) {\n prefetchPromises.delete(eventID);\n } else {\n promise = randomScrambleForEvent(eventID);\n }\n if (currentPrefetchLevel !== PrefetchLevel.None) {\n promise.then(() => {\n // `queuedPrefetch` could be 0, but:\n // > Passing an invalid ID to clearTimeout() silently does nothing; no exception is thrown.\n // https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout#notes\n if (queuedPrefetchTimeoutID) {\n clearTimeout(queuedPrefetchTimeoutID);\n }\n queuedPrefetchTimeoutID = setTimeout(\n () => {\n prefetchPromises.set(\n eventID,\n randomScrambleForEvent(eventID, {\n isPrefetch: true,\n }),\n );\n },\n currentPrefetchLevel === PrefetchLevel.Immediate\n ? 0\n : IDLE_PREFETCH_TIMEOUT_MS,\n );\n });\n }\n return promise;\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n solve333ToString: async (stateData: KPatternData): Promise<string> => {\n const state = new KPattern(await puzzles[\"3x3x3\"].kpuzzle(), stateData);\n return (await solve333(state)).toString();\n },\n\n solve222ToString: async (stateData: KPatternData): Promise<string> => {\n const state = new KPattern(await puzzles[\"2x2x2\"].kpuzzle(), stateData);\n return (await solve222HTMSubOptimal(state)).toString();\n },\n\n solveSkewbToString: async (stateData: KPatternData): Promise<string> => {\n const state = new KPattern(await puzzles[\"skewb\"].kpuzzle(), stateData);\n return (await solveSkewb(state)).toString();\n },\n\n solvePyraminxToString: async (stateData: KPatternData): Promise<string> => {\n const state = new KPattern(await puzzles[\"pyraminx\"].kpuzzle(), stateData);\n return (await solvePyraminx(state)).toString();\n },\n\n solveMegaminxToString: async (stateData: KPatternData): Promise<string> => {\n const state = new KPattern(await puzzles[\"megaminx\"].kpuzzle(), stateData);\n return (await solveMegaminx(state)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n\n solveTwsearchToString: async (\n def: KPuzzleDefinition,\n stateData: KPatternData,\n options?: TwsearchOptions,\n ): Promise<string> => {\n return (await solveTwsearch(def, stateData, options)).toString();\n },\n};\n\nexport type WorkerInsideAPI = typeof insideAPI;\n"],
5
+ "mappings": "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",
6
+ "names": ["randomChoice", "randomUIntBelow", "randomSuffixes", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cube3x3x3KPuzzleDefinition
3
- } from "./chunk-NBVZ7LEM.js";
3
+ } from "./chunk-SNYTAYI2.js";
4
4
  import {
5
5
  TraversalUp,
6
6
  functionFromTraversal
@@ -42,9 +42,7 @@ function getCache() {
42
42
  cache = {};
43
43
  const moveQuantumStrings = [
44
44
  ...Object.keys(cube3x3x3KPuzzleDefinition.moves),
45
- ...Object.keys(
46
- cube3x3x3KPuzzleDefinition.experimentalDerivedMoves
47
- )
45
+ ...Object.keys(cube3x3x3KPuzzleDefinition.derivedMoves)
48
46
  ];
49
47
  for (const moveQuantumString of moveQuantumStrings) {
50
48
  cache[moveQuantumString] = uncachedMoveCount(moveQuantumString);
@@ -230,4 +228,4 @@ export {
230
228
  countMetricMoves,
231
229
  countAnimatedLeaves
232
230
  };
233
- //# sourceMappingURL=chunk-45VMKYXT.js.map
231
+ //# sourceMappingURL=chunk-VRFVPBCT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/notation/commonMetrics.ts", "../../src/cubing/notation/cube3x3x3Metrics.ts", "../../src/cubing/notation/CountMoves.ts", "../../src/cubing/notation/CountAnimatedLeaves.ts"],
4
+ "sourcesContent": ["export enum CommonMetric {\n // OBTM (Outer Block Turn Metric)\n OuterBlockTurnMetric = \"OBTM\",\n // RBTM (Range Block Turn Metric)\n RangeBlockTurnMetric = \"RBTM\",\n // SSTM (Single Slice Turn Metric)\n SingleSliceTurnMetric = \"SSTM\",\n // OBQTM (Outer Block Quantum Turn Metric)\n OuterBlockQuantumTurnMetric = \"OBQTM\",\n // RBQTM (Range Block Quantum Turn Metric)\n RangeBlockQuantumTurnMetric = \"RBQTM\",\n // SSQTM (Single Slice Quantum Turn Metric)\n SingleSliceQuantumTurnMetric = \"SSQTM\",\n ExecutionTurnMetric = \"ETM\",\n}\n\nexport enum CommonMetricAlias {\n // QTM (Quantum Turn Metric)\n QuantumTurnMetric = \"OBQTM\",\n // HTM (Hand Turn Metric)\n HandTurnMetric = \"OBTM\",\n // STM (Slice Turn Metric)\n SliceTurnMetric = \"RBTM\",\n}\n", "// TODO: move this into the 3x3x3 puzzle loader.\n\nimport type { Move } from \"../alg\";\nimport { experimentalCube3x3x3KPuzzleDefinition } from \"../puzzles/cubing-private\";\nimport { CommonMetric } from \"./commonMetrics\";\n\nenum MoveType {\n Rotation = \"Rotation\",\n Outer = \"Outer\",\n Inner = \"Inner\",\n}\n\nfunction uncachedMoveCount(moveQuantumString: string): MoveType {\n if (\n moveQuantumString.endsWith(\"v\") ||\n [\"x\", \"y\", \"z\"].includes(moveQuantumString)\n ) {\n // Rv\n return MoveType.Rotation;\n }\n if (\n moveQuantumString.startsWith(\"2\") ||\n [\"M\", \"E\", \"S\"].includes(moveQuantumString)\n ) {\n return MoveType.Inner;\n }\n return MoveType.Outer;\n}\n\nlet cache: Record<string, MoveType> | undefined;\nfunction getCache(): Record<string, MoveType> {\n if (cache) {\n return cache;\n }\n cache = {};\n const moveQuantumStrings = [\n ...Object.keys(experimentalCube3x3x3KPuzzleDefinition.moves),\n ...Object.keys(experimentalCube3x3x3KPuzzleDefinition.derivedMoves!),\n ];\n for (const moveQuantumString of moveQuantumStrings) {\n cache[moveQuantumString] = uncachedMoveCount(moveQuantumString);\n }\n return cache;\n}\n\n// Ancient wisdom: https://github.com/cubing/alg.js/blob/0599fad84d81b8d943ad3ea3e5dc191db8b6c157/alg.js#L638-L651\n/**\n * A move with an amount of 0 always has 0 cost. Else, the cost is\n *\n * constantFactor + amountFactor * Math.abs(move.amount)\n *\n */\nexport const costFactorsByMetric: Partial<\n Record<\n CommonMetric,\n Record<\n MoveType,\n {\n constantFactor: number;\n amountFactor: number;\n }\n >\n >\n> = {\n // Note: these are hardcoded for 3x3x3. They will not automatically generalize to any other puzzles.\n [CommonMetric.OuterBlockTurnMetric]: {\n [MoveType.Rotation]: { constantFactor: 0, amountFactor: 0 },\n [MoveType.Outer]: { constantFactor: 1, amountFactor: 0 },\n [MoveType.Inner]: { constantFactor: 2, amountFactor: 0 },\n },\n [CommonMetric.RangeBlockTurnMetric]: {\n [MoveType.Rotation]: { constantFactor: 0, amountFactor: 0 },\n [MoveType.Outer]: { constantFactor: 1, amountFactor: 0 },\n [MoveType.Inner]: { constantFactor: 1, amountFactor: 0 },\n },\n [CommonMetric.OuterBlockQuantumTurnMetric]: {\n [MoveType.Rotation]: { constantFactor: 0, amountFactor: 0 },\n [MoveType.Outer]: { constantFactor: 0, amountFactor: 1 },\n [MoveType.Inner]: { constantFactor: 0, amountFactor: 2 },\n },\n [CommonMetric.RangeBlockQuantumTurnMetric]: {\n [MoveType.Rotation]: { constantFactor: 0, amountFactor: 0 },\n [MoveType.Outer]: { constantFactor: 0, amountFactor: 1 },\n [MoveType.Inner]: { constantFactor: 0, amountFactor: 1 },\n },\n [CommonMetric.ExecutionTurnMetric]: {\n [MoveType.Rotation]: { constantFactor: 1, amountFactor: 0 },\n [MoveType.Outer]: { constantFactor: 1, amountFactor: 0 },\n [MoveType.Inner]: { constantFactor: 1, amountFactor: 0 },\n },\n};\n\nexport function countMove3x3x3(metric: CommonMetric, move: Move): number {\n const costFactors = costFactorsByMetric[metric];\n if (!costFactors) {\n throw new Error(`Invalid metric for 3x3x3: ${metric}`);\n }\n const cache = getCache();\n const moveQuantumString = move.quantum.toString();\n if (!(moveQuantumString in cache)) {\n throw new Error(`Invalid move for 3x3x3 ${metric}: ${moveQuantumString}`);\n }\n const costType = cache[moveQuantumString];\n const { constantFactor, amountFactor } = costFactors[costType];\n return constantFactor + amountFactor * Math.abs(move.amount);\n}\n", "// TODO: move this file somewhere permanent.\nimport {\n Alg,\n Commutator,\n Conjugate,\n functionFromTraversal,\n Grouping,\n LineComment,\n Move,\n Newline,\n Pause,\n TraversalUp,\n} from \"../alg\";\nimport type { PuzzleLoader } from \"../puzzles\";\nimport { CommonMetric } from \"./commonMetrics\";\nimport { costFactorsByMetric, countMove3x3x3 } from \"./cube3x3x3Metrics\";\n\n/*\n * For movecount, that understands puzzle rotations. This code\n * should be moved to the alg class, probably.\n */\nclass CountMoves extends TraversalUp<number> {\n constructor(private metric: (move: Move) => number) {\n super();\n }\n\n public traverseAlg(alg: Alg): number {\n let r = 0;\n for (const algNode of alg.childAlgNodes()) {\n r += this.traverseAlgNode(algNode);\n }\n return r;\n }\n\n public traverseGrouping(grouping: Grouping): number {\n const alg: Alg = grouping.alg;\n return this.traverseAlg(alg) * Math.abs(grouping.amount);\n }\n\n public traverseMove(move: Move): number {\n return this.metric(move);\n }\n\n public traverseCommutator(commutator: Commutator): number {\n return (\n 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B))\n );\n }\n\n public traverseConjugate(conjugate: Conjugate): number {\n return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);\n }\n\n // TODO: Remove spaces between repeated pauses (in traverseSequence)\n public traversePause(_pause: Pause): number {\n return 0;\n }\n\n public traverseNewline(_newLine: Newline): number {\n return 0;\n }\n\n // TODO: Enforce being followed by a newline (or the end of the alg)?\n public traverseLineComment(_comment: LineComment): number {\n return 0;\n }\n}\n\nfunction isCharUppercase(c: string): boolean {\n return \"A\" <= c && c <= \"Z\";\n}\n\n// TODO: Implement a puzzle-specific way to calculate this.\nfunction baseMetric(move: Move): number {\n const fam = move.family;\n if (\n (isCharUppercase(fam[0]) && fam[fam.length - 1] === \"v\") ||\n fam === \"x\" ||\n fam === \"y\" ||\n fam === \"z\" ||\n fam === \"T\"\n ) {\n return 0;\n } else {\n return 1;\n }\n}\n\nfunction etmMetric(_move: Move): number {\n return 1;\n}\n\n// TODO: Implement a puzzle-specific way to calculate this.\nfunction rangeBlockTurnMetric(move: Move): number {\n const fam = move.family;\n if (\n (isCharUppercase(fam[0]) && fam[fam.length - 1] === \"v\") ||\n fam === \"x\" ||\n fam === \"y\" ||\n fam === \"z\" ||\n fam === \"T\"\n ) {\n return 0;\n } else {\n return 1;\n }\n}\n\n// TODO: Implement a puzzle-specific way to calculate this.\nfunction quantumMetric(move: Move): number {\n return Math.abs(move.amount) * rangeBlockTurnMetric(move);\n}\n\nexport const countMoves = functionFromTraversal(CountMoves, [baseMetric]);\nexport const countMovesETM = functionFromTraversal(CountMoves, [etmMetric]);\nexport const countRangeBlockQuantumMovesPG = functionFromTraversal(CountMoves, [\n quantumMetric,\n]);\nexport const countRangeBlockMovesPG = functionFromTraversal(CountMoves, [\n rangeBlockTurnMetric,\n]);\n\n/**\n * Only implemented so far:\n *\n * - 3x3x3: OBTM, RBTM, ETM\n */\nexport function countMetricMoves(\n puzzleLoader: PuzzleLoader,\n metric: CommonMetric,\n alg: Alg,\n): number {\n if (puzzleLoader.id === \"3x3x3\") {\n if (metric in costFactorsByMetric) {\n return functionFromTraversal(CountMoves, [\n (move: Move) => countMove3x3x3(metric, move),\n ])(alg);\n }\n } else {\n switch (metric) {\n case CommonMetric.ExecutionTurnMetric:\n return countMovesETM(alg);\n case CommonMetric.RangeBlockTurnMetric:\n if (puzzleLoader.pg) {\n return countRangeBlockMovesPG(alg);\n }\n case CommonMetric.RangeBlockQuantumTurnMetric:\n if (puzzleLoader.pg) {\n return countRangeBlockQuantumMovesPG(alg);\n }\n }\n }\n throw new Error(\"Unsupported puzzle or metric.\");\n}\n", "import {\n Alg,\n Commutator,\n Conjugate,\n Grouping,\n LineComment,\n Move,\n Newline,\n Pause,\n TraversalUp,\n} from \"../alg\";\nimport { functionFromTraversal } from \"../alg\";\n\n// TODO: Include Pause, include amounts\nclass CountAnimatedLeaves extends TraversalUp<number, number> {\n public traverseAlg(alg: Alg): number {\n let total = 0;\n for (const part of alg.childAlgNodes()) {\n total += this.traverseAlgNode(part);\n }\n return total;\n }\n\n public traverseGrouping(grouping: Grouping): number {\n return this.traverseAlg(grouping.alg) * Math.abs(grouping.amount);\n }\n\n public traverseMove(_move: Move): number {\n return 1;\n }\n\n public traverseCommutator(commutator: Commutator): number {\n return (\n 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B))\n );\n }\n\n public traverseConjugate(conjugate: Conjugate): number {\n return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);\n }\n\n public traversePause(_pause: Pause): number {\n return 1;\n }\n\n public traverseNewline(_newline: Newline): number {\n return 0;\n }\n\n public traverseLineComment(_comment: LineComment): number {\n return 0;\n }\n}\n\nexport const countAnimatedLeaves = functionFromTraversal(CountAnimatedLeaves);\n"],
5
+ "mappings": "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",
6
+ "names": ["CommonMetric", "CommonMetricAlias", "cache"]
7
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ expose
3
+ } from "./chunk-6OUID4YZ.js";
4
+ import {
5
+ insideAPI
6
+ } from "./chunk-UOO5TXR6.js";
7
+ import "./chunk-LWPMAFQX.js";
8
+ import "./chunk-ZYCJIZDN.js";
9
+ import "./chunk-VRFVPBCT.js";
10
+ import "./chunk-BTVDGT5H.js";
11
+ import "./chunk-SNYTAYI2.js";
12
+ import "./chunk-F72PPD54.js";
13
+ import "./chunk-5J7SUMXR.js";
14
+
15
+ // src/cubing/search/inside/index.ts
16
+ expose(insideAPI);
17
+ //# sourceMappingURL=inside-DLVM67HZ.js.map