cubing 0.36.1 → 0.36.3

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 (61) hide show
  1. package/dist/esm/alg/index.js +1 -1
  2. package/dist/esm/bluetooth/index.js +5 -5
  3. package/dist/esm/{chunk-GNCANY6Y.js → chunk-32CPLOFX.js} +13 -13
  4. package/dist/esm/{chunk-RZEN653J.js → chunk-HYGNVDCH.js} +5 -5
  5. package/dist/esm/{chunk-PRIRJZQ6.js → chunk-L4PH24KU.js} +3 -3
  6. package/dist/esm/{chunk-U45QP7V5.js → chunk-L7WY7BIO.js} +3 -3
  7. package/dist/esm/{chunk-XVAB7A2O.js → chunk-N4YR7ABS.js} +8 -6
  8. package/dist/esm/chunk-N4YR7ABS.js.map +7 -0
  9. package/dist/esm/{chunk-UIGRNWPE.js → chunk-RSF22LKP.js} +2 -2
  10. package/dist/esm/{chunk-2OZSC5I6.js → chunk-TM7SKFJD.js} +3 -2
  11. package/dist/esm/{chunk-2OZSC5I6.js.map → chunk-TM7SKFJD.js.map} +2 -2
  12. package/dist/esm/{chunk-PY6UOVLX.js → chunk-VL47U5J6.js} +3 -3
  13. package/dist/esm/{chunk-MHS6WQK3.js → chunk-WWCSMIJO.js} +22 -9
  14. package/dist/esm/{chunk-MHS6WQK3.js.map → chunk-WWCSMIJO.js.map} +2 -2
  15. package/dist/esm/{chunk-P6BKQJQU.js → chunk-XM2O37XU.js} +4 -4
  16. package/dist/esm/{chunk-HPHL232Y.js → chunk-ZIFM3JF6.js} +2 -2
  17. package/dist/esm/kpuzzle/index.js +2 -2
  18. package/dist/esm/notation/index.js +6 -8
  19. package/dist/esm/protocol/index.js +4 -4
  20. package/dist/esm/puzzle-geometry/index.js +68 -68
  21. package/dist/esm/puzzle-geometry/index.js.map +2 -2
  22. package/dist/esm/puzzles/index.js +4 -4
  23. package/dist/esm/scramble/index.js +8 -8
  24. package/dist/esm/search/index.js +8 -8
  25. package/dist/esm/{search-dynamic-sgs-side-events-UBB6BCFU.js → search-dynamic-sgs-side-events-CUV4L6KG.js} +6 -6
  26. package/dist/esm/{search-dynamic-sgs-unofficial-BTJQTYIB.js → search-dynamic-sgs-unofficial-XFWM4IT6.js} +6 -6
  27. package/dist/esm/{search-dynamic-solve-4x4x4-AJIQM7XH.js → search-dynamic-solve-4x4x4-EA6XTQN2.js} +6 -6
  28. package/dist/esm/{search-dynamic-solve-kilominx-QJWWB2PY.js → search-dynamic-solve-kilominx-HCOWDD7C.js} +2 -2
  29. package/dist/esm/{search-worker-inside-generated-string-S4N5JFZV.js → search-worker-inside-generated-string-OA23ZSGX.js} +24 -24
  30. package/dist/esm/search-worker-inside-generated-string-OA23ZSGX.js.map +7 -0
  31. package/dist/esm/search-worker-js-entry-TWY4DMZQ.js +17 -0
  32. package/dist/esm/{search-worker-ts-entry-CSGPRXKH.js → search-worker-ts-entry-ZR4EM4NC.js} +2 -2
  33. package/dist/esm/stream/index.js +1 -1
  34. package/dist/esm/twisty/index.js +30 -20
  35. package/dist/esm/twisty/index.js.map +2 -2
  36. package/dist/esm/{twisty-dynamic-3d-SGTMU2OZ.js → twisty-dynamic-3d-HPZKQUDJ.js} +6 -6
  37. package/dist/esm/{twsearch-FMALADRY.js → twsearch-JCPGQMKW.js} +2 -2
  38. package/dist/types/notation/index.d.ts +2 -3
  39. package/dist/types/{outside-ef4dd4d1.d.ts → outside-7959a3cd.d.ts} +3 -2
  40. package/dist/types/scramble/index.d.ts +1 -1
  41. package/dist/types/search/index.d.ts +1 -1
  42. package/package.json +2 -2
  43. package/dist/esm/chunk-XVAB7A2O.js.map +0 -7
  44. package/dist/esm/search-worker-inside-generated-string-S4N5JFZV.js.map +0 -7
  45. package/dist/esm/search-worker-js-entry-DMVNDNGG.js +0 -17
  46. /package/dist/esm/{chunk-GNCANY6Y.js.map → chunk-32CPLOFX.js.map} +0 -0
  47. /package/dist/esm/{chunk-RZEN653J.js.map → chunk-HYGNVDCH.js.map} +0 -0
  48. /package/dist/esm/{chunk-PRIRJZQ6.js.map → chunk-L4PH24KU.js.map} +0 -0
  49. /package/dist/esm/{chunk-U45QP7V5.js.map → chunk-L7WY7BIO.js.map} +0 -0
  50. /package/dist/esm/{chunk-UIGRNWPE.js.map → chunk-RSF22LKP.js.map} +0 -0
  51. /package/dist/esm/{chunk-PY6UOVLX.js.map → chunk-VL47U5J6.js.map} +0 -0
  52. /package/dist/esm/{chunk-P6BKQJQU.js.map → chunk-XM2O37XU.js.map} +0 -0
  53. /package/dist/esm/{chunk-HPHL232Y.js.map → chunk-ZIFM3JF6.js.map} +0 -0
  54. /package/dist/esm/{search-dynamic-sgs-side-events-UBB6BCFU.js.map → search-dynamic-sgs-side-events-CUV4L6KG.js.map} +0 -0
  55. /package/dist/esm/{search-dynamic-sgs-unofficial-BTJQTYIB.js.map → search-dynamic-sgs-unofficial-XFWM4IT6.js.map} +0 -0
  56. /package/dist/esm/{search-dynamic-solve-4x4x4-AJIQM7XH.js.map → search-dynamic-solve-4x4x4-EA6XTQN2.js.map} +0 -0
  57. /package/dist/esm/{search-dynamic-solve-kilominx-QJWWB2PY.js.map → search-dynamic-solve-kilominx-HCOWDD7C.js.map} +0 -0
  58. /package/dist/esm/{search-worker-js-entry-DMVNDNGG.js.map → search-worker-js-entry-TWY4DMZQ.js.map} +0 -0
  59. /package/dist/esm/{search-worker-ts-entry-CSGPRXKH.js.map → search-worker-ts-entry-ZR4EM4NC.js.map} +0 -0
  60. /package/dist/esm/{twisty-dynamic-3d-SGTMU2OZ.js.map → twisty-dynamic-3d-HPZKQUDJ.js.map} +0 -0
  61. /package/dist/esm/{twsearch-FMALADRY.js.map → twsearch-JCPGQMKW.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  from
3
- } from "./chunk-PRIRJZQ6.js";
3
+ } from "./chunk-L4PH24KU.js";
4
4
 
5
5
  // src/cubing/twisty/debug.ts
6
6
  var twistyDebugGlobals = {
@@ -541,7 +541,7 @@ var StatsPanel = class {
541
541
  // src/cubing/twisty/heavy-code-imports/3d.ts
542
542
  var cachedConstructorProxy = null;
543
543
  async function proxy3D() {
544
- return cachedConstructorProxy ?? (cachedConstructorProxy = import("./twisty-dynamic-3d-SGTMU2OZ.js"));
544
+ return cachedConstructorProxy ?? (cachedConstructorProxy = import("./twisty-dynamic-3d-HPZKQUDJ.js"));
545
545
  }
546
546
  var THREEJS = from(
547
547
  async () => (await proxy3D()).T3I
@@ -1175,4 +1175,4 @@ export {
1175
1175
  proxy3D,
1176
1176
  THREEJS
1177
1177
  };
1178
- //# sourceMappingURL=chunk-PY6UOVLX.js.map
1178
+ //# sourceMappingURL=chunk-VL47U5J6.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  cube3x3x3KPuzzleDefinition
3
- } from "./chunk-PRIRJZQ6.js";
3
+ } from "./chunk-L4PH24KU.js";
4
4
  import {
5
5
  TraversalUp,
6
6
  functionFromTraversal
7
- } from "./chunk-2OZSC5I6.js";
7
+ } from "./chunk-TM7SKFJD.js";
8
8
 
9
9
  // src/cubing/notation/commonMetrics.ts
10
10
  var CommonMetric = /* @__PURE__ */ ((CommonMetric2) => {
@@ -146,21 +146,27 @@ function baseMetric(move) {
146
146
  function etmMetric(_move) {
147
147
  return 1;
148
148
  }
149
- function quantumMetric(move) {
149
+ function rangeBlockTurnMetric(move) {
150
150
  const fam = move.family;
151
151
  if (isCharUppercase(fam[0]) && fam[fam.length - 1] === "v" || fam === "x" || fam === "y" || fam === "z" || fam === "T") {
152
152
  return 0;
153
153
  } else {
154
- return Math.abs(move.amount);
154
+ return 1;
155
155
  }
156
156
  }
157
+ function quantumMetric(move) {
158
+ return Math.abs(move.amount) * rangeBlockTurnMetric(move);
159
+ }
157
160
  var countMoves = functionFromTraversal(CountMoves, [baseMetric]);
158
161
  var countMovesETM = functionFromTraversal(CountMoves, [etmMetric]);
159
- var countQuantumMoves = functionFromTraversal(CountMoves, [
162
+ var countRangeBlockQuantumMovesPG = functionFromTraversal(CountMoves, [
160
163
  quantumMetric
161
164
  ]);
162
- function countMetricMoves(puzzle, metric, alg) {
163
- if (puzzle.id === "3x3x3") {
165
+ var countRangeBlockMovesPG = functionFromTraversal(CountMoves, [
166
+ rangeBlockTurnMetric
167
+ ]);
168
+ function countMetricMoves(puzzleLoader, metric, alg) {
169
+ if (puzzleLoader.id === "3x3x3") {
164
170
  if (metric in costFactorsByMetric) {
165
171
  return functionFromTraversal(CountMoves, [
166
172
  (move) => countMove3x3x3(metric, move)
@@ -170,6 +176,14 @@ function countMetricMoves(puzzle, metric, alg) {
170
176
  switch (metric) {
171
177
  case "ETM" /* ExecutionTurnMetric */:
172
178
  return countMovesETM(alg);
179
+ case "RBTM" /* RangeBlockTurnMetric */:
180
+ if (puzzleLoader.pg) {
181
+ return countRangeBlockMovesPG(alg);
182
+ }
183
+ case "RBQTM" /* RangeBlockQuantumTurnMetric */:
184
+ if (puzzleLoader.pg) {
185
+ return countRangeBlockQuantumMovesPG(alg);
186
+ }
173
187
  }
174
188
  }
175
189
  throw new Error("Unsupported puzzle or metric.");
@@ -213,8 +227,7 @@ export {
213
227
  CommonMetricAlias,
214
228
  countMoves,
215
229
  countMovesETM,
216
- countQuantumMoves,
217
230
  countMetricMoves,
218
231
  countAnimatedLeaves
219
232
  };
220
- //# sourceMappingURL=chunk-MHS6WQK3.js.map
233
+ //# sourceMappingURL=chunk-WWCSMIJO.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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(\n experimentalCube3x3x3KPuzzleDefinition.experimentalDerivedMoves!,\n ),\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 quantumMetric(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 Math.abs(move.amount);\n }\n}\n\nexport const countMoves = functionFromTraversal(CountMoves, [baseMetric]);\nexport const countMovesETM = functionFromTraversal(CountMoves, [etmMetric]);\nexport const countQuantumMoves = functionFromTraversal(CountMoves, [\n quantumMetric,\n]);\n\n/**\n * Only implemented so far:\n *\n * - 3x3x3: OBTM, RBTM, ETM\n */\nexport function countMetricMoves(\n puzzle: PuzzleLoader,\n metric: CommonMetric,\n alg: Alg,\n): number {\n if (puzzle.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 }\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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",
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(\n experimentalCube3x3x3KPuzzleDefinition.experimentalDerivedMoves!,\n ),\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
6
  "names": ["CommonMetric", "CommonMetricAlias", "cache"]
7
7
  }
@@ -11,14 +11,14 @@ import {
11
11
  experimental3x3x3KPuzzle,
12
12
  from,
13
13
  getCached
14
- } from "./chunk-PRIRJZQ6.js";
14
+ } from "./chunk-L4PH24KU.js";
15
15
  import {
16
16
  KPuzzle
17
- } from "./chunk-UIGRNWPE.js";
17
+ } from "./chunk-RSF22LKP.js";
18
18
  import {
19
19
  Move,
20
20
  QuantumMove
21
- } from "./chunk-2OZSC5I6.js";
21
+ } from "./chunk-TM7SKFJD.js";
22
22
 
23
23
  // src/cubing/puzzles/events.ts
24
24
  var wcaEvents = {
@@ -660,4 +660,4 @@ export {
660
660
  cube3x3x3,
661
661
  puzzles
662
662
  };
663
- //# sourceMappingURL=chunk-P6BKQJQU.js.map
663
+ //# sourceMappingURL=chunk-XM2O37XU.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Alg
3
- } from "./chunk-2OZSC5I6.js";
3
+ } from "./chunk-TM7SKFJD.js";
4
4
 
5
5
  // src/cubing/search/inside/solve/parseSGS.ts
6
6
  function parseSGS(kpuzzle, sgs) {
@@ -85,4 +85,4 @@ function parseSGS(kpuzzle, sgs) {
85
85
  export {
86
86
  parseSGS
87
87
  };
88
- //# sourceMappingURL=chunk-HPHL232Y.js.map
88
+ //# sourceMappingURL=chunk-ZIFM3JF6.js.map
@@ -2,8 +2,8 @@ import {
2
2
  KPuzzle,
3
3
  KState,
4
4
  KTransformation
5
- } from "../chunk-UIGRNWPE.js";
6
- import "../chunk-2OZSC5I6.js";
5
+ } from "../chunk-RSF22LKP.js";
6
+ import "../chunk-TM7SKFJD.js";
7
7
  export {
8
8
  KPuzzle,
9
9
  KState,
@@ -4,19 +4,17 @@ import {
4
4
  countAnimatedLeaves,
5
5
  countMetricMoves,
6
6
  countMoves,
7
- countMovesETM,
8
- countQuantumMoves
9
- } from "../chunk-MHS6WQK3.js";
10
- import "../chunk-PRIRJZQ6.js";
11
- import "../chunk-UIGRNWPE.js";
12
- import "../chunk-2OZSC5I6.js";
7
+ countMovesETM
8
+ } from "../chunk-WWCSMIJO.js";
9
+ import "../chunk-L4PH24KU.js";
10
+ import "../chunk-RSF22LKP.js";
11
+ import "../chunk-TM7SKFJD.js";
13
12
  export {
14
13
  CommonMetric as ExperimentalCommonMetric,
15
14
  CommonMetricAlias as ExperimentalCommonMetricAlias,
16
15
  countAnimatedLeaves as experimentalCountAnimatedLeaves,
17
16
  countMetricMoves as experimentalCountMetricMoves,
18
17
  countMoves as experimentalCountMoves,
19
- countMovesETM as experimentalCountMovesETM,
20
- countQuantumMoves as experimentalCountQuantumMoves
18
+ countMovesETM as experimentalCountMovesETM
21
19
  };
22
20
  //# sourceMappingURL=index.js.map
@@ -5,10 +5,10 @@ import {
5
5
  spacedHexToBuffer,
6
6
  twizzleBinaryToBinaryComponents,
7
7
  twizzleBinaryToReid3x3x3
8
- } from "../chunk-U45QP7V5.js";
9
- import "../chunk-PRIRJZQ6.js";
10
- import "../chunk-UIGRNWPE.js";
11
- import "../chunk-2OZSC5I6.js";
8
+ } from "../chunk-L7WY7BIO.js";
9
+ import "../chunk-L4PH24KU.js";
10
+ import "../chunk-RSF22LKP.js";
11
+ import "../chunk-TM7SKFJD.js";
12
12
  export {
13
13
  binaryComponentsToReid3x3x3 as experimentalBinaryComponentsToReid3x3x3,
14
14
  bufferToSpacedHex as experimentalBufferToSpacedHex,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Move,
3
3
  QuantumMove
4
- } from "../chunk-2OZSC5I6.js";
4
+ } from "../chunk-TM7SKFJD.js";
5
5
 
6
6
  // src/cubing/puzzle-geometry/FaceNameSwizzler.ts
7
7
  var FaceNameSwizzler = class {
@@ -262,20 +262,20 @@ var MegaminxScramblingNotationMapper = class {
262
262
  return new Move("Uv", move.amount);
263
263
  }
264
264
  if (move.family === "x" && Math.abs(move.amount) === 2) {
265
- return new Move("DRRv", move.amount / 2);
265
+ return new Move("ERv", move.amount / 2);
266
266
  }
267
267
  }
268
268
  return this.child.notationToInternal(move);
269
269
  }
270
270
  // we never rewrite click moves to these moves.
271
271
  notationToExternal(move) {
272
- if (move.family === "DRRv" && Math.abs(move.amount) === 1) {
272
+ if (move.family === "ERv" && Math.abs(move.amount) === 1) {
273
273
  return new Move(
274
274
  new QuantumMove("x", move.innerLayer, move.outerLayer),
275
275
  move.amount * 2
276
276
  );
277
277
  }
278
- if (move.family === "DLLv" && Math.abs(move.amount) === 1) {
278
+ if (move.family === "ILv" && Math.abs(move.amount) === 1) {
279
279
  return new Move(
280
280
  new QuantumMove("x", move.innerLayer, move.outerLayer),
281
281
  -move.amount * 2
@@ -287,7 +287,7 @@ var MegaminxScramblingNotationMapper = class {
287
287
  move.amount
288
288
  );
289
289
  }
290
- if (move.family === "DDv") {
290
+ if (move.family === "Dv") {
291
291
  return new Move("y", -move.amount);
292
292
  }
293
293
  return this.child.notationToExternal(move);
@@ -2147,11 +2147,11 @@ function defaultnets() {
2147
2147
  ],
2148
2148
  // twelve faces: dodecahedron; U/F/R/F/BL/BR from megaminx
2149
2149
  12: [
2150
- ["U", "FF", "", "", "", ""],
2151
- ["FF", "U", "R", "FR", "FL", "L"],
2152
- ["R", "FF", "", "", "DR", ""],
2153
- ["DR", "R", "", "BB", "", ""],
2154
- ["BB", "DR", "BR", "BL", "DL", "DD"]
2150
+ ["U", "F", "", "", "", ""],
2151
+ ["F", "U", "R", "C", "A", "L"],
2152
+ ["R", "F", "", "", "E", ""],
2153
+ ["E", "R", "", "BF", "", ""],
2154
+ ["BF", "E", "BR", "BL", "I", "D"]
2155
2155
  ],
2156
2156
  // twenty faces: icosahedron
2157
2157
  20: [
@@ -2197,17 +2197,17 @@ function defaultcolors() {
2197
2197
  },
2198
2198
  12: {
2199
2199
  U: "#ffffff" /* White */,
2200
- FF: "#008800" /* DarkGreen */,
2200
+ F: "#008800" /* DarkGreen */,
2201
2201
  R: "#ff0000" /* Red */,
2202
- FR: "#ffffd0" /* Cream */,
2203
- FL: "#3399ff" /* Aqua */,
2202
+ C: "#ffffd0" /* Cream */,
2203
+ A: "#3399ff" /* Aqua */,
2204
2204
  L: "#8800dd" /* Purple */,
2205
- DR: "#ff66cc" /* Pink */,
2206
- BB: "#99ff00" /* Lime */,
2205
+ E: "#ff66cc" /* Pink */,
2206
+ BF: "#99ff00" /* Lime */,
2207
2207
  BR: "#0000ff" /* DarkBlue */,
2208
2208
  BL: "#ffff00" /* Yellow */,
2209
- DL: "#ff8000" /* Orange */,
2210
- DD: "#aaaaaa" /* Gray */
2209
+ I: "#ff8000" /* Orange */,
2210
+ D: "#aaaaaa" /* Gray */
2211
2211
  },
2212
2212
  20: {
2213
2213
  R: "#db69f0",
@@ -2264,72 +2264,72 @@ var orientationDefaults = {
2264
2264
  },
2265
2265
  12: {
2266
2266
  v: [
2267
- "URFF",
2268
- "UFFL",
2267
+ "URF",
2268
+ "UFL",
2269
2269
  "ULBL",
2270
2270
  "UBLBR",
2271
2271
  "UBRR",
2272
- "DDDRBB",
2273
- "DDBBDL",
2274
- "DDDLFL",
2275
- "DDFLFR",
2276
- "DDFRDR",
2277
- "LFLDL",
2278
- "FLLFF",
2279
- "FFFRFL",
2280
- "FRFFR",
2281
- "RDRFR",
2282
- "DRRBR",
2283
- "BRBBDR",
2284
- "BBBRBL",
2285
- "BLDLBB",
2286
- "DLBLL"
2272
+ "DEBF",
2273
+ "DBFI",
2274
+ "DIA",
2275
+ "DAC",
2276
+ "DCE",
2277
+ "LAI",
2278
+ "ALF",
2279
+ "FCA",
2280
+ "CFR",
2281
+ "REC",
2282
+ "ERBR",
2283
+ "BRBFE",
2284
+ "BFBRBL",
2285
+ "BLIBF",
2286
+ "IBLL"
2287
2287
  ],
2288
2288
  e: [
2289
- "UFF",
2289
+ "UF",
2290
2290
  "UR",
2291
2291
  "UBR",
2292
2292
  "UBL",
2293
2293
  "UL",
2294
- "DRR",
2295
- "DRBR",
2296
- "DRBB",
2297
- "DRDD",
2298
- "DRFR",
2299
- "DLBB",
2300
- "DLBL",
2301
- "DLL",
2302
- "DLFL",
2303
- "DLDD",
2304
- "FLFR",
2305
- "FRFF",
2306
- "FFFL",
2307
- "BBBR",
2294
+ "ER",
2295
+ "EBR",
2296
+ "EBF",
2297
+ "ED",
2298
+ "EC",
2299
+ "IBF",
2300
+ "IBL",
2301
+ "IL",
2302
+ "IA",
2303
+ "ID",
2304
+ "AC",
2305
+ "CF",
2306
+ "FA",
2307
+ "BFBR",
2308
2308
  "BRBL",
2309
- "BLBB",
2310
- "FRDD",
2311
- "FLDD",
2312
- "FLL",
2313
- "FFL",
2314
- "FFR",
2315
- "FRR",
2316
- "BBDD",
2309
+ "BLBF",
2310
+ "CD",
2311
+ "AD",
2312
+ "AL",
2313
+ "FL",
2314
+ "FR",
2315
+ "CR",
2316
+ "BFD",
2317
2317
  "BRR",
2318
2318
  "BLL"
2319
2319
  ],
2320
2320
  c: [
2321
- "UFF",
2322
- "FFU",
2323
- "DDBB",
2324
- "BBDD",
2325
- "FLDD",
2326
- "FRDD",
2321
+ "UF",
2322
+ "FU",
2323
+ "DBF",
2324
+ "BFD",
2325
+ "AD",
2326
+ "CD",
2327
2327
  "BRU",
2328
2328
  "BLU",
2329
- "LFL",
2330
- "RFL",
2331
- "DRBR",
2332
- "DLBL"
2329
+ "LA",
2330
+ "RA",
2331
+ "EBR",
2332
+ "IBL"
2333
2333
  ]
2334
2334
  },
2335
2335
  20: {
@@ -2422,7 +2422,7 @@ function defaultOrientations() {
2422
2422
  // FLUR towards viewer
2423
2423
  12: [
2424
2424
  ["U", [0, 1, 0]],
2425
- ["FF", [0, 0, 1]]
2425
+ ["F", [0, 0, 1]]
2426
2426
  ],
2427
2427
  // F towards viewer
2428
2428
  20: [