cubing 0.35.3 → 0.35.5

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 (58) hide show
  1. package/dist/esm/bluetooth/index.js +3 -3
  2. package/dist/esm/{chunk-AO6JA426.js → chunk-6XLGXW2E.js} +27 -10
  3. package/dist/esm/chunk-6XLGXW2E.js.map +7 -0
  4. package/dist/esm/{chunk-VJBQAZ63.js → chunk-KP4NQ2S7.js} +41 -59
  5. package/dist/esm/chunk-KP4NQ2S7.js.map +7 -0
  6. package/dist/esm/{chunk-WI5ILYXH.js → chunk-L2IOKNTA.js} +2 -2
  7. package/dist/esm/{chunk-WI5ILYXH.js.map → chunk-L2IOKNTA.js.map} +0 -0
  8. package/dist/esm/{chunk-CJY2SFU4.js → chunk-NLAN5QTO.js} +4 -4
  9. package/dist/esm/{chunk-CJY2SFU4.js.map → chunk-NLAN5QTO.js.map} +0 -0
  10. package/dist/esm/{chunk-OFSJREI7.js → chunk-PGVSLC27.js} +3 -3
  11. package/dist/esm/{chunk-OFSJREI7.js.map → chunk-PGVSLC27.js.map} +0 -0
  12. package/dist/esm/{chunk-4F4IORIH.js → chunk-SXCQFA6P.js} +74 -55
  13. package/dist/esm/chunk-SXCQFA6P.js.map +7 -0
  14. package/dist/esm/{chunk-II4IKKKD.js → chunk-ZMIEL2NE.js} +3 -3
  15. package/dist/esm/{chunk-II4IKKKD.js.map → chunk-ZMIEL2NE.js.map} +0 -0
  16. package/dist/esm/protocol/index.js +2 -2
  17. package/dist/esm/puzzle-geometry/index.js +4 -4
  18. package/dist/esm/puzzle-geometry/index.js.map +2 -2
  19. package/dist/esm/puzzles/index.js +2 -2
  20. package/dist/esm/{puzzles-dynamic-megaminx-QPQBRZVY.js → puzzles-dynamic-megaminx-FUKAIAP5.js} +49 -49
  21. package/dist/esm/puzzles-dynamic-megaminx-FUKAIAP5.js.map +7 -0
  22. package/dist/esm/{puzzles-dynamic-side-events-D2VNVUXH.js → puzzles-dynamic-side-events-FCWYXIA7.js} +34 -34
  23. package/dist/esm/{puzzles-dynamic-side-events-D2VNVUXH.js.map → puzzles-dynamic-side-events-FCWYXIA7.js.map} +1 -1
  24. package/dist/esm/scramble/index.js +5 -5
  25. package/dist/esm/search/index.js +5 -5
  26. package/dist/esm/{search-dynamic-sgs-side-events-KNGHGZA4.js → search-dynamic-sgs-side-events-LL4HZCBL.js} +3 -3
  27. package/dist/esm/{search-dynamic-sgs-side-events-KNGHGZA4.js.map → search-dynamic-sgs-side-events-LL4HZCBL.js.map} +0 -0
  28. package/dist/esm/{search-dynamic-sgs-unofficial-5UKPPXG6.js → search-dynamic-sgs-unofficial-3DPMEA2U.js} +3 -3
  29. package/dist/esm/{search-dynamic-sgs-unofficial-5UKPPXG6.js.map → search-dynamic-sgs-unofficial-3DPMEA2U.js.map} +0 -0
  30. package/dist/esm/{search-dynamic-solve-4x4x4-TWEBDU25.js → search-dynamic-solve-4x4x4-TYEAHDKU.js} +4 -4
  31. package/dist/esm/{search-dynamic-solve-4x4x4-TWEBDU25.js.map → search-dynamic-solve-4x4x4-TYEAHDKU.js.map} +0 -0
  32. package/dist/esm/{search-dynamic-solve-kilominx-5GTXKEAX.js → search-dynamic-solve-kilominx-I7ZZOZ6H.js} +1 -22
  33. package/dist/esm/search-dynamic-solve-kilominx-I7ZZOZ6H.js.map +7 -0
  34. package/dist/esm/search-worker-inside-generated-string-GVBEUVU6.js +4327 -0
  35. package/dist/esm/search-worker-inside-generated-string-GVBEUVU6.js.map +7 -0
  36. package/dist/esm/{search-worker-js-entry-Y3TCZPYI.js → search-worker-js-entry-ZAMQ72EY.js} +5 -5
  37. package/dist/esm/{search-worker-js-entry-Y3TCZPYI.js.map → search-worker-js-entry-ZAMQ72EY.js.map} +0 -0
  38. package/dist/esm/{search-worker-ts-entry-4IKMP4NN.js → search-worker-ts-entry-YL376GCH.js} +2 -2
  39. package/dist/esm/{search-worker-ts-entry-4IKMP4NN.js.map → search-worker-ts-entry-YL376GCH.js.map} +0 -0
  40. package/dist/esm/twisty/index.js +6 -12
  41. package/dist/esm/twisty/index.js.map +2 -2
  42. package/dist/esm/{twisty-dynamic-3d-FXC3LBQE.js → twisty-dynamic-3d-4FQNXENU.js} +4 -4
  43. package/dist/esm/{twisty-dynamic-3d-FXC3LBQE.js.map → twisty-dynamic-3d-4FQNXENU.js.map} +0 -0
  44. package/dist/esm/twsearch-Q7TBHLPE-FGVZYJSU.js +3155 -0
  45. package/dist/esm/twsearch-Q7TBHLPE-FGVZYJSU.js.map +7 -0
  46. package/dist/esm/{twsearch-H72D4ZDN.js → twsearch-XTET7H4F.js} +3 -4
  47. package/dist/esm/twsearch-XTET7H4F.js.map +7 -0
  48. package/package.json +1 -1
  49. package/dist/esm/chunk-4F4IORIH.js.map +0 -7
  50. package/dist/esm/chunk-AO6JA426.js.map +0 -7
  51. package/dist/esm/chunk-VJBQAZ63.js.map +0 -7
  52. package/dist/esm/puzzles-dynamic-megaminx-QPQBRZVY.js.map +0 -7
  53. package/dist/esm/search-dynamic-solve-kilominx-5GTXKEAX.js.map +0 -7
  54. package/dist/esm/search-worker-inside-generated-string-B4ROHW5F.js +0 -4328
  55. package/dist/esm/search-worker-inside-generated-string-B4ROHW5F.js.map +0 -7
  56. package/dist/esm/twsearch-H72D4ZDN.js.map +0 -7
  57. package/dist/esm/twsearch-VUC3P72V-BNSTYRDR.js +0 -3155
  58. package/dist/esm/twsearch-VUC3P72V-BNSTYRDR.js.map +0 -7
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  binaryComponentsToReid3x3x3,
3
3
  twizzleBinaryToBinaryComponents
4
- } from "../chunk-WI5ILYXH.js";
4
+ } from "../chunk-L2IOKNTA.js";
5
5
  import {
6
6
  cube3x3x3,
7
7
  puzzles
8
- } from "../chunk-VJBQAZ63.js";
8
+ } from "../chunk-KP4NQ2S7.js";
9
9
  import {
10
10
  experimental3x3x3KPuzzle
11
- } from "../chunk-4F4IORIH.js";
11
+ } from "../chunk-SXCQFA6P.js";
12
12
  import {
13
13
  KState
14
14
  } from "../chunk-KLI2E737.js";
@@ -7,18 +7,18 @@ import {
7
7
  random333Scramble,
8
8
  setIsInsideWorker,
9
9
  solve333
10
- } from "./chunk-II4IKKKD.js";
10
+ } from "./chunk-ZMIEL2NE.js";
11
11
  import {
12
12
  countMoves
13
13
  } from "./chunk-IN66QSRW.js";
14
14
  import {
15
15
  cube2x2x2,
16
16
  puzzles
17
- } from "./chunk-VJBQAZ63.js";
17
+ } from "./chunk-KP4NQ2S7.js";
18
18
  import {
19
19
  from,
20
20
  normalize2x2x2Orientation
21
- } from "./chunk-4F4IORIH.js";
21
+ } from "./chunk-SXCQFA6P.js";
22
22
  import {
23
23
  KPuzzle,
24
24
  KState
@@ -166,11 +166,12 @@ function randomStateFromSGS(kpuzzle, sgs) {
166
166
  }
167
167
 
168
168
  // src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts
169
- var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-KNGHGZA4.js"));
169
+ var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-LL4HZCBL.js"));
170
170
 
171
171
  // src/cubing/search/inside/solve/twsearch.ts
172
- var twsearchPromise = from(async () => import("./twsearch-H72D4ZDN.js"));
172
+ var twsearchPromise = from(async () => import("./twsearch-XTET7H4F.js"));
173
173
  var existingPuzzleDefString;
174
+ var existingMoveSubsetString;
174
175
  function mustBeNaturalNumber(meaning, n) {
175
176
  if (typeof n !== "number" || !Number.isInteger(n) || n < 0) {
176
177
  throw new Error(`Invalid ${meaning}: ${n}`);
@@ -186,7 +187,18 @@ async function solveTwsearch(def, stateData, options) {
186
187
  } = await twsearchPromise;
187
188
  const kpuzzle = new KPuzzle(def);
188
189
  setArg("--startprunedepth 5");
190
+ let moveSubsetString = "";
189
191
  if (options) {
192
+ if (options.moveSubset) {
193
+ moveSubsetString = options?.moveSubset?.join(",");
194
+ if (moveSubsetString.includes(" ")) {
195
+ throw new Error("A move contains a space\u203D");
196
+ }
197
+ if (moveSubsetString.includes("-")) {
198
+ throw new Error("A move contains a dash");
199
+ }
200
+ setArg(`--moves ${moveSubsetString}`);
201
+ }
190
202
  let { minDepth, maxDepth } = options;
191
203
  if (typeof minDepth !== "undefined") {
192
204
  mustBeNaturalNumber("minDepth", minDepth);
@@ -215,6 +227,11 @@ async function solveTwsearch(def, stateData, options) {
215
227
  existingPuzzleDefString = puzzleDefString;
216
228
  await setKPuzzleDefString(puzzleDefString);
217
229
  }
230
+ if (typeof existingMoveSubsetString !== "undefined" && moveSubsetString !== existingMoveSubsetString) {
231
+ throw new Error(
232
+ "Attempted to solve two different move subsets in the same worker using `twsearch`. This is not currently supported!"
233
+ );
234
+ }
218
235
  return await solveState(
219
236
  serializeKTransformationDataToTws("SearchState", stateData, true)
220
237
  );
@@ -336,7 +353,7 @@ async function random222Scramble() {
336
353
  }
337
354
 
338
355
  // src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts
339
- var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-TWEBDU25.js"));
356
+ var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-TYEAHDKU.js"));
340
357
 
341
358
  // src/cubing/search/inside/solve/puzzles/4x4x4.ts
342
359
  var randomSuffixes = [
@@ -429,14 +446,14 @@ async function oriented555RandomMoves() {
429
446
  var dynamicFTOSolver = from(() => import("./search-dynamic-solve-fto-JJ32OJVM.js"));
430
447
 
431
448
  // src/cubing/search/inside/solve/puzzles/fto.ts
432
- var dynamic = from(() => import("./search-dynamic-sgs-unofficial-5UKPPXG6.js"));
449
+ var dynamic = from(() => import("./search-dynamic-sgs-unofficial-3DPMEA2U.js"));
433
450
  async function randomFTOScramble() {
434
451
  mustBeInsideWorker();
435
452
  return new Alg(await (await dynamicFTOSolver).randomFTOScrambleString());
436
453
  }
437
454
 
438
455
  // src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts
439
- var dynamicKilominxSolver = from(() => import("./search-dynamic-solve-kilominx-5GTXKEAX.js"));
456
+ var dynamicKilominxSolver = from(() => import("./search-dynamic-solve-kilominx-I7ZZOZ6H.js"));
440
457
 
441
458
  // src/cubing/search/inside/solve/puzzles/kilominx.ts
442
459
  async function randomKilominxScramble() {
@@ -518,7 +535,7 @@ async function randomPyraminxScrambleFixedOrientation() {
518
535
  }
519
536
 
520
537
  // src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts
521
- var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-5UKPPXG6.js"));
538
+ var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-3DPMEA2U.js"));
522
539
 
523
540
  // src/cubing/search/inside/solve/puzzles/redi_cube.ts
524
541
  async function randomRediCubeScramble() {
@@ -774,4 +791,4 @@ var insideAPI = {
774
791
  export {
775
792
  insideAPI
776
793
  };
777
- //# sourceMappingURL=chunk-AO6JA426.js.map
794
+ //# sourceMappingURL=chunk-6XLGXW2E.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 { KState } 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: KState,\n maxDepth: number = 11,\n): Promise<Alg> {\n mustBeInsideWorker();\n return await solveTwsearch(\n (\n await cube2x2x2.kpuzzle()\n ).definition,\n state.experimentalToTransformation()!.transformationData,\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: KState,\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.experimentalToTransformation()!.transformationData,\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: KState,\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: KState): Promise<Alg> {\n mustBeInsideWorker();\n return solveTwsearch(\n (await cube2x2x2.kpuzzle()).definition,\n state.experimentalToTransformation()!.transformationData,\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: KState,\n options?: { orientationSum?: number },\n): void {\n randomPermuteInPlace(state.stateData[orbitName].pieces);\n\n const orbitDef = kpuzzle.definition.orbits[orbitName];\n const ori = state.stateData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDef.numPieces; i++) {\n const o = randomUIntBelow(orbitDef.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) % orbitDef.numOrientations) +\n orbitDef.numOrientations) %\n orbitDef.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222State(): Promise<KState> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const stateCopy: KState = new KState(\n kpuzzle,\n JSON.parse(JSON.stringify(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 .toKState(); // 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 { KState } from \"../../../kpuzzle/KState\";\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: KState,\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: { puzzleSpecificModWrap: \"canonical-centered\" },\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 KState\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].orientation[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].orientation[idx] !== 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): KState {\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.toKState();\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 KPuzzleDefinition,\n 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: KTransformationData,\n options?: TwsearchOptions,\n): Promise<Alg> {\n const {\n setArg,\n setKPuzzleDefString,\n serializeDefToTws,\n solveState,\n serializeKTransformationDataToTws,\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(\n serializeKTransformationDataToTws(\"SearchState\", stateData, true),\n );\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 { KState } from \"../../../../kpuzzle/KState\";\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: KState): 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 { KStateData } from \"../../../../kpuzzle\";\nimport { KState } 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: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const stateDataWithoutMO: KStateData = JSON.parse(\n JSON.stringify(state.stateData),\n );\n stateDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);\n const stateWithoutMO = new KState(\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 { KState } from \"../../../../kpuzzle/KState\";\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: KState): 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<KState> {\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 { KState } 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: KState): Promise<KState> {\n return new KState(\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: KState): 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<KState> {\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 KPuzzleDefinition,\n KState,\n KStateData,\n KTransformationData,\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, 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: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"3x3x3\"].kpuzzle(), stateData);\n return (await solve333(state)).toString();\n },\n\n solve222ToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"2x2x2\"].kpuzzle(), stateData);\n return (await solve222HTMSubOptimal(state)).toString();\n },\n\n solveSkewbToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"skewb\"].kpuzzle(), stateData);\n return (await solveSkewb(state)).toString();\n },\n\n solvePyraminxToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"pyraminx\"].kpuzzle(), stateData);\n return (await solvePyraminx(state)).toString();\n },\n\n solveMegaminxToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(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: KTransformationData,\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
+ }
@@ -4,11 +4,12 @@ import {
4
4
  PuzzleStickering,
5
5
  StickeringManager,
6
6
  asyncGetPuzzleGeometry,
7
+ cubeLikeStickeringList,
7
8
  cubeLikeStickeringMask,
8
- cubeStickerings,
9
9
  experimental3x3x3KPuzzle,
10
+ from,
10
11
  getCached
11
- } from "./chunk-4F4IORIH.js";
12
+ } from "./chunk-SXCQFA6P.js";
12
13
  import {
13
14
  KPuzzle
14
15
  } from "./chunk-KLI2E737.js";
@@ -66,22 +67,22 @@ var cube2x2x2 = {
66
67
  fullName: "2\xD72\xD72 Cube",
67
68
  kpuzzle: getCached(
68
69
  async () => new KPuzzle(
69
- (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).cube2x2x2JSON
70
+ (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).cube2x2x2JSON
70
71
  )
71
72
  ),
72
- svg: async () => (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).cube2x2x2SVG,
73
+ svg: async () => (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).cube2x2x2SVG,
73
74
  llSVG: getCached(
74
- async () => (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).cube2x2x2LLSVG
75
+ async () => (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).cube2x2x2LLSVG
75
76
  ),
76
77
  pg: getCached(async () => {
77
78
  return asyncGetPuzzleGeometry("2x2x2");
78
79
  }),
79
80
  stickeringMask: (stickering) => cubeLikeStickeringMask(cube2x2x2, stickering),
80
- stickerings: () => cubeStickerings("2x2x2")
81
+ stickerings: () => cubeLikeStickeringList("2x2x2", { use3x3x3Fallbacks: true })
81
82
  };
82
83
 
83
84
  // src/cubing/puzzles/implementations/3x3x3/puzzle-specific-simplifications.ts
84
- function makeSourceInfo(moveStrings, type, from, to) {
85
+ function makeSourceInfo(moveStrings, type, from2, to) {
85
86
  const output = [];
86
87
  for (const moveString of moveStrings) {
87
88
  const move = Move.fromString(moveString);
@@ -89,7 +90,7 @@ function makeSourceInfo(moveStrings, type, from, to) {
89
90
  if (![-1, 1].includes(direction)) {
90
91
  throw new Error("Invalid config move");
91
92
  }
92
- output.push({ family, direction, type, from, to });
93
+ output.push({ family, direction, type, from: from2, to });
93
94
  }
94
95
  return output;
95
96
  }
@@ -168,9 +169,9 @@ function firstOfType(axis, moveSourceType) {
168
169
  var areQuantumMovesSameAxis = (quantumMove1, quantumMove2) => {
169
170
  return byFamily[quantumMove1.family].axis === byFamily[quantumMove2.family].axis;
170
171
  };
171
- function simplestMove(axis, from, to, directedAmount) {
172
- if (from + 1 === to) {
173
- const sliceSpecificInfo = byAxisThenSpecificSlices[axis].get(from);
172
+ function simplestMove(axis, from2, to, directedAmount) {
173
+ if (from2 + 1 === to) {
174
+ const sliceSpecificInfo = byAxisThenSpecificSlices[axis].get(from2);
174
175
  if (sliceSpecificInfo) {
175
176
  return new Move(
176
177
  new QuantumMove(sliceSpecificInfo.family),
@@ -180,18 +181,18 @@ function simplestMove(axis, from, to, directedAmount) {
180
181
  }
181
182
  const axisInfo = axisInfos[axis];
182
183
  const { sliceDiameter } = axisInfo;
183
- if (from === 0 && to === sliceDiameter) {
184
+ if (from2 === 0 && to === sliceDiameter) {
184
185
  const moveSourceInfo2 = firstOfType(axis, 5 /* ROTATION */);
185
186
  return new Move(
186
187
  new QuantumMove(moveSourceInfo2.family),
187
188
  directedAmount * moveSourceInfo2.direction
188
189
  );
189
190
  }
190
- const far = from + to > sliceDiameter;
191
+ const far = from2 + to > sliceDiameter;
191
192
  if (far) {
192
- [from, to] = [sliceDiameter - to, sliceDiameter - from];
193
+ [from2, to] = [sliceDiameter - to, sliceDiameter - from2];
193
194
  }
194
- let outerLayer = from + 1;
195
+ let outerLayer = from2 + 1;
195
196
  let innerLayer = to;
196
197
  const slice = outerLayer === innerLayer;
197
198
  if (slice) {
@@ -285,14 +286,14 @@ function simplifySameAxisMoves(moves, quantumMod = true) {
285
286
  if (!lastCandidateRange) {
286
287
  return moves;
287
288
  }
288
- let [from, to] = lastCandidateRange.sliceDeltas.keys();
289
- if (from > to) {
290
- [from, to] = [to, from];
289
+ let [from2, to] = lastCandidateRange.sliceDeltas.keys();
290
+ if (from2 > to) {
291
+ [from2, to] = [to, from2];
291
292
  }
292
- const directedAmount = lastCandidateRange.sliceDeltas.get(from);
293
+ const directedAmount = lastCandidateRange.sliceDeltas.get(from2);
293
294
  return [
294
295
  ...moves.slice(0, -lastCandidateRange.suffixLength),
295
- ...directedAmount !== 0 ? [simplestMove(axis, from, to, directedAmount)] : []
296
+ ...directedAmount !== 0 ? [simplestMove(axis, from2, to, directedAmount)] : []
296
297
  ];
297
298
  }
298
299
  var puzzleSpecificSimplifyOptions333 = {
@@ -319,7 +320,7 @@ var cube3x3x3 = {
319
320
  return asyncGetPuzzleGeometry("3x3x3");
320
321
  }),
321
322
  stickeringMask: (stickering) => cubeLikeStickeringMask(cube3x3x3, stickering),
322
- stickerings: () => cubeStickerings("3x3x3"),
323
+ stickerings: () => cubeLikeStickeringList("3x3x3"),
323
324
  puzzleSpecificSimplifyOptions: puzzleSpecificSimplifyOptions333
324
325
  };
325
326
 
@@ -331,11 +332,11 @@ var clock = {
331
332
  inventionYear: 1988,
332
333
  kpuzzle: getCached(
333
334
  async () => new KPuzzle(
334
- (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).clockJSON
335
+ (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).clockJSON
335
336
  )
336
337
  ),
337
338
  svg: getCached(async () => {
338
- return (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).clockSVG;
339
+ return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).clockSVG;
339
340
  })
340
341
  };
341
342
 
@@ -454,38 +455,19 @@ var fto = new FTOPuzzleLoader();
454
455
 
455
456
  // src/cubing/puzzles/stickerings/megaminx-stickerings.ts
456
457
  async function megaminxStickeringMask(puzzleLoader, stickering) {
457
- switch (stickering) {
458
- case "full":
459
- case "F2L":
460
- case "LL":
461
- case "OLL":
462
- case "EOLL":
463
- case "OCLL":
464
- case "CPLL":
465
- case "PLL":
466
- case "ELS":
467
- case "CLS":
468
- return cubeLikeStickeringMask(puzzleLoader, stickering);
469
- default:
470
- console.warn(
471
- `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`
472
- );
458
+ if ((await megaminxStickerings()).includes(stickering)) {
459
+ return cubeLikeStickeringMask(puzzleLoader, stickering);
473
460
  }
461
+ console.warn(
462
+ `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`
463
+ );
474
464
  return cubeLikeStickeringMask(puzzleLoader, "full");
475
465
  }
476
- async function megaminxStickerings() {
477
- return [
478
- "full",
479
- "F2L",
480
- "LL",
481
- "OLL",
482
- "EOLL",
483
- "OCLL",
484
- "PLL",
485
- "CPLL",
486
- "ELS",
487
- "CLS"
488
- ];
466
+ var megaminxStickeringListPromise = from(
467
+ () => cubeLikeStickeringList("megaminx")
468
+ );
469
+ function megaminxStickerings() {
470
+ return megaminxStickeringListPromise;
489
471
  }
490
472
 
491
473
  // src/cubing/puzzles/implementations/megaminx/index.ts
@@ -498,7 +480,7 @@ var MegaminxPuzzleLoader = class extends PGPuzzleLoader {
498
480
  });
499
481
  this.stickerings = megaminxStickerings;
500
482
  this.llSVG = getCached(async () => {
501
- return (await import("./puzzles-dynamic-megaminx-QPQBRZVY.js")).megaminxLLSVG;
483
+ return (await import("./puzzles-dynamic-megaminx-FUKAIAP5.js")).megaminxLLSVG;
502
484
  });
503
485
  }
504
486
  stickeringMask(stickering) {
@@ -516,7 +498,7 @@ var PyraminxPuzzleLoader = class extends PGPuzzleLoader {
516
498
  inventedBy: ["Uwe Meffert"]
517
499
  });
518
500
  this.svg = getCached(async () => {
519
- return (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).pyraminxSVG;
501
+ return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).pyraminxSVG;
520
502
  });
521
503
  }
522
504
  };
@@ -530,11 +512,11 @@ var square1 = {
530
512
  inventionYear: 1990,
531
513
  kpuzzle: getCached(
532
514
  async () => new KPuzzle(
533
- (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).sq1HyperOrbitJSON
515
+ (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).sq1HyperOrbitJSON
534
516
  )
535
517
  ),
536
518
  svg: getCached(async () => {
537
- return (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).sq1HyperOrbitSVG;
519
+ return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).sq1HyperOrbitSVG;
538
520
  })
539
521
  };
540
522
 
@@ -613,11 +595,11 @@ var melindas2x2x2x2 = {
613
595
  inventedBy: ["Melinda Green"],
614
596
  kpuzzle: getCached(
615
597
  async () => new KPuzzle(
616
- (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).melindas2x2x2x2OrbitJSON
598
+ (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).melindas2x2x2x2OrbitJSON
617
599
  )
618
600
  ),
619
601
  svg: getCached(async () => {
620
- return (await import("./puzzles-dynamic-side-events-D2VNVUXH.js")).melindas2x2x2x2OrbitSVG;
602
+ return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).melindas2x2x2x2OrbitSVG;
621
603
  })
622
604
  };
623
605
 
@@ -670,4 +652,4 @@ export {
670
652
  cube3x3x3,
671
653
  puzzles
672
654
  };
673
- //# sourceMappingURL=chunk-VJBQAZ63.js.map
655
+ //# sourceMappingURL=chunk-KP4NQ2S7.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/puzzles/events.ts", "../../src/cubing/puzzles/implementations/2x2x2/index.ts", "../../src/cubing/puzzles/implementations/3x3x3/puzzle-specific-simplifications.ts", "../../src/cubing/puzzles/implementations/3x3x3/index.ts", "../../src/cubing/puzzles/implementations/clock/index.ts", "../../src/cubing/puzzles/stickerings/fto-stickerings.ts", "../../src/cubing/puzzles/implementations/fto/index.ts", "../../src/cubing/puzzles/stickerings/megaminx-stickerings.ts", "../../src/cubing/puzzles/implementations/megaminx/index.ts", "../../src/cubing/puzzles/implementations/pyraminx/index.ts", "../../src/cubing/puzzles/implementations/square1/index.ts", "../../src/cubing/puzzles/implementations/kilominx/index.ts", "../../src/cubing/puzzles/implementations/redi-cube/index.ts", "../../src/cubing/puzzles/implementations/4x4x4/index.ts", "../../src/cubing/puzzles/implementations/melindas2x2x2x2/index.ts", "../../src/cubing/puzzles/index.ts"],
4
+ "sourcesContent": ["import type { PuzzleID } from \"../twisty\";\n\ninterface EventInfo {\n puzzleID: PuzzleID;\n eventName: string;\n}\n\nexport const wcaEvents: Record<string, EventInfo> = {\n \"333\": { puzzleID: \"3x3x3\", eventName: \"3x3x3 Cube\" },\n \"222\": { puzzleID: \"2x2x2\", eventName: \"2x2x2 Cube\" },\n \"444\": { puzzleID: \"4x4x4\", eventName: \"4x4x4 Cube\" },\n \"555\": { puzzleID: \"5x5x5\", eventName: \"5x5x5 Cube\" },\n \"666\": { puzzleID: \"6x6x6\", eventName: \"6x6x6 Cube\" },\n \"777\": { puzzleID: \"7x7x7\", eventName: \"7x7x7 Cube\" },\n \"333bf\": { puzzleID: \"3x3x3\", eventName: \"3x3x3 Blindfolded\" },\n \"333fm\": { puzzleID: \"3x3x3\", eventName: \"3x3x3 Fewest Moves\" },\n \"333oh\": { puzzleID: \"3x3x3\", eventName: \"3x3x3 One-Handed\" },\n clock: { puzzleID: \"clock\", eventName: \"Clock\" },\n minx: { puzzleID: \"megaminx\", eventName: \"Megaminx\" },\n pyram: { puzzleID: \"pyraminx\", eventName: \"Pyraminx\" },\n skewb: { puzzleID: \"skewb\", eventName: \"Skewb\" },\n sq1: { puzzleID: \"square1\", eventName: \"Square-1\" },\n \"444bf\": { puzzleID: \"4x4x4\", eventName: \"4x4x4 Blindfolded\" },\n \"555bf\": { puzzleID: \"5x5x5\", eventName: \"5x5x5 Blindfolded\" },\n \"333mb\": { puzzleID: \"3x3x3\", eventName: \"3x3x3 Multi-Blind\" },\n};\n\n/** @category Event Info */\nexport function wcaEventInfo(event: string): EventInfo | null {\n return wcaEvents[event] ?? null;\n}\n\nexport const twizzleEvents: Record<string, EventInfo> = {\n ...wcaEvents,\n fto: { puzzleID: \"fto\", eventName: \"Face-Turning Octahedron\" },\n master_tetraminx: {\n puzzleID: \"master_tetraminx\",\n eventName: \"Master Tetraminx\",\n },\n kilominx: {\n puzzleID: \"kilominx\",\n eventName: \"Kilominx\",\n },\n redi_cube: {\n puzzleID: \"redi_cube\",\n eventName: \"Redi Cube\",\n },\n};\n\n/** @category Event Info */\nexport function eventInfo(event: string): EventInfo | null {\n return twizzleEvents[event] ?? null;\n}\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport type { ExperimentalStickering } from \"../../../twisty\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"../../stickerings/cube-like-stickerings\";\n\n/** @category Specific Puzzles */\nexport const cube2x2x2: PuzzleLoader = {\n id: \"2x2x2\",\n fullName: \"2\u00D72\u00D72 Cube\",\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events\"))\n .cube2x2x2JSON,\n ),\n ),\n svg: async () =>\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events\"))\n .cube2x2x2SVG,\n llSVG: getCached(\n async () =>\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events\"))\n .cube2x2x2LLSVG,\n ),\n pg: getCached(async () => {\n return asyncGetPuzzleGeometry(\"2x2x2\");\n }),\n stickeringMask: (\n stickering: ExperimentalStickering,\n ): Promise<StickeringMask> => cubeLikeStickeringMask(cube2x2x2, stickering),\n stickerings: () =>\n cubeLikeStickeringList(\"2x2x2\", { use3x3x3Fallbacks: true }),\n};\n", "import type { PuzzleSpecificSimplifyOptions } from \"../../../alg\";\nimport { Move, QuantumMove } from \"../../../alg\";\n\nenum Axis {\n X = \"x axis\",\n Y = \"y axis\",\n Z = \"z axis\",\n}\n\nenum MoveSourceType {\n INDEXABLE_SLICE_NEAR,\n INDEXABLE_SLICE_FAR,\n INDEXABLE_WIDE_NEAR,\n INDEXABLE_WIDE_FAR,\n SPECIFIC_SLICE,\n ROTATION,\n}\n\ninterface MoveSourceInfo {\n family: string;\n direction: -1 | 1;\n type: MoveSourceType;\n from: number;\n to: number;\n}\n\nfunction makeSourceInfo(\n moveStrings: string[],\n type: MoveSourceType,\n from: number,\n to: number,\n): MoveSourceInfo[] {\n const output: MoveSourceInfo[] = [];\n for (const moveString of moveStrings) {\n const move = Move.fromString(moveString);\n const { family, amount: direction } = move;\n if (![-1, 1].includes(direction)) {\n // TODO: test iner/outer\n // TODO: Can we move this to a test file?\n throw new Error(\"Invalid config move\");\n }\n output.push({ family, direction: direction as -1 | 1, type, from, to });\n }\n return output;\n}\n\ninterface AxisInfo {\n sliceDiameter: number;\n extendsThroughEntirePuzzle: boolean;\n moveSourceInfos: MoveSourceInfo[];\n}\n\n// TODO: wide slices\nconst axisInfos: Record<Axis, AxisInfo> = {\n [Axis.X]: {\n sliceDiameter: 3,\n extendsThroughEntirePuzzle: true,\n moveSourceInfos: [\n ...makeSourceInfo([\"R\"], MoveSourceType.INDEXABLE_SLICE_NEAR, 0, 3),\n ...makeSourceInfo([\"L'\"], MoveSourceType.INDEXABLE_SLICE_FAR, 0, 3),\n ...makeSourceInfo([\"r\", \"Rw\"], MoveSourceType.INDEXABLE_WIDE_NEAR, 0, 2),\n ...makeSourceInfo([\"l'\", \"Lw'\"], MoveSourceType.INDEXABLE_WIDE_FAR, 0, 2),\n ...makeSourceInfo([\"M'\"], MoveSourceType.SPECIFIC_SLICE, 1, 2), // TODO: remove some indices?\n ...makeSourceInfo([\"x\", \"Uv\", \"Dv'\"], MoveSourceType.ROTATION, 0, 3), // TODO: remove some indices?\n ],\n },\n [Axis.Y]: {\n sliceDiameter: 3,\n extendsThroughEntirePuzzle: true,\n moveSourceInfos: [\n ...makeSourceInfo([\"U\"], MoveSourceType.INDEXABLE_SLICE_NEAR, 0, 3),\n ...makeSourceInfo([\"D'\"], MoveSourceType.INDEXABLE_SLICE_FAR, 0, 3),\n ...makeSourceInfo([\"u\", \"Uw\"], MoveSourceType.INDEXABLE_WIDE_NEAR, 0, 2),\n ...makeSourceInfo([\"d'\", \"Dw'\"], MoveSourceType.INDEXABLE_WIDE_FAR, 0, 2),\n ...makeSourceInfo([\"E'\"], MoveSourceType.SPECIFIC_SLICE, 1, 2), // TODO: remove some indices?\n ...makeSourceInfo([\"y\", \"Uv\", \"Dv'\"], MoveSourceType.ROTATION, 0, 3), // TODO: remove some indices?\n ],\n },\n [Axis.Z]: {\n sliceDiameter: 3,\n extendsThroughEntirePuzzle: true,\n moveSourceInfos: [\n ...makeSourceInfo([\"F\"], MoveSourceType.INDEXABLE_SLICE_NEAR, 0, 3),\n ...makeSourceInfo([\"B'\"], MoveSourceType.INDEXABLE_SLICE_FAR, 0, 3),\n ...makeSourceInfo([\"f\", \"Fw\"], MoveSourceType.INDEXABLE_WIDE_NEAR, 0, 3),\n ...makeSourceInfo([\"b'\", \"Bw'\"], MoveSourceType.INDEXABLE_WIDE_FAR, 0, 3),\n ...makeSourceInfo([\"S\"], MoveSourceType.SPECIFIC_SLICE, 1, 2), // TODO: remove some indices?\n ...makeSourceInfo([\"z\", \"Fv\", \"Bv'\"], MoveSourceType.ROTATION, 0, 3), // TODO: remove some indices?\n ],\n },\n};\n\nconst byFamily: Record<string, { axis: Axis; moveSourceInfo: MoveSourceInfo }> =\n {};\nfor (const [axis, info] of Object.entries(axisInfos)) {\n for (const moveSourceInfo of info.moveSourceInfos) {\n byFamily[moveSourceInfo.family] = { axis: axis as Axis, moveSourceInfo };\n }\n}\n\n// TODO: lazy initialization?\nconst byAxisThenType: Record<\n Axis,\n Partial<Record<MoveSourceType, MoveSourceInfo[]>>\n> = {} as any; // TODO: avoid typecast (using `Object.fromEntries`?)\nfor (const axis of Object.keys(axisInfos) as Axis[]) {\n const entry: Partial<Record<MoveSourceType, MoveSourceInfo[]>> = {};\n byAxisThenType[axis] = entry;\n for (const moveSourceInfo of axisInfos[axis].moveSourceInfos) {\n (entry[moveSourceInfo.type] ??= []).push(moveSourceInfo);\n }\n}\n\n// TODO: consolidate lookup tables?\nconst byAxisThenSpecificSlices: Record<\n Axis,\n Map<number, MoveSourceInfo>\n> = {} as any; // TODO: avoid typecast (using `Object.fromEntries`?)\nfor (const axis of Object.keys(axisInfos) as Axis[]) {\n const entry: Map<number, MoveSourceInfo> = new Map();\n byAxisThenSpecificSlices[axis] = entry;\n for (const moveSourceInfo of axisInfos[axis].moveSourceInfos) {\n // We only want to use the first entry per slice index (in the unlikely case there are multiple).\n if (!entry.get(moveSourceInfo.from)) {\n entry.set(moveSourceInfo.from, moveSourceInfo);\n }\n }\n}\n\nfunction firstOfType(\n axis: Axis,\n moveSourceType: MoveSourceType,\n): MoveSourceInfo {\n const entry = byAxisThenType[axis][moveSourceType]?.[0];\n if (!entry) {\n throw new Error(\n `Could not find a reference move (axis: ${axis}, move source type: ${moveSourceType})`,\n );\n }\n return entry;\n}\n\nconst areQuantumMovesSameAxis = (\n quantumMove1: QuantumMove,\n quantumMove2: QuantumMove,\n) => {\n return (\n byFamily[quantumMove1.family].axis === byFamily[quantumMove2.family].axis\n );\n};\n\nfunction simplestMove(\n axis: Axis,\n from: number,\n to: number,\n directedAmount: number,\n): Move {\n if (from + 1 === to) {\n const sliceSpecificInfo = byAxisThenSpecificSlices[axis].get(from);\n if (sliceSpecificInfo) {\n return new Move(\n new QuantumMove(sliceSpecificInfo.family),\n directedAmount * sliceSpecificInfo.direction,\n );\n }\n }\n\n const axisInfo = axisInfos[axis];\n const { sliceDiameter } = axisInfo;\n if (from === 0 && to === sliceDiameter) {\n const moveSourceInfo = firstOfType(axis, MoveSourceType.ROTATION);\n return new Move(\n new QuantumMove(moveSourceInfo.family),\n directedAmount * moveSourceInfo.direction,\n );\n }\n\n // const specificSliceInfo = byAxisThenSpecificSlices[axis].get(from);\n const far = from + to > sliceDiameter; // (from + to) / 2 > sliceDiameter / 2\n if (far) {\n [from, to] = [sliceDiameter - to, sliceDiameter - from];\n }\n\n let outerLayer: number | null = from + 1; // change to 1-indexed\n let innerLayer: number | null = to; // already 1-indexed\n const slice = outerLayer === innerLayer;\n if (slice) {\n innerLayer = null;\n }\n\n if (outerLayer === 1) {\n outerLayer = null;\n }\n if (slice && outerLayer === 1) {\n innerLayer = null;\n }\n if (!slice && innerLayer === 2) {\n innerLayer = null;\n }\n\n const moveSourceType = slice\n ? far\n ? MoveSourceType.INDEXABLE_SLICE_FAR\n : MoveSourceType.INDEXABLE_SLICE_NEAR\n : far\n ? MoveSourceType.INDEXABLE_WIDE_FAR\n : MoveSourceType.INDEXABLE_WIDE_NEAR;\n const moveSourceInfo = firstOfType(axis, moveSourceType);\n return new Move(\n new QuantumMove(moveSourceInfo.family, innerLayer, outerLayer),\n directedAmount * moveSourceInfo.direction,\n );\n}\n\nfunction simplifySameAxisMoves(\n moves: Move[],\n quantumMod: boolean = true, // TODO\n): Move[] {\n if (moves.length === 0) {\n // TODO: can we use the type system to avoid this?\n return [];\n }\n\n const axis: Axis = byFamily[moves[0].family].axis;\n const axisInfo = axisInfos[axis];\n const { sliceDiameter } = axisInfo;\n const sliceDeltas = new Map<number, number>();\n let lastCandidateRange: {\n suffixLength: number;\n sliceDeltas: Map<number, number>;\n } | null = null;\n\n function adjustValue(idx: number, relativeDelta: number) {\n let newDelta = (sliceDeltas.get(idx) ?? 0) + relativeDelta;\n if (quantumMod) {\n newDelta = (newDelta % 4) + (5 % 4) - 1; // TODO: Use a passed-in `modMove`?\n }\n if (newDelta === 0) {\n sliceDeltas.delete(idx);\n } else {\n sliceDeltas.set(idx, newDelta);\n }\n }\n // TODO: go as far as possible instead of trying to take all moves, e.g. simplify U y y' to U.\n let suffixLength = 0;\n // TODO: Reverse iterator?\n for (const move of Array.from(moves).reverse()) {\n suffixLength++;\n const { moveSourceInfo } = byFamily[move.family];\n const directedAmount = move.amount * moveSourceInfo.direction;\n // console.log({ directedAmount });\n switch (moveSourceInfo.type) {\n case MoveSourceType.INDEXABLE_SLICE_NEAR: {\n // We convert to zero-indexing\n const idx = (move.innerLayer ?? 1) - 1;\n adjustValue(idx, directedAmount);\n adjustValue(idx + 1, -directedAmount);\n break;\n }\n case MoveSourceType.INDEXABLE_SLICE_FAR: {\n // We convert to zero-indexing (which cancels with the subtraction from the slice width)\n const idx = sliceDiameter - (move.innerLayer ?? 1);\n adjustValue(idx, directedAmount);\n adjustValue(idx + 1, -directedAmount);\n break;\n }\n case MoveSourceType.INDEXABLE_WIDE_NEAR: {\n adjustValue((move.outerLayer ?? 1) - 1, directedAmount);\n adjustValue(move.innerLayer ?? 2, -directedAmount);\n break;\n }\n case MoveSourceType.INDEXABLE_WIDE_FAR: {\n adjustValue(sliceDiameter - (move.innerLayer ?? 2), directedAmount);\n adjustValue(\n sliceDiameter - ((move.outerLayer ?? 1) - 1),\n -directedAmount,\n );\n break;\n }\n case MoveSourceType.SPECIFIC_SLICE: {\n // We convert to zero-indexing (which cancels with the subtraction from the slice width)\n adjustValue(moveSourceInfo.from, directedAmount);\n adjustValue(moveSourceInfo.to, -directedAmount);\n break;\n }\n case MoveSourceType.ROTATION: {\n adjustValue(0, directedAmount);\n adjustValue(sliceDiameter, -directedAmount);\n break;\n }\n }\n if ([0, 2].includes(sliceDeltas.size)) {\n lastCandidateRange = { suffixLength, sliceDeltas: new Map(sliceDeltas) };\n }\n }\n if (sliceDeltas.size === 0) {\n return [];\n }\n // TODO: handle this check in the destructuring assignment?\n if (!lastCandidateRange) {\n return moves;\n }\n let [from, to] = lastCandidateRange.sliceDeltas.keys();\n if (from > to) {\n [from, to] = [to, from];\n }\n const directedAmount = lastCandidateRange.sliceDeltas.get(from)!;\n // TODO: Handle empty move\n return [\n ...moves.slice(0, -lastCandidateRange.suffixLength),\n ...(directedAmount !== 0\n ? [simplestMove(axis, from, to, directedAmount)]\n : []),\n ];\n}\n\nexport const puzzleSpecificSimplifyOptions333: PuzzleSpecificSimplifyOptions = {\n quantumMoveOrder: () => 4,\n // doQuantumMovesCommute: areQuantumMovesSameAxis,\n axis: { areQuantumMovesSameAxis, simplifySameAxisMoves },\n};\n", "// Include 3x3x3 in the main bundle for better performance.\nimport type { ExperimentalStickering } from \"../../../twisty\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport { experimental3x3x3KPuzzle } from \"../../cubing-private\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport {\n cubeLikeStickeringMask,\n cubeLikeStickeringList,\n} from \"../../stickerings/cube-like-stickerings\";\nimport { puzzleSpecificSimplifyOptions333 } from \"./puzzle-specific-simplifications\";\n\n/** @category Specific Puzzles */\nexport const cube3x3x3: PuzzleLoader = {\n id: \"3x3x3\",\n fullName: \"3\u00D73\u00D73 Cube\",\n inventedBy: [\"Ern\u0151 Rubik\"],\n inventionYear: 1974, // https://en.wikipedia.org/wiki/Rubik%27s_Cube#Conception_and_development\n kpuzzle: getCached(async () => {\n return experimental3x3x3KPuzzle;\n }),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/3x3x3/puzzles-dynamic-3x3x3\")\n ).cube3x3x3SVG;\n }),\n llSVG: getCached(async () => {\n return (\n await import(\"../dynamic/3x3x3/puzzles-dynamic-3x3x3\")\n ).cube3x3x3LLSVG;\n }),\n pg: getCached(async () => {\n return asyncGetPuzzleGeometry(\"3x3x3\");\n }),\n stickeringMask: (\n stickering: ExperimentalStickering,\n ): Promise<StickeringMask> => cubeLikeStickeringMask(cube3x3x3, stickering),\n stickerings: () => cubeLikeStickeringList(\"3x3x3\"),\n puzzleSpecificSimplifyOptions: puzzleSpecificSimplifyOptions333,\n};\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const clock: PuzzleLoader = {\n id: \"clock\",\n fullName: \"Clock\",\n inventedBy: [\"Christopher C. Wiggs\", \"Christopher J. Taylor\"],\n inventionYear: 1988, // Patent application year: https://www.jaapsch.net/puzzles/patents/us4869506.pdf\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events\"))\n .clockJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events\")\n ).clockSVG;\n }),\n};\n", "import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n StickeringMask,\n PuzzleStickering,\n StickeringManager,\n PieceSet,\n PieceStickering,\n} from \"./mask\";\n\nexport async function ftoStickering(\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 experimentalFTO_FC = (): PieceSet =>\n m.and([m.move(\"U\"), m.not(m.or(m.moves([\"F\", \"BL\", \"BR\"])))]);\n const experimentalFTO_F2T = (): PieceSet =>\n m.and([m.move(\"U\"), m.not(m.move(\"F\"))]);\n const experimentalFTO_SC = (): PieceSet =>\n m.or([\n experimentalFTO_F2T(),\n m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"BL\", \"BR\"])))]),\n ]);\n const experimentalFTO_L2C = (): PieceSet =>\n m.not(\n m.or([\n m.and([m.move(\"U\"), m.move(\"F\")]),\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n m.and([m.move(\"BL\"), m.move(\"BR\")]),\n ]),\n );\n const experimentalFTO_LBT = (): PieceSet =>\n m.not(\n m.or([\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n m.and([m.move(\"BL\"), m.move(\"BR\")]),\n ]),\n );\n\n switch (stickering) {\n case \"full\":\n break;\n case \"experimental-fto-fc\": {\n puzzleStickering.set(\n m.not(experimentalFTO_FC()),\n PieceStickering.Ignored,\n );\n break;\n }\n case \"experimental-fto-f2t\": {\n puzzleStickering.set(\n m.not(experimentalFTO_F2T()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_FC(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-sc\": {\n puzzleStickering.set(\n m.not(experimentalFTO_SC()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_F2T(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-l2c\": {\n puzzleStickering.set(\n m.not(experimentalFTO_L2C()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_SC(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-lbt\": {\n puzzleStickering.set(\n m.not(experimentalFTO_LBT()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_L2C(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-l3t\": {\n puzzleStickering.set(experimentalFTO_LBT(), PieceStickering.Dim);\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 ftoStickerings(): Promise<ExperimentalStickering[]> {\n return [\n \"full\",\n \"experimental-fto-fc\",\n \"experimental-fto-f2t\",\n \"experimental-fto-sc\",\n \"experimental-fto-l2c\",\n \"experimental-fto-lbt\",\n \"experimental-fto-l3t\",\n ];\n}\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport {\n ftoStickering,\n ftoStickerings,\n} from \"../../stickerings/fto-stickerings\";\n\nclass FTOPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n pgID: \"FTO\",\n id: \"fto\",\n fullName: \"Face-Turning Octahedron\",\n inventedBy: [\"Karl Rohrbach\", \"David Pitcher\"], // http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1663\n inventionYear: 1983, // http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1663\n });\n }\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return ftoStickering(this, stickering);\n }\n stickerings = ftoStickerings;\n override svg = getCached(async () => {\n return (\n await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial\")\n ).ftoSVG;\n });\n}\n\nexport const fto = new FTOPuzzleLoader();\n", "import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport type { StickeringMask } from \"./mask\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"./cube-like-stickerings\";\nimport { from } from \"../../vendor/mit/p-lazy/p-lazy\";\n\n// TODO: cache calculations?\nexport async function megaminxStickeringMask(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n // TODO: optimize lookup instead of looking through a list\n if ((await megaminxStickerings()).includes(stickering)) {\n return cubeLikeStickeringMask(puzzleLoader, stickering);\n }\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n return cubeLikeStickeringMask(puzzleLoader, \"full\");\n}\n\nconst megaminxStickeringListPromise: Promise<string[]> = from(() =>\n cubeLikeStickeringList(\"megaminx\"),\n);\nexport function megaminxStickerings(): Promise<string[]> {\n return megaminxStickeringListPromise;\n}\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport {\n megaminxStickeringMask,\n megaminxStickerings,\n} from \"../../stickerings/megaminx-stickerings\";\n\nclass MegaminxPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n id: \"megaminx\",\n fullName: \"Megaminx\",\n // Too many simultaneous inventors to name.\n inventionYear: 1981, // Earliest date from https://www.jaapsch.net/puzzles/megaminx.htm\n });\n }\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return megaminxStickeringMask(this, stickering);\n }\n stickerings = megaminxStickerings;\n\n llSVG = getCached(async () => {\n return (\n await import(\"../dynamic/megaminx/puzzles-dynamic-megaminx\")\n ).megaminxLLSVG;\n });\n}\n\nexport const megaminx = new MegaminxPuzzleLoader();\n", "import { PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\n\nclass PyraminxPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n id: \"pyraminx\",\n fullName: \"Pyraminx\",\n inventedBy: [\"Uwe Meffert\"],\n });\n }\n override svg = getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events\")\n ).pyraminxSVG;\n });\n}\n\nexport const pyraminx = new PyraminxPuzzleLoader();\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const square1: PuzzleLoader = {\n id: \"square1\",\n fullName: \"Square-1\",\n inventedBy: [\"Karel Hr\u0161el\", \"Vojtech Kopsk\u00FD\"],\n inventionYear: 1990, // Czech patent application year: http://spisy.upv.cz/Patents/FullDocuments/277/277266.pdf\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events\"))\n .sq1HyperOrbitJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events\")\n ).sq1HyperOrbitSVG;\n }),\n};\n", "import type { PuzzleLoader } from \"../..\";\nimport type { Move } from \"../../../alg\";\nimport { KPuzzle, KTransformationData } from \"../../../kpuzzle\";\nimport type { ExperimentalPGNotation } from \"../../../puzzle-geometry\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\n\n// TODO: Make this consistent with Megaminx corners\nexport const kilominx: PuzzleLoader = {\n id: \"kilominx\",\n fullName: \"Kilominx\",\n kpuzzle: getCached(async () => {\n const pg = await asyncGetPuzzleGeometry(\"megaminx + chopasaurus\");\n const kpuzzleDefinition = JSON.parse(\n JSON.stringify(pg.getKPuzzleDefinition(true)),\n );\n delete kpuzzleDefinition.orbits.CENTERS;\n delete kpuzzleDefinition.orbits.CENTERS2;\n delete kpuzzleDefinition.startStateData.CENTERS;\n delete kpuzzleDefinition.startStateData.CENTERS2;\n for (const moveDefinition of Object.values(kpuzzleDefinition.moves)) {\n delete (moveDefinition as any).CENTERS;\n delete (moveDefinition as any).CENTERS2;\n }\n kpuzzleDefinition.name = \"kilominx\";\n delete kpuzzleDefinition.experimentalPuzzleDescription;\n const puzzleGeometry = await import(\"../../../puzzle-geometry\");\n const pgNotation = new puzzleGeometry.ExperimentalPGNotation(\n pg,\n pg.getOrbitsDef(true),\n );\n const kpuzzle = new KPuzzle(kpuzzleDefinition, {\n experimentalPGNotation: {\n lookupMove: (move: Move): KTransformationData | null => {\n if (move.toString() === \"x2\" || move.toString() === \"x2'\") {\n return x2Transformation.transformationData;\n }\n return pgNotation.lookupMove(move);\n },\n } as ExperimentalPGNotation,\n });\n const x2Transformation = kpuzzle.algToTransformation(\"Rv2 Fv Uv'\");\n kpuzzleDefinition.moves[\"x2\"] = x2Transformation;\n return kpuzzle;\n }),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial\")\n ).kilominxSVG;\n }),\n};\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const rediCube: PuzzleLoader = {\n id: \"redi_cube\",\n fullName: \"Redi Cube\",\n // Announced 2009-07-21: https://www.youtube.com/watch?v=cjfMzA1u3vM\n // https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1520\n inventedBy: [\"Oskar van Deventer\"],\n inventionYear: 2009,\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial\"))\n .rediCubeJSON,\n ),\n ),\n svg: async () => {\n return (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial\"))\n .rediCubeSVG;\n },\n};\n", "import { CubePGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nconst cube4x4x4: PuzzleLoader = new CubePGPuzzleLoader({\n id: \"4x4x4\",\n fullName: \"4\u00D74\u00D74 Cube\",\n});\n\ncube4x4x4.llSVG = getCached(async () => {\n return (\n await import(\"../dynamic/4x4x4/puzzles-dynamic-4x4x4\")\n ).cube4x4x4LLSVG;\n});\n\nexport { cube4x4x4 };\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const melindas2x2x2x2: PuzzleLoader = {\n id: \"melindas2x2x2x2\",\n fullName: \"Melinda's 2\u00D72\u00D72\u00D72\",\n inventedBy: [\"Melinda Green\"],\n // inventionYear: 20__, // TODO\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events\"))\n .melindas2x2x2x2OrbitJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events\")\n ).melindas2x2x2x2OrbitSVG;\n }),\n};\n", "export { eventInfo, wcaEventInfo, wcaEvents, twizzleEvents } from \"./events\";\nexport type { PuzzleLoader };\nexport { cube2x2x2, cube3x3x3 };\n\nimport { CubePGPuzzleLoader, PGPuzzleLoader } from \"./async/async-pg3d\";\nimport { cube2x2x2 } from \"./implementations/2x2x2\";\nimport { cube3x3x3 } from \"./implementations/3x3x3\";\nimport { clock } from \"./implementations/clock\";\nimport { fto } from \"./implementations/fto\";\nimport { megaminx } from \"./implementations/megaminx\";\nimport { pyraminx } from \"./implementations/pyraminx\";\nimport { square1 } from \"./implementations/square1\";\nimport { kilominx } from \"./implementations/kilominx\";\nimport type { PuzzleLoader } from \"./PuzzleLoader\";\nimport { rediCube } from \"./implementations/redi-cube\";\nimport { cube4x4x4 } from \"./implementations/4x4x4\";\nimport { melindas2x2x2x2 } from \"./implementations/melindas2x2x2x2\";\n\n/** @category All Puzzles */\nexport const puzzles: Record<string, PuzzleLoader> = {\n /******** Start of WCA Puzzles *******/\n \"3x3x3\": cube3x3x3,\n \"2x2x2\": cube2x2x2,\n \"4x4x4\": cube4x4x4,\n \"5x5x5\": new CubePGPuzzleLoader({ id: \"5x5x5\", fullName: \"5\u00D75\u00D75 Cube\" }),\n \"6x6x6\": new CubePGPuzzleLoader({ id: \"6x6x6\", fullName: \"6\u00D76\u00D76 Cube\" }),\n \"7x7x7\": new CubePGPuzzleLoader({ id: \"7x7x7\", fullName: \"7\u00D77\u00D77 Cube\" }),\n \"40x40x40\": new CubePGPuzzleLoader({\n id: \"40x40x40\",\n fullName: \"40\u00D740\u00D740 Cube\",\n }),\n // 3x3x3 Blindfolded\n // 3x3x3 Fewest Moves\n // 3x3x3 One-Handed\n clock,\n megaminx: megaminx,\n pyraminx,\n skewb: new PGPuzzleLoader({\n id: \"skewb\",\n fullName: \"Skewb\",\n inventedBy: [\"Tony Durham\"], // https://www.jaapsch.net/puzzles/skewb.htm\n // inventionYear: 1982, // 1982 is actually the year of Hofstadter's column.\n }),\n square1,\n // 4x4x4 Blindfolded\n // 5x5x5 Blindfolded\n /******** End of WCA puzzles ********/\n fto: fto,\n gigaminx: new PGPuzzleLoader({\n id: \"gigaminx\",\n fullName: \"Gigaminx\",\n inventedBy: [\"Tyler Fox\"],\n inventionYear: 2006, // Earliest date from https://www.twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1475\n }),\n master_tetraminx: new PGPuzzleLoader({\n pgID: \"master tetraminx\",\n id: \"master_tetraminx\",\n fullName: \"Master Tetraminx\",\n inventedBy: [\"Katsuhiko Okamoto\"], // Using master pyraminx: https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1352\n inventionYear: 2002, // Using master pyraminx: https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1352\n }),\n kilominx,\n redi_cube: rediCube,\n melindas2x2x2x2,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["from", "moveSourceInfo", "directedAmount"]
7
+ }