cubing 0.63.2 → 0.63.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 (62) hide show
  1. package/dist/bin/chunks/{chunk-52ODPET6.js → chunk-OI3YIXMQ.js} +2 -2
  2. package/dist/bin/order.js +1 -1
  3. package/dist/bin/puzzle-geometry-bin.js +1 -1
  4. package/dist/bin/scramble.js +1 -1
  5. package/dist/lib/cubing/{PuzzleLoader-R-puDLmC.d.ts → PuzzleLoader-Bp8zngUn.d.ts} +10 -0
  6. package/dist/lib/cubing/alg/index.d.ts +2 -2
  7. package/dist/lib/cubing/bluetooth/index.d.ts +2 -2
  8. package/dist/lib/cubing/chunks/chunk-44CFF24P.js +239 -0
  9. package/dist/lib/cubing/chunks/chunk-44CFF24P.js.map +7 -0
  10. package/dist/lib/cubing/chunks/chunk-DQGYYYHZ.js +1180 -0
  11. package/dist/lib/cubing/chunks/chunk-DQGYYYHZ.js.map +7 -0
  12. package/dist/lib/cubing/chunks/chunk-FTE3QI5X.js +1074 -0
  13. package/dist/lib/cubing/chunks/chunk-FTE3QI5X.js.map +7 -0
  14. package/dist/lib/cubing/chunks/chunk-FZBKZ5ZB.js +265 -0
  15. package/dist/lib/cubing/chunks/chunk-FZBKZ5ZB.js.map +7 -0
  16. package/dist/lib/cubing/chunks/chunk-OUM32GEA.js +239 -0
  17. package/dist/lib/cubing/chunks/chunk-OUM32GEA.js.map +7 -0
  18. package/dist/lib/cubing/chunks/chunk-SGJ5WPE4.js +1074 -0
  19. package/dist/lib/cubing/chunks/chunk-SGJ5WPE4.js.map +7 -0
  20. package/dist/lib/cubing/chunks/chunk-TAVR35KU.js +265 -0
  21. package/dist/lib/cubing/chunks/chunk-TAVR35KU.js.map +7 -0
  22. package/dist/lib/cubing/chunks/chunk-VRTKWZPL.js +10084 -0
  23. package/dist/lib/cubing/chunks/chunk-VRTKWZPL.js.map +7 -0
  24. package/dist/lib/cubing/chunks/chunk-VSMFYTG6.js +10086 -0
  25. package/dist/lib/cubing/chunks/chunk-VSMFYTG6.js.map +7 -0
  26. package/dist/lib/cubing/chunks/inside-IHWQVDVU.js +564 -0
  27. package/dist/lib/cubing/chunks/inside-IHWQVDVU.js.map +7 -0
  28. package/dist/lib/cubing/chunks/inside-L2JI2BEY.js +564 -0
  29. package/dist/lib/cubing/chunks/inside-L2JI2BEY.js.map +7 -0
  30. package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-MXHP7O4R.js +1890 -0
  31. package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-MXHP7O4R.js.map +7 -0
  32. package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-XFECDWOF.js +1890 -0
  33. package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-XFECDWOF.js.map +7 -0
  34. package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-CM33KT7L.js +1267 -0
  35. package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-CM33KT7L.js.map +7 -0
  36. package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-Q4LLHL2O.js +1267 -0
  37. package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-Q4LLHL2O.js.map +7 -0
  38. package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-COSEVJBV.js +2922 -0
  39. package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-COSEVJBV.js.map +7 -0
  40. package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NANDMURR.js +2922 -0
  41. package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NANDMURR.js.map +7 -0
  42. package/dist/lib/cubing/chunks/twisty-dynamic-3d-5NZRNZ7C.js +1881 -0
  43. package/dist/lib/cubing/chunks/twisty-dynamic-3d-5NZRNZ7C.js.map +7 -0
  44. package/dist/lib/cubing/chunks/twisty-dynamic-3d-VGZIQ64W.js +1927 -0
  45. package/dist/lib/cubing/chunks/twisty-dynamic-3d-VGZIQ64W.js.map +7 -0
  46. package/dist/lib/cubing/chunks/twisty-dynamic-3d-XLUOPCLN.js +1881 -0
  47. package/dist/lib/cubing/chunks/twisty-dynamic-3d-XLUOPCLN.js.map +7 -0
  48. package/dist/lib/cubing/{events-IfSwQLYm.d.ts → events-CewDA1aS.d.ts} +1 -1
  49. package/dist/lib/cubing/{index-btIxbuNp.d.ts → index-DabjED-w.d.ts} +1 -1
  50. package/dist/lib/cubing/kpuzzle/index.d.ts +1 -1
  51. package/dist/lib/cubing/notation/index.d.ts +1 -1
  52. package/dist/lib/cubing/protocol/index.d.ts +1 -1
  53. package/dist/lib/cubing/puzzle-geometry/index.d.ts +2 -2
  54. package/dist/lib/cubing/puzzles/index.d.ts +1 -1
  55. package/dist/lib/cubing/scramble/index.d.ts +2 -2
  56. package/dist/lib/cubing/search/index.d.ts +3 -3
  57. package/dist/lib/cubing/stream/index.d.ts +3 -3
  58. package/dist/lib/cubing/twisty/index.d.ts +2 -2
  59. package/dist/lib/cubing/twisty/index.js +37 -4
  60. package/dist/lib/cubing/twisty/index.js.map +3 -3
  61. package/package.json +1 -1
  62. /package/dist/bin/chunks/{chunk-52ODPET6.js.map → chunk-OI3YIXMQ.js.map} +0 -0
@@ -0,0 +1,564 @@
1
+ import {
2
+ addOrientationSuffix,
3
+ expose,
4
+ initialize333,
5
+ mustBeInsideWorker,
6
+ random333OrientedScramble,
7
+ random333Scramble,
8
+ setIsInsideWorker,
9
+ solve333
10
+ } from "./chunk-SGJ5WPE4.js";
11
+ import {
12
+ LazyPromise,
13
+ countMoves,
14
+ cube2x2x2,
15
+ puzzles
16
+ } from "./chunk-VRTKWZPL.js";
17
+ import {
18
+ KPattern,
19
+ KPuzzle
20
+ } from "./chunk-RINY3U6G.js";
21
+ import {
22
+ Alg,
23
+ AlgBuilder,
24
+ Move
25
+ } from "./chunk-O6HEZXGY.js";
26
+
27
+ // src/cubing/search/inside/solve/puzzles/2x2x2.ts
28
+ import { randomPermuteInPlace, randomUIntBelow } from "random-uint-below";
29
+
30
+ // src/cubing/search/inside/solve/tremble.ts
31
+ import { randomChoice } from "random-uint-below";
32
+ var DEFAULT_STAGE1_DEPTH_LIMIT = 2;
33
+ var DOUBLECHECK_PLACED_PIECES = true;
34
+ var DEBUG = false;
35
+ function calculateMoves(kpuzzle, moveNames) {
36
+ const searchMoves = [];
37
+ for (const moveName of moveNames) {
38
+ const rootMove = new Move(moveName);
39
+ if (rootMove.amount !== 1) {
40
+ throw new Error(
41
+ "SGS cannot handle def moves with an amount other than 1 yet."
42
+ );
43
+ }
44
+ let transformation = kpuzzle.identityTransformation();
45
+ for (let i = 1; ; i++) {
46
+ transformation = transformation.applyMove(rootMove);
47
+ if (transformation.isIdentityTransformation()) {
48
+ break;
49
+ }
50
+ searchMoves.push({
51
+ move: rootMove.modified({ amount: i }),
52
+ transformation
53
+ });
54
+ }
55
+ }
56
+ return searchMoves;
57
+ }
58
+ var TrembleSolver = class {
59
+ constructor(kpuzzle, sgs, trembleMoveNames) {
60
+ this.kpuzzle = kpuzzle;
61
+ this.sgs = sgs;
62
+ this.searchMoves = calculateMoves(
63
+ this.kpuzzle,
64
+ trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves)
65
+ );
66
+ }
67
+ searchMoves;
68
+ // public badRandomMoves(): KSolvePuzzleState {
69
+ // return badRandomMoves(this.moves, this.ksp);
70
+ // }
71
+ async solve(pattern, stage1DepthLimit = DEFAULT_STAGE1_DEPTH_LIMIT, quantumMoveOrder) {
72
+ const transformation = pattern.experimentalToTransformation();
73
+ if (!transformation) {
74
+ throw new Error(
75
+ "distinguishable pieces are not supported in tremble solver yt"
76
+ );
77
+ }
78
+ let bestAlg = null;
79
+ let bestLen = 1e6;
80
+ const recur = (recursiveTransformation, togo, sofar) => {
81
+ if (togo === 0) {
82
+ const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);
83
+ if (!sgsAlg) {
84
+ return;
85
+ }
86
+ const newAlg = sofar.concat(sgsAlg).experimentalSimplify({
87
+ cancel: {
88
+ directional: "any-direction",
89
+ puzzleSpecificModWrap: "canonical-centered"
90
+ },
91
+ puzzleSpecificSimplifyOptions: { quantumMoveOrder }
92
+ });
93
+ const len = countMoves(newAlg);
94
+ if (bestAlg === null || len < bestLen) {
95
+ if (DEBUG) {
96
+ console.log(`New best (${len} moves): ${newAlg.toString()}`);
97
+ console.log(`Tremble moves are: ${sofar.toString()}`);
98
+ }
99
+ bestAlg = newAlg;
100
+ bestLen = len;
101
+ }
102
+ return;
103
+ }
104
+ for (const searchMove of this.searchMoves) {
105
+ recur(
106
+ recursiveTransformation.applyTransformation(
107
+ searchMove.transformation
108
+ ),
109
+ togo - 1,
110
+ sofar.concat([searchMove.move])
111
+ );
112
+ }
113
+ };
114
+ for (let d = 0; d <= stage1DepthLimit; d++) {
115
+ recur(transformation, d, new Alg());
116
+ }
117
+ if (bestAlg === null) {
118
+ throw new Error("SGS search failed.");
119
+ }
120
+ return bestAlg;
121
+ }
122
+ sgsPhaseSolve(initialTransformation, bestLenSofar) {
123
+ const algBuilder = new AlgBuilder();
124
+ let transformation = initialTransformation;
125
+ for (const step of this.sgs.ordering) {
126
+ const cubieSeq = step.pieceOrdering;
127
+ let key = "";
128
+ const inverseTransformation = transformation.invert();
129
+ for (let i = 0; i < cubieSeq.length; i++) {
130
+ const loc = cubieSeq[i];
131
+ const orbitName = loc.orbitName;
132
+ const idx = loc.permutationIdx;
133
+ key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;
134
+ }
135
+ const info = step.lookup[key];
136
+ if (!info) {
137
+ throw new Error("Missing algorithm in sgs or esgs?");
138
+ }
139
+ algBuilder.experimentalPushAlg(info.alg);
140
+ if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {
141
+ return null;
142
+ }
143
+ transformation = transformation.applyTransformation(info.transformation);
144
+ if (DOUBLECHECK_PLACED_PIECES) {
145
+ for (let i = 0; i < cubieSeq.length; i++) {
146
+ const location = cubieSeq[i];
147
+ const orbitName = location.orbitName;
148
+ const idx = location.permutationIdx;
149
+ if (transformation.transformationData[orbitName].permutation[idx] !== idx || transformation.transformationData[orbitName].orientationDelta[idx] !== 0) {
150
+ throw new Error("bad SGS :-(");
151
+ }
152
+ }
153
+ }
154
+ }
155
+ return algBuilder.toAlg();
156
+ }
157
+ };
158
+
159
+ // src/cubing/search/inside/solve/twips.ts
160
+ var twipsPromise = new LazyPromise(
161
+ async () => import("./twips-YHXBF55O.js")
162
+ );
163
+ async function wasmTwips(def, pattern, options) {
164
+ const { wasmTwips: wasmTwips2 } = await twipsPromise;
165
+ return wasmTwips2(def, pattern, options);
166
+ }
167
+ async function wasmRandomScrambleForEvent(eventID) {
168
+ const { wasmRandomScrambleForEvent: wasmRandomScrambleForEvent2 } = await twipsPromise;
169
+ return wasmRandomScrambleForEvent2(eventID);
170
+ }
171
+ async function wasmDeriveScrambleForEvent(derivationSeedHex, derivationSaltHierarchy, eventID) {
172
+ const { wasmDeriveScrambleForEvent: wasmDeriveScrambleForEvent2 } = await twipsPromise;
173
+ return wasmDeriveScrambleForEvent2(
174
+ derivationSeedHex,
175
+ derivationSaltHierarchy,
176
+ eventID
177
+ );
178
+ }
179
+
180
+ // src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts
181
+ var searchDynamicSideEvents = new LazyPromise(
182
+ () => import("./search-dynamic-sgs-side-events-MXHP7O4R.js")
183
+ );
184
+
185
+ // src/cubing/search/inside/solve/puzzles/2x2x2.ts
186
+ var cachedTrembleSolver = null;
187
+ async function getCachedTrembleSolver() {
188
+ return cachedTrembleSolver || (cachedTrembleSolver = (async () => {
189
+ const sgsCachedData = await (await searchDynamicSideEvents).cachedData222();
190
+ return new TrembleSolver(
191
+ await puzzles["2x2x2"].kpuzzle(),
192
+ sgsCachedData,
193
+ "URFLBD".split("")
194
+ );
195
+ })());
196
+ }
197
+ async function preInitialize222() {
198
+ await getCachedTrembleSolver();
199
+ }
200
+ async function solve222(pattern) {
201
+ mustBeInsideWorker();
202
+ return wasmTwips((await cube2x2x2.kpuzzle()).definition, pattern, {
203
+ generatorMoves: "UFLR".split("")
204
+ });
205
+ }
206
+
207
+ // src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts
208
+ var dynamic4x4x4Solver = new LazyPromise(
209
+ () => import("./search-dynamic-solve-4x4x4-NANDMURR.js")
210
+ );
211
+
212
+ // src/cubing/search/inside/solve/puzzles/4x4x4.ts
213
+ var randomSuffixes = [
214
+ [null, "x", "x2", "x'", "z", "z'"],
215
+ [null, "y", "y2", "y'"]
216
+ ];
217
+ async function initialize444() {
218
+ return (await dynamic4x4x4Solver).initialize();
219
+ }
220
+ async function random444Scramble() {
221
+ mustBeInsideWorker();
222
+ return (await dynamic4x4x4Solver).random444Scramble();
223
+ }
224
+ async function random444OrientedScramble() {
225
+ return addOrientationSuffix(await random444Scramble(), randomSuffixes);
226
+ }
227
+
228
+ // src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts
229
+ var dynamicFTO = new LazyPromise(
230
+ () => import("./search-dynamic-solve-fto-UZMNOI6U.js")
231
+ );
232
+
233
+ // src/cubing/search/inside/solve/puzzles/fto.ts
234
+ var dynamic = new LazyPromise(
235
+ () => import("./search-dynamic-sgs-unofficial-CM33KT7L.js")
236
+ );
237
+ async function randomFTOScramble() {
238
+ mustBeInsideWorker();
239
+ return new Alg(await (await dynamicFTO).getRandomFTOScramble());
240
+ }
241
+
242
+ // src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts
243
+ var dynamicMasterTetraminxSolver = new LazyPromise(
244
+ () => import("./search-dynamic-solve-master_tetraminx-GIS7T5B7.js")
245
+ );
246
+
247
+ // src/cubing/search/inside/solve/puzzles/master_tetraminx.ts
248
+ async function randomMasterTetraminxScramble() {
249
+ mustBeInsideWorker();
250
+ return new Alg(
251
+ await (await dynamicMasterTetraminxSolver).randomMasterTetraminxScrambleString()
252
+ );
253
+ }
254
+
255
+ // src/cubing/search/inside/solve/puzzles/megaminx.ts
256
+ var TREMBLE_DEPTH = 2;
257
+ var cachedTrembleSolver2 = null;
258
+ async function getCachedTrembleSolver2() {
259
+ return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
260
+ const json = await (await searchDynamicSideEvents).cachedSGSDataMegaminx();
261
+ return new TrembleSolver(
262
+ await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),
263
+ json,
264
+ ["U", "R", "F", "L", "BR", "BL", "FR", "FL", "DR", "DL", "B", "D"]
265
+ );
266
+ })());
267
+ }
268
+ async function solveMegaminx(pattern) {
269
+ mustBeInsideWorker();
270
+ const trembleSolver = await getCachedTrembleSolver2();
271
+ const patternDataWithoutMO = structuredClone(
272
+ pattern.patternData
273
+ );
274
+ patternDataWithoutMO["CENTERS"].orientation = new Array(12).fill(0);
275
+ const patternWithoutMO = new KPattern(
276
+ await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),
277
+ patternDataWithoutMO
278
+ );
279
+ const alg = await trembleSolver.solve(
280
+ patternWithoutMO,
281
+ TREMBLE_DEPTH,
282
+ () => 5
283
+ // TODO: Attach quantum move order lookup to puzzle.
284
+ );
285
+ return alg;
286
+ }
287
+
288
+ // src/cubing/search/inside/solve/puzzles/pyraminx.ts
289
+ var TREMBLE_DEPTH2 = 3;
290
+ var cachedTrembleSolver3 = null;
291
+ async function getCachedTrembleSolver3() {
292
+ return cachedTrembleSolver3 || (cachedTrembleSolver3 = (async () => {
293
+ const json = await (await searchDynamicSideEvents).sgsDataPyraminx();
294
+ return new TrembleSolver(
295
+ await puzzles["pyraminx"].kpuzzle(),
296
+ json,
297
+ "RLUB".split("")
298
+ );
299
+ })());
300
+ }
301
+ async function solvePyraminx(pattern) {
302
+ mustBeInsideWorker();
303
+ const trembleSolver = await getCachedTrembleSolver3();
304
+ const alg = await trembleSolver.solve(pattern, TREMBLE_DEPTH2, () => 3);
305
+ return alg;
306
+ }
307
+
308
+ // src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts
309
+ var searchDynamicUnofficial = new LazyPromise(
310
+ () => import("./search-dynamic-sgs-unofficial-CM33KT7L.js")
311
+ );
312
+
313
+ // src/cubing/search/inside/solve/puzzles/redi_cube.ts
314
+ async function randomRediCubeScramble() {
315
+ mustBeInsideWorker();
316
+ return (await searchDynamicUnofficial).getRandomRediCubeScramble();
317
+ }
318
+
319
+ // src/cubing/search/inside/solve/puzzles/skewb.ts
320
+ var TREMBLE_DEPTH3 = 3;
321
+ var cachedTrembleSolver4 = null;
322
+ async function getCachedTrembleSolver4() {
323
+ return cachedTrembleSolver4 || (cachedTrembleSolver4 = (async () => {
324
+ const json = await (await searchDynamicSideEvents).sgsDataSkewb();
325
+ return new TrembleSolver(
326
+ await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),
327
+ json,
328
+ "RLUB".split("")
329
+ );
330
+ })());
331
+ }
332
+ async function resetCenterOrientation(pattern) {
333
+ return new KPattern(
334
+ await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),
335
+ {
336
+ CORNERS: pattern.patternData["CORNERS"],
337
+ CENTERS: {
338
+ pieces: pattern.patternData["CENTERS"].pieces,
339
+ orientation: new Array(6).fill(0)
340
+ }
341
+ }
342
+ );
343
+ }
344
+ async function solveSkewb(pattern) {
345
+ mustBeInsideWorker();
346
+ const trembleSolver = await getCachedTrembleSolver4();
347
+ const alg = await trembleSolver.solve(
348
+ await resetCenterOrientation(pattern),
349
+ TREMBLE_DEPTH3,
350
+ (quantumMove) => quantumMove.family === "y" ? 4 : 3
351
+ // TODO: Attach quantum move order lookup to puzzle.
352
+ );
353
+ return alg;
354
+ }
355
+
356
+ // src/cubing/search/inside/api.ts
357
+ var IDLE_PREFETCH_TIMEOUT_MS = 1e3;
358
+ setIsInsideWorker(true);
359
+ var DEBUG_MEASURE_PERF = true;
360
+ function setDebugMeasurePerf(newDebugMeasurePerf) {
361
+ DEBUG_MEASURE_PERF = newDebugMeasurePerf;
362
+ }
363
+ function now() {
364
+ return (typeof performance === "undefined" ? Date : performance).now();
365
+ }
366
+ async function measurePerf(name, f, options) {
367
+ if (!DEBUG_MEASURE_PERF) {
368
+ return f();
369
+ }
370
+ const start = now();
371
+ const result = f();
372
+ if (result?.then) {
373
+ await result;
374
+ }
375
+ const end = now();
376
+ console.warn(
377
+ `${name}${options?.isPrefetch ? " (prefetched)" : ""}: ${Math.round(
378
+ end - start
379
+ )}ms`
380
+ );
381
+ return result;
382
+ }
383
+ var prefetchPromises = /* @__PURE__ */ new Map();
384
+ var queuedPrefetchTimeoutID = null;
385
+ var scrambleActivityLock;
386
+ async function randomScrambleForEvent(eventID, options) {
387
+ return scrambleActivityLock = (async () => {
388
+ await scrambleActivityLock;
389
+ function wasm() {
390
+ return measurePerf(
391
+ `wasmRandomScrambleForEvent(${JSON.stringify(eventID)})`,
392
+ () => wasmRandomScrambleForEvent(eventID),
393
+ {
394
+ isPrefetch: options?.isPrefetch
395
+ }
396
+ );
397
+ }
398
+ switch (eventID) {
399
+ // case "333":
400
+ case "222":
401
+ return (await wasm()).experimentalSimplify({
402
+ puzzleSpecificSimplifyOptions: {
403
+ quantumMoveOrder: () => 4
404
+ }
405
+ });
406
+ // case "444":
407
+ case "555":
408
+ case "666":
409
+ case "777":
410
+ // case "333bf":
411
+ case "333fm":
412
+ // case "333oh":
413
+ case "clock":
414
+ case "minx":
415
+ case "pyram":
416
+ case "skewb":
417
+ case "sq1":
418
+ // case "444bf":
419
+ case "555bf":
420
+ // case "333mbf":
421
+ // case "fto":
422
+ // case "master_tetraminx":
423
+ case "kilominx":
424
+ // case "redi_cube":
425
+ case "baby_fto":
426
+ return wasm();
427
+ case "333":
428
+ case "333oh":
429
+ case "333ft":
430
+ return measurePerf("random333Scramble", random333Scramble, {
431
+ isPrefetch: options?.isPrefetch
432
+ });
433
+ case "333bf":
434
+ case "333mbf":
435
+ return measurePerf(
436
+ "random333OrientedScramble",
437
+ random333OrientedScramble
438
+ );
439
+ case "444":
440
+ return measurePerf("random444Scramble", random444Scramble, {
441
+ isPrefetch: options?.isPrefetch
442
+ });
443
+ case "444bf":
444
+ return measurePerf(
445
+ "random444OrientedScramble",
446
+ random444OrientedScramble
447
+ );
448
+ case "fto":
449
+ return measurePerf("randomFTOScramble", randomFTOScramble, {
450
+ isPrefetch: options?.isPrefetch
451
+ });
452
+ case "master_tetraminx":
453
+ return measurePerf(
454
+ "randomMasterTetraminxScramble",
455
+ randomMasterTetraminxScramble
456
+ );
457
+ case "redi_cube":
458
+ return measurePerf("randomRediCubeScramble", randomRediCubeScramble, {
459
+ isPrefetch: options?.isPrefetch
460
+ });
461
+ default:
462
+ throw new Error(`unsupported event: ${eventID}`);
463
+ }
464
+ })();
465
+ }
466
+ var currentPrefetchLevel = "auto" /* Auto */;
467
+ var insideAPI = {
468
+ initialize: async (eventID) => {
469
+ switch (eventID) {
470
+ case "222":
471
+ return measurePerf("preInitialize222", preInitialize222);
472
+ case "333":
473
+ case "333oh":
474
+ case "333ft":
475
+ return measurePerf("initialize333", initialize333);
476
+ case "444":
477
+ return measurePerf("initialize444", initialize444);
478
+ default:
479
+ throw new Error(`unsupported event: ${eventID}`);
480
+ }
481
+ },
482
+ setScramblePrefetchLevel(prefetchLevel) {
483
+ currentPrefetchLevel = prefetchLevel;
484
+ },
485
+ randomScrambleForEvent: async (eventID) => {
486
+ let promise = prefetchPromises.get(eventID);
487
+ if (promise) {
488
+ prefetchPromises.delete(eventID);
489
+ } else {
490
+ promise = randomScrambleForEvent(eventID);
491
+ }
492
+ if (currentPrefetchLevel !== "none" /* None */) {
493
+ promise.then(() => {
494
+ if (queuedPrefetchTimeoutID) {
495
+ clearTimeout(queuedPrefetchTimeoutID);
496
+ }
497
+ queuedPrefetchTimeoutID = setTimeout(
498
+ () => {
499
+ prefetchPromises.set(
500
+ eventID,
501
+ randomScrambleForEvent(eventID, {
502
+ isPrefetch: true
503
+ })
504
+ );
505
+ },
506
+ currentPrefetchLevel === "immediate" /* Immediate */ ? 0 : IDLE_PREFETCH_TIMEOUT_MS
507
+ );
508
+ });
509
+ }
510
+ return promise;
511
+ },
512
+ randomScrambleStringForEvent: async (eventID) => {
513
+ return (await insideAPI.randomScrambleForEvent(eventID)).toString();
514
+ },
515
+ deriveScrambleStringForEvent: async (derivationSeedHex, derivationSaltHierarchy, eventID) => {
516
+ const scramble = await measurePerf(
517
+ `deriveScrambleForEvent(\u2026, ${JSON.stringify(eventID)})`,
518
+ () => wasmDeriveScrambleForEvent(
519
+ derivationSeedHex,
520
+ derivationSaltHierarchy,
521
+ eventID
522
+ )
523
+ );
524
+ return scramble.toString();
525
+ },
526
+ solve333ToString: async (patternData) => {
527
+ const pattern = new KPattern(await puzzles["3x3x3"].kpuzzle(), patternData);
528
+ return (await solve333(pattern)).toString();
529
+ },
530
+ solve222ToString: async (patternData) => {
531
+ const pattern = new KPattern(await puzzles["2x2x2"].kpuzzle(), patternData);
532
+ return (await solve222(pattern)).toString();
533
+ },
534
+ solveSkewbToString: async (patternData) => {
535
+ const pattern = new KPattern(await puzzles["skewb"].kpuzzle(), patternData);
536
+ return (await solveSkewb(pattern)).toString();
537
+ },
538
+ solvePyraminxToString: async (patternData) => {
539
+ const pattern = new KPattern(
540
+ await puzzles["pyraminx"].kpuzzle(),
541
+ patternData
542
+ );
543
+ return (await solvePyraminx(pattern)).toString();
544
+ },
545
+ solveMegaminxToString: async (patternData) => {
546
+ const pattern = new KPattern(
547
+ await puzzles["megaminx"].kpuzzle(),
548
+ patternData
549
+ );
550
+ return (await solveMegaminx(pattern)).toString();
551
+ },
552
+ setDebugMeasurePerf: async (measure) => {
553
+ setDebugMeasurePerf(measure);
554
+ },
555
+ solveTwipsToString: async (def, patternData, options) => {
556
+ const kpuzzle = new KPuzzle(def);
557
+ const pattern = new KPattern(kpuzzle, patternData);
558
+ return (await wasmTwips(def, pattern, options)).toString();
559
+ }
560
+ };
561
+
562
+ // src/cubing/search/inside/index.ts
563
+ expose(insideAPI);
564
+ //# sourceMappingURL=inside-L2JI2BEY.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/twips.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.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/dynamic/fto/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/fto.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/api.ts", "../../../../src/cubing/search/inside/index.ts"],
4
+ "sourcesContent": ["import { randomPermuteInPlace, randomUIntBelow } from \"random-uint-below\";\nimport type { Alg } from \"../../../../alg\";\nimport type { KPuzzle } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { cube2x2x2, puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { wasmTwips } from \"../twips\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\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\n// TODO: fix def consistency.\nexport async function solve222(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return wasmTwips((await cube2x2x2.kpuzzle()).definition, pattern, {\n generatorMoves: \"UFLR\".split(\"\"),\n });\n}\n\n// TODO: factor out and test.\nfunction mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n pattern: KPattern,\n options?: { orientationSum?: number },\n): void {\n randomPermuteInPlace(pattern.patternData[orbitName].pieces);\n\n const orbitDefinition = kpuzzle.lookupOrbitDefinition(orbitName);\n const ori = pattern.patternData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n const o = randomUIntBelow(orbitDefinition.numOrientations);\n ori[i] = o;\n sum += o;\n }\n\n // console.log(\"aaaa\", options && \"orientationSum\" in options);\n if (options && \"orientationSum\" in options) {\n // console.log(\"sfdsf\", options!.orientationSum),\n ori[0] =\n (((ori[0] + options.orientationSum! - sum) %\n orbitDefinition.numOrientations) +\n orbitDefinition.numOrientations) %\n orbitDefinition.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222Pattern(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const patternCopy: KPattern = new KPattern(\n kpuzzle,\n structuredClone(kpuzzle.defaultPattern().patternData),\n ); // TODO\n mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", patternCopy, {\n orientationSum: 0,\n });\n return patternCopy;\n}\n", "import { randomChoice } from \"random-uint-below\";\nimport { Alg, AlgBuilder, Move, type QuantumMove } from \"../../../alg\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle\";\nimport type { KPattern } from \"../../../kpuzzle/KPattern\";\nimport { experimentalCountMoves } from \"../../../notation\";\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 for (const moveName of moveNames) {\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; ; 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 pattern: KPattern,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = pattern.experimentalToTransformation();\n if (!transformation) {\n throw new Error(\n \"distinguishable pieces are not supported in tremble solver yt\",\n );\n }\n let bestAlg: Alg | null = null;\n let bestLen = 1000000;\n const recur = (\n recursiveTransformation: KTransformation, // TODO: Support KStatq1\n togo: number,\n sofar: Alg,\n ) => {\n // console.log(\"recur\");\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);\n if (!sgsAlg) {\n return;\n }\n // console.log(\"sgs done!\", sofar.toString(), \"|\", sgsAlg.toString());\n const newAlg = sofar.concat(sgsAlg).experimentalSimplify({\n cancel: {\n directional: \"any-direction\",\n puzzleSpecificModWrap: \"canonical-centered\",\n },\n puzzleSpecificSimplifyOptions: { quantumMoveOrder },\n });\n\n const len = experimentalCountMoves(newAlg);\n if (bestAlg === null || len < bestLen) {\n if (DEBUG) {\n console.log(`New best (${len} moves): ${newAlg.toString()}`);\n console.log(`Tremble moves are: ${sofar.toString()}`);\n }\n bestAlg = newAlg;\n bestLen = len;\n }\n return;\n }\n for (const searchMove of this.searchMoves) {\n recur(\n recursiveTransformation.applyTransformation(\n searchMove.transformation,\n ),\n togo - 1,\n sofar.concat([searchMove.move]),\n );\n }\n };\n for (let d = 0; d <= stage1DepthLimit; d++) {\n recur(transformation, d, new Alg());\n }\n if (bestAlg === null) {\n throw new Error(\"SGS search failed.\");\n }\n return bestAlg;\n }\n\n private sgsPhaseSolve(\n initialTransformation: KTransformation, // TODO: Handle KPattern\n bestLenSofar: number,\n ): Alg | null {\n // const pieceNames = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\n\n // function loggo(s: string) {\n // // console.warn(s);\n // // document.body.appendChild(document.createElement(\"div\")).textContent = s;\n // }\n\n // console.log(\"sgsPhaseSolve\");\n const algBuilder = new AlgBuilder();\n let transformation = initialTransformation;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseTransformation = transformation.invert();\n for (let i = 0; i < cubieSeq.length; i++) {\n const loc = cubieSeq[i];\n const orbitName = loc.orbitName;\n const idx = loc.permutationIdx;\n key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;\n }\n // console.log(key, step.lookup);\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {\n return null;\n }\n transformation = transformation.applyTransformation(info.transformation);\n if (DOUBLECHECK_PLACED_PIECES) {\n for (let i = 0; i < cubieSeq.length; i++) {\n const location = cubieSeq[i];\n const orbitName = location.orbitName;\n const idx = location.permutationIdx;\n if (\n transformation.transformationData[orbitName].permutation[idx] !==\n idx ||\n transformation.transformationData[orbitName].orientationDelta[\n idx\n ] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport function randomPatternFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): KPattern {\n let transformation = kpuzzle.identityTransformation();\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n transformation = transformation.applyTransformation(\n sgsAction.transformation,\n );\n }\n return transformation.toKPattern();\n}\n", "import type { Alg } from \"../../../alg\";\nimport type {\n KPattern,\n KPatternData,\n KPuzzleDefinition,\n} from \"../../../kpuzzle\";\nimport { LazyPromise } from \"../../../twisty/cubing-private\";\n\nexport const twipsPromise = new LazyPromise(\n async () => import(\"../../../vendor/mpl/twips\"),\n);\n\nexport interface TwipsOptions {\n // TODO: start prune depth?\n generatorMoves?: string[];\n targetPattern?: KPatternData;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function wasmTwips(\n def: KPuzzleDefinition,\n pattern: KPattern,\n options?: TwipsOptions,\n): Promise<Alg> {\n const { wasmTwips } = await twipsPromise;\n return wasmTwips(def, pattern, options);\n}\n\nexport async function wasmRandomScrambleForEvent(\n eventID: string,\n): Promise<Alg> {\n const { wasmRandomScrambleForEvent } = await twipsPromise;\n return wasmRandomScrambleForEvent(eventID);\n}\n\nexport async function wasmDeriveScrambleForEvent(\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n): Promise<Alg> {\n const { wasmDeriveScrambleForEvent } = await twipsPromise;\n return wasmDeriveScrambleForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n );\n}\n", "import { LazyPromise } from \"../../../../../../twisty/cubing-private\";\n\nexport const searchDynamicSideEvents = new LazyPromise(\n () => import(\"./search-dynamic-sgs-side-events\"),\n);\n", "import { LazyPromise } from \"../../../../../../twisty/cubing-private\";\n\nexport const dynamic4x4x4Solver = new LazyPromise(\n () => import(\"./search-dynamic-solve-4x4x4\"),\n);\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\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 mustBeInsideWorker();\n return (await dynamic4x4x4Solver).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { LazyPromise } from \"../../../../../../twisty/cubing-private\";\n\nexport const dynamicFTO = new LazyPromise(\n () => import(\"./search-dynamic-solve-fto\"),\n);\n", "import { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { LazyPromise } from \"../../../../twisty/cubing-private\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { dynamicFTO } from \"./dynamic/fto\";\n\nconst dynamic = new LazyPromise(\n () => import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\"),\n);\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(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n pattern,\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 dynamicFTO).getRandomFTOScramble());\n}\n", "import { LazyPromise } from \"../../../../../../twisty/cubing-private\";\n\nexport const dynamicMasterTetraminxSolver = new LazyPromise(\n () => import(\"./search-dynamic-solve-master_tetraminx\"),\n);\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicMasterTetraminxSolver } from \"./dynamic/master_tetraminx\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(\n await (\n await dynamicMasterTetraminxSolver\n ).randomMasterTetraminxScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPatternData } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedSGSDataMegaminx();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n json,\n [\"U\", \"R\", \"F\", \"L\", \"BR\", \"BL\", \"FR\", \"FL\", \"DR\", \"DL\", \"B\", \"D\"],\n );\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const patternDataWithoutMO: KPatternData = structuredClone(\n pattern.patternData,\n );\n patternDataWithoutMO[\"CENTERS\"].orientation = new Array(12).fill(0);\n const patternWithoutMO = new KPattern(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n patternDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n patternWithoutMO,\n TREMBLE_DEPTH,\n () => 5, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomPatternFromSGS, 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(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(pattern, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxPatternFixedOrientation(): Promise<KPattern> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomPatternFromSGS(\n await puzzles[\"pyraminx\"].kpuzzle(),\n await (await searchDynamicSideEvents).sgsDataPyraminxFixedOrientation(),\n );\n}\n", "import { LazyPromise } from \"../../../../../../twisty/cubing-private\";\n\nexport const searchDynamicUnofficial = new LazyPromise(\n () => import(\"./search-dynamic-sgs-unofficial\"),\n);\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { searchDynamicUnofficial } from \"./dynamic/sgs-unofficial\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await searchDynamicUnofficial).getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { 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(pattern: KPattern): Promise<KPattern> {\n return new KPattern(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n {\n CORNERS: pattern.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: pattern.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n },\n );\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n await resetCenterOrientation(pattern),\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", "import type { Alg } from \"../../alg\";\nimport {\n KPattern,\n type KPatternData,\n KPuzzle,\n type KPuzzleDefinition,\n} from \"../../kpuzzle\";\nimport { puzzles } from \"../../puzzles\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport { preInitialize222, solve222 } from \"./solve/puzzles/2x2x2\";\nimport {\n initialize333,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto\";\nimport { randomMasterTetraminxScramble } from \"./solve/puzzles/master_tetraminx\";\nimport { solveMegaminx } from \"./solve/puzzles/megaminx\";\nimport { solvePyraminx } from \"./solve/puzzles/pyraminx\";\nimport { randomRediCubeScramble } from \"./solve/puzzles/redi_cube\";\nimport { solveSkewb } from \"./solve/puzzles/skewb\";\nimport {\n type TwipsOptions,\n wasmDeriveScrambleForEvent,\n wasmRandomScrambleForEvent,\n wasmTwips,\n} from \"./solve/twips\";\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\n// This is used to ensure only one scramble is running (and measured) at a time, as interleaving scrambles within a single worker isn't supported (yet).\n// Scrambles may perform async work (e.g. loading code), and this guard this prevents unintended interleaving.\nlet scrambleActivityLock: Promise<Alg>;\n\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n return (scrambleActivityLock = (async () => {\n await scrambleActivityLock;\n function wasm(): Promise<Alg> {\n return measurePerf(\n `wasmRandomScrambleForEvent(${JSON.stringify(eventID)})`,\n () => wasmRandomScrambleForEvent(eventID),\n {\n isPrefetch: options?.isPrefetch,\n },\n );\n }\n\n switch (eventID) {\n // case \"333\":\n case \"222\":\n return (await wasm()).experimentalSimplify({\n puzzleSpecificSimplifyOptions: {\n quantumMoveOrder: () => 4,\n },\n });\n // case \"444\":\n case \"555\":\n case \"666\":\n case \"777\":\n // case \"333bf\":\n case \"333fm\":\n // case \"333oh\":\n case \"clock\":\n case \"minx\":\n case \"pyram\":\n case \"skewb\":\n case \"sq1\":\n // case \"444bf\":\n case \"555bf\":\n // case \"333mbf\":\n // case \"fto\":\n // case \"master_tetraminx\":\n case \"kilominx\":\n // case \"redi_cube\":\n case \"baby_fto\":\n return wasm();\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"333bf\":\n case \"333mbf\":\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 \"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 \"redi_cube\":\n return measurePerf(\"randomRediCubeScramble\", randomRediCubeScramble, {\n isPrefetch: options?.isPrefetch,\n });\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\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 deriveScrambleStringForEvent: async (\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n ): Promise<string> => {\n const scramble = await measurePerf(\n `deriveScrambleForEvent(\u2026, ${JSON.stringify(eventID)})`,\n () =>\n wasmDeriveScrambleForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n ),\n );\n return scramble.toString();\n },\n\n solve333ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"3x3x3\"].kpuzzle(), patternData);\n return (await solve333(pattern)).toString();\n },\n\n solve222ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"2x2x2\"].kpuzzle(), patternData);\n return (await solve222(pattern)).toString();\n },\n\n solveSkewbToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"skewb\"].kpuzzle(), patternData);\n return (await solveSkewb(pattern)).toString();\n },\n\n solvePyraminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"pyraminx\"].kpuzzle(),\n patternData,\n );\n return (await solvePyraminx(pattern)).toString();\n },\n\n solveMegaminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"megaminx\"].kpuzzle(),\n patternData,\n );\n return (await solveMegaminx(pattern)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n\n solveTwipsToString: async (\n def: KPuzzleDefinition,\n patternData: KPatternData,\n options?: TwipsOptions,\n ): Promise<string> => {\n const kpuzzle = new KPuzzle(def);\n const pattern = new KPattern(kpuzzle, patternData);\n return (await wasmTwips(def, pattern, options)).toString();\n },\n};\n\nexport type WorkerAPI = typeof insideAPI;\n", "import { expose } from \"../../vendor/apache/comlink-everywhere\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
5
+ "mappings": "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",
6
+ "names": ["wasmTwips", "wasmRandomScrambleForEvent", "wasmDeriveScrambleForEvent", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH"]
7
+ }