cubing 0.22.1 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +1 -1
  2. package/alg/package.json +1 -3
  3. package/bluetooth/package.json +1 -3
  4. package/dist/bundle-global/cubing.bundle-global.js +2979 -242
  5. package/dist/esm/2x2x2.sgs.json-FRBWMMA7.js +122 -0
  6. package/dist/esm/2x2x2.sgs.json-FRBWMMA7.js.map +7 -0
  7. package/dist/esm/{3d-M7GBIT3X.js → 3d-Q4WSD4BC.js} +3 -3
  8. package/dist/esm/{3d-M7GBIT3X.js.map → 3d-Q4WSD4BC.js.map} +0 -0
  9. package/dist/esm/bluetooth/index.d.ts +1 -1
  10. package/dist/esm/bluetooth/index.js +1 -1
  11. package/dist/esm/chunk-37EHU3GZ.js +66 -0
  12. package/dist/esm/chunk-37EHU3GZ.js.map +7 -0
  13. package/dist/esm/chunk-BJIOROQC.js +18 -0
  14. package/dist/esm/chunk-BJIOROQC.js.map +7 -0
  15. package/dist/esm/{chunk-R3HRHYIW.js → chunk-DK6PXBB2.js} +1 -1
  16. package/dist/esm/{chunk-R3HRHYIW.js.map → chunk-DK6PXBB2.js.map} +0 -0
  17. package/dist/esm/chunk-DPMEZY7V.js +1552 -0
  18. package/dist/esm/chunk-DPMEZY7V.js.map +7 -0
  19. package/dist/esm/chunk-FK2SCC3Z.js +499 -0
  20. package/dist/esm/chunk-FK2SCC3Z.js.map +7 -0
  21. package/dist/esm/chunk-JZWB7AIU.js +115 -0
  22. package/dist/esm/chunk-JZWB7AIU.js.map +7 -0
  23. package/dist/esm/chunk-MLOCDLUF.js +226 -0
  24. package/dist/esm/chunk-MLOCDLUF.js.map +7 -0
  25. package/dist/esm/{chunk-GF76PWEV.js → chunk-N3RNWU5T.js} +2 -2
  26. package/dist/esm/{chunk-GF76PWEV.js.map → chunk-N3RNWU5T.js.map} +0 -0
  27. package/dist/esm/chunk-PUPUQWJC.js +4065 -0
  28. package/dist/esm/chunk-PUPUQWJC.js.map +7 -0
  29. package/dist/esm/chunk-XVZOMB6J.js +89 -0
  30. package/dist/esm/chunk-XVZOMB6J.js.map +7 -0
  31. package/dist/esm/chunk-Z6X7HTPP.js +103 -0
  32. package/dist/esm/chunk-Z6X7HTPP.js.map +7 -0
  33. package/dist/esm/entry-L6CE2HLF.js +531 -0
  34. package/dist/esm/entry-L6CE2HLF.js.map +7 -0
  35. package/dist/esm/esm-test-worker.js +3 -14
  36. package/dist/esm/esm-test-worker.js.map +3 -3
  37. package/dist/esm/fto.sgs.json-62YNULOK.js +649 -0
  38. package/dist/esm/fto.sgs.json-62YNULOK.js.map +7 -0
  39. package/dist/esm/gwt-B7CBESZR.js +1669 -0
  40. package/dist/esm/gwt-B7CBESZR.js.map +7 -0
  41. package/dist/esm/megaminx.sgs.json-PRL46G5J.js +16 -0
  42. package/dist/esm/megaminx.sgs.json-PRL46G5J.js.map +7 -0
  43. package/dist/esm/module-entry-J2N3UZP7.js +18 -0
  44. package/dist/esm/module-entry-J2N3UZP7.js.map +7 -0
  45. package/dist/esm/{node-HFBX5WHK.js → node-W3AD4HBK.js} +2 -1
  46. package/dist/esm/node-W3AD4HBK.js.map +7 -0
  47. package/dist/esm/puzzle-geometry/index.js +11 -4051
  48. package/dist/esm/puzzle-geometry/index.js.map +3 -3
  49. package/dist/esm/puzzles/index.js +1 -1
  50. package/dist/esm/pyraminx.sgs.json-7QMPT5XP.js +14 -0
  51. package/dist/esm/pyraminx.sgs.json-7QMPT5XP.js.map +7 -0
  52. package/dist/esm/scramble/index.js +4 -2
  53. package/dist/esm/scramble_444-JP3CWLJM.js +2572 -0
  54. package/dist/esm/scramble_444-JP3CWLJM.js.map +7 -0
  55. package/dist/esm/scramble_sq1-PQ2AYBFW.js +706 -0
  56. package/dist/esm/scramble_sq1-PQ2AYBFW.js.map +7 -0
  57. package/dist/esm/search/index.js +6 -3
  58. package/dist/esm/skewb.sgs.json-FWHYACJG.js +16 -0
  59. package/dist/esm/skewb.sgs.json-FWHYACJG.js.map +7 -0
  60. package/dist/esm/twisty/index.js +3 -3
  61. package/dist/esm/worker-inside-generated-string-OWJA5IIQ.js +3450 -0
  62. package/dist/esm/worker-inside-generated-string-OWJA5IIQ.js.map +7 -0
  63. package/dist/types/search/inside/module-entry-path-getter.d.ts +2 -0
  64. package/dist/types/search/inside/module-entry-path-getter.d.ts.map +1 -0
  65. package/dist/types/search/inside/module-entry.d.ts +2 -0
  66. package/dist/types/search/inside/module-entry.d.ts.map +1 -0
  67. package/dist/types/search/inside/solve/puzzles/3x3x3/index.d.ts.map +1 -1
  68. package/dist/types/search/inside/solve/puzzles/4x4x4.d.ts +2 -1
  69. package/dist/types/search/inside/solve/puzzles/4x4x4.d.ts.map +1 -1
  70. package/dist/types/search/inside/solve/puzzles/sq1.d.ts.map +1 -1
  71. package/dist/types/search/instantiator.d.ts +1 -2
  72. package/dist/types/search/instantiator.d.ts.map +1 -1
  73. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  74. package/dist/types/search/worker-inside-generated-string.d.ts.map +1 -1
  75. package/dist/types/vendor/comlink-everywhere/outside/node.d.ts.map +1 -1
  76. package/docs/.DS_Store +0 -0
  77. package/docs/cubing/.DS_Store +0 -0
  78. package/docs/cubing/index.html +1 -1
  79. package/kpuzzle/package.json +1 -3
  80. package/notation/package.json +1 -3
  81. package/package.json +2 -6
  82. package/protocol/package.json +1 -3
  83. package/puzzle-geometry/package.json +1 -3
  84. package/puzzles/package.json +1 -3
  85. package/scramble/package.json +1 -3
  86. package/search/package.json +1 -3
  87. package/src/cubing/.DS_Store +0 -0
  88. package/src/cubing/search/.DS_Store +0 -0
  89. package/src/cubing/search/inside/.DS_Store +0 -0
  90. package/src/cubing/search/inside/module-entry-path-getter.ts +5 -0
  91. package/src/cubing/search/inside/module-entry.ts +20 -0
  92. package/src/cubing/search/inside/solve/puzzles/3x3x3/index.ts +13 -3
  93. package/src/cubing/search/inside/solve/puzzles/4x4x4.ts +19 -5
  94. package/src/cubing/search/inside/solve/puzzles/fto.sgs.json.ts +356 -13
  95. package/src/cubing/search/inside/solve/puzzles/sq1.ts +12 -2
  96. package/src/cubing/search/instantiator.ts +75 -40
  97. package/src/cubing/search/worker-inside-generated-string.js +1 -1
  98. package/src/cubing/vendor/.DS_Store +0 -0
  99. package/src/cubing/vendor/comlink-everywhere/.DS_Store +0 -0
  100. package/src/cubing/vendor/comlink-everywhere/outside/node.js +1 -0
  101. package/src/cubing/vendor/cstimer/.DS_Store +0 -0
  102. package/src/cubing/{search/inside/solve/puzzles → vendor/cstimer/src}/.DS_Store +0 -0
  103. package/src/cubing/vendor/random-uint-below/random53BitValue.ts +1 -1
  104. package/src/cubing/vendor/sq12phase/scramble_sq1.js +2 -2
  105. package/src/cubing/{twisty/heavy-code-imports → vendor/three}/.DS_Store +0 -0
  106. package/src/cubing/{twisty/old/animation → vendor/three/examples}/.DS_Store +0 -0
  107. package/stream/package.json +1 -3
  108. package/twisty/package.json +1 -3
  109. package/alg/index.d.ts +0 -1
  110. package/bluetooth/index.d.ts +0 -1
  111. package/dist/.DS_Store +0 -0
  112. package/dist/esm/chunk-6BZSKSG7.js +0 -1368
  113. package/dist/esm/chunk-6BZSKSG7.js.map +0 -7
  114. package/dist/esm/index.d.ts +0 -1
  115. package/dist/esm/node-HFBX5WHK.js.map +0 -7
  116. package/dist/esm/worker-inside-generated-string-RQYYANYQ.js +0 -3107
  117. package/dist/esm/worker-inside-generated-string-RQYYANYQ.js.map +0 -7
  118. package/kpuzzle/index.d.ts +0 -1
  119. package/notation/index.d.ts +0 -1
  120. package/protocol/index.d.ts +0 -1
  121. package/puzzle-geometry/index.d.ts +0 -1
  122. package/puzzles/index.d.ts +0 -1
  123. package/scramble/index.d.ts +0 -1
  124. package/search/index.d.ts +0 -1
  125. package/src/cubing/puzzles/.DS_Store +0 -0
  126. package/src/cubing/puzzles/implementations/.DS_Store +0 -0
  127. package/src/cubing/search/inside/solve/.DS_Store +0 -0
  128. package/src/cubing/search/inside/solve/vendor/.DS_Store +0 -0
  129. package/src/cubing/twisty/.DS_Store +0 -0
  130. package/src/cubing/twisty/controllers/.DS_Store +0 -0
  131. package/src/cubing/twisty/controllers/animation/.DS_Store +0 -0
  132. package/src/cubing/twisty/controllers/indexer/.DS_Store +0 -0
  133. package/src/cubing/twisty/model/.DS_Store +0 -0
  134. package/src/cubing/twisty/model/props/.DS_Store +0 -0
  135. package/src/cubing/twisty/model/props/puzzle/.DS_Store +0 -0
  136. package/src/cubing/twisty/old/.DS_Store +0 -0
  137. package/src/cubing/twisty/old/dom/.DS_Store +0 -0
  138. package/src/cubing/twisty/views/.DS_Store +0 -0
  139. package/src/cubing/twisty/views/3D/.DS_Store +0 -0
  140. package/stream/index.d.ts +0 -1
  141. package/twisty/index.d.ts +0 -1
@@ -0,0 +1,531 @@
1
+ import {
2
+ cachedMegaminxDefWithoutMO
3
+ } from "./chunk-DPMEZY7V.js";
4
+ import {
5
+ sgsDataPyraminxFixedOrientation
6
+ } from "./chunk-Z6X7HTPP.js";
7
+ import {
8
+ sgsDataSkewbFixedCorner,
9
+ skewbDefWithoutMOCached
10
+ } from "./chunk-JZWB7AIU.js";
11
+ import "./chunk-XVZOMB6J.js";
12
+ import {
13
+ expose
14
+ } from "./chunk-BJIOROQC.js";
15
+ import {
16
+ countMoves
17
+ } from "./chunk-4IUYLRHT.js";
18
+ import "./chunk-PUPUQWJC.js";
19
+ import {
20
+ addOrientationSuffix,
21
+ initialize333,
22
+ mustBeInsideWorker,
23
+ random333FewestMovesScramble,
24
+ random333OrientedScramble,
25
+ random333Scramble,
26
+ setIsInsideWorker,
27
+ solve333
28
+ } from "./chunk-FK2SCC3Z.js";
29
+ import {
30
+ randomChoiceFactory,
31
+ randomPermute,
32
+ randomUIntBelowFactory
33
+ } from "./chunk-37EHU3GZ.js";
34
+ import {
35
+ puzzles
36
+ } from "./chunk-DK6PXBB2.js";
37
+ import {
38
+ KPuzzle,
39
+ areStatesEquivalent,
40
+ combineTransformations,
41
+ identityTransformation,
42
+ invertTransformation
43
+ } from "./chunk-X6JHXPDX.js";
44
+ import {
45
+ Alg,
46
+ AlgBuilder,
47
+ Move,
48
+ QuantumMove
49
+ } from "./chunk-EWRBHQFX.js";
50
+ import "./chunk-WO2AXYFE.js";
51
+
52
+ // src/cubing/search/inside/solve/tremble.ts
53
+ var DEFAULT_STAGE1_DEPTH_LIMIT = 2;
54
+ var DOUBLECHECK_PLACED_PIECES = true;
55
+ var DEBUG = false;
56
+ function calculateMoves(def, moveNames) {
57
+ const searchMoves = [];
58
+ const kpuzzle = new KPuzzle(def);
59
+ moveNames.forEach(function(moveName) {
60
+ const rootMove = new Move(moveName);
61
+ if (rootMove.amount !== 1) {
62
+ throw new Error("SGS cannot handle def moves with an amount other than 1 yet.");
63
+ }
64
+ kpuzzle.reset();
65
+ for (let i = 1; true; i++) {
66
+ kpuzzle.applyMove(rootMove);
67
+ if (areStatesEquivalent(def, kpuzzle.state, identityTransformation(def))) {
68
+ break;
69
+ }
70
+ searchMoves.push({
71
+ move: rootMove.modified({ amount: i }),
72
+ transformation: kpuzzle.state
73
+ });
74
+ }
75
+ });
76
+ return searchMoves;
77
+ }
78
+ var TrembleSolver = class {
79
+ constructor(def, sgs, trembleMoveNames) {
80
+ this.def = def;
81
+ this.sgs = sgs;
82
+ this.searchMoves = calculateMoves(this.def, trembleMoveNames ?? Object.keys(this.def.moves));
83
+ }
84
+ async solve(state, stage1DepthLimit = DEFAULT_STAGE1_DEPTH_LIMIT, quantumMoveOrder) {
85
+ let bestAlg = null;
86
+ let bestLen = 1e6;
87
+ const recur = (recursiveState, togo, sofar) => {
88
+ if (togo === 0) {
89
+ const sgsAlg = this.sgsPhaseSolve(recursiveState, bestLen);
90
+ if (!sgsAlg) {
91
+ return;
92
+ }
93
+ const newAlg = sofar.concat(sgsAlg).simplify({ collapseMoves: true, quantumMoveOrder });
94
+ const len = countMoves(newAlg);
95
+ if (bestAlg === null || len < bestLen) {
96
+ if (DEBUG) {
97
+ console.log(`New best (${len} moves): ${newAlg.toString()}`);
98
+ console.log(`Tremble moves are: ${sofar.toString()}`);
99
+ }
100
+ bestAlg = newAlg;
101
+ bestLen = len;
102
+ }
103
+ return;
104
+ }
105
+ for (const searchMove of this.searchMoves) {
106
+ recur(combineTransformations(this.def, recursiveState, searchMove.transformation), togo - 1, sofar.concat([searchMove.move]));
107
+ }
108
+ };
109
+ for (let d = 0; d <= stage1DepthLimit; d++) {
110
+ recur(state, d, new Alg());
111
+ }
112
+ if (bestAlg === null) {
113
+ throw new Error("SGS search failed.");
114
+ }
115
+ return bestAlg;
116
+ }
117
+ sgsPhaseSolve(initialState, bestLenSofar) {
118
+ const algBuilder = new AlgBuilder();
119
+ let state = initialState;
120
+ for (const step of this.sgs.ordering) {
121
+ const cubieSeq = step.pieceOrdering;
122
+ let key = "";
123
+ const inverseState = invertTransformation(this.def, state);
124
+ for (let i = 0; i < cubieSeq.length; i++) {
125
+ const loc = cubieSeq[i];
126
+ const orbitName = loc.orbitName;
127
+ const idx = loc.permutationIdx;
128
+ key += ` ${inverseState[orbitName].permutation[idx]} ${inverseState[orbitName].orientation[idx]}`;
129
+ }
130
+ const info = step.lookup[key];
131
+ if (!info) {
132
+ throw new Error("Missing algorithm in sgs or esgs?");
133
+ }
134
+ algBuilder.experimentalPushAlg(info.alg);
135
+ if (algBuilder.experimentalNumUnits() >= bestLenSofar) {
136
+ return null;
137
+ }
138
+ state = combineTransformations(this.def, state, info.transformation);
139
+ if (DOUBLECHECK_PLACED_PIECES) {
140
+ for (let i = 0; i < cubieSeq.length; i++) {
141
+ const location = cubieSeq[i];
142
+ const orbitName = location.orbitName;
143
+ const idx = location.permutationIdx;
144
+ if (state[orbitName].permutation[idx] !== idx || state[orbitName].orientation[idx] !== 0) {
145
+ throw new Error("bad SGS :-(");
146
+ }
147
+ }
148
+ }
149
+ }
150
+ return algBuilder.toAlg();
151
+ }
152
+ };
153
+ async function randomStateFromSGS(def, sgs) {
154
+ const randomChoice = await randomChoiceFactory();
155
+ let state = identityTransformation(def);
156
+ for (const step of sgs.ordering) {
157
+ const sgsAction = randomChoice(Object.values(step.lookup));
158
+ state = combineTransformations(def, state, sgsAction.transformation);
159
+ }
160
+ return state;
161
+ }
162
+
163
+ // src/cubing/search/inside/solve/puzzles/2x2x2.ts
164
+ var TREMBLE_DEPTH = 3;
165
+ var cachedTrembleSolver = null;
166
+ async function getCachedTrembleSolver() {
167
+ return cachedTrembleSolver || (cachedTrembleSolver = (async () => {
168
+ const json = await (await import("./2x2x2.sgs.json-FRBWMMA7.js")).cachedData222();
169
+ return new TrembleSolver(await puzzles["2x2x2"].def(), json, "URFLBD".split(""));
170
+ })());
171
+ }
172
+ async function preInitialize222() {
173
+ await getCachedTrembleSolver();
174
+ }
175
+ async function solve222(state) {
176
+ mustBeInsideWorker();
177
+ const trembleSolver = await getCachedTrembleSolver();
178
+ const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 4);
179
+ return alg;
180
+ }
181
+ async function randomizeOrbit(def, orbitName, state, options) {
182
+ const randomUIntBelow = await randomUIntBelowFactory();
183
+ await randomPermute(state[orbitName].permutation);
184
+ const orbitDef = def.orbits[orbitName];
185
+ const ori = state[orbitName].orientation;
186
+ let sum = 0;
187
+ for (let i = 0; i < orbitDef.numPieces; i++) {
188
+ const o = randomUIntBelow(orbitDef.orientations);
189
+ ori[i] = o;
190
+ sum += o;
191
+ }
192
+ if (options && "orientationSum" in options) {
193
+ ori[0] = ((ori[0] + options.orientationSum - sum) % orbitDef.orientations + orbitDef.orientations) % orbitDef.orientations;
194
+ }
195
+ }
196
+ async function random222State() {
197
+ const nonExtensibleDef = await puzzles["2x2x2"].def();
198
+ const def = Object.assign({}, nonExtensibleDef);
199
+ const kpuzzle = new KPuzzle(def);
200
+ const stateCopy = JSON.parse(JSON.stringify(kpuzzle.state));
201
+ await randomizeOrbit(def, "CORNERS", stateCopy, { orientationSum: 0 });
202
+ return stateCopy;
203
+ }
204
+ async function random222Scramble() {
205
+ return await solve222(await random222State());
206
+ }
207
+
208
+ // src/cubing/search/inside/solve/puzzles/4x4x4.ts
209
+ var randomSuffixes = [
210
+ [null, "x", "x2", "x'", "z", "z'"],
211
+ [null, "y", "y2", "y'"]
212
+ ];
213
+ var cachedImport = null;
214
+ function dynamicScramble444() {
215
+ return cachedImport ?? (cachedImport = import("./scramble_444-JP3CWLJM.js"));
216
+ }
217
+ async function initialize444() {
218
+ return (await dynamicScramble444()).initialize();
219
+ }
220
+ async function random444Scramble() {
221
+ return (await dynamicScramble444()).random444Scramble();
222
+ }
223
+ async function random444OrientedScramble() {
224
+ return addOrientationSuffix(await random444Scramble(), randomSuffixes);
225
+ }
226
+
227
+ // src/cubing/search/inside/solve/puzzles/megaminx.ts
228
+ var TREMBLE_DEPTH2 = 2;
229
+ var cachedTrembleSolver2 = null;
230
+ async function getCachedTrembleSolver2() {
231
+ return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
232
+ const sgs = await import("./megaminx.sgs.json-PRL46G5J.js");
233
+ const json = await sgs.cachedSGSDataMegaminx();
234
+ return new TrembleSolver(await cachedMegaminxDefWithoutMO(), json, [
235
+ "U",
236
+ "R",
237
+ "F",
238
+ "L",
239
+ "BR",
240
+ "BL",
241
+ "FR",
242
+ "FL",
243
+ "DR",
244
+ "DL",
245
+ "B",
246
+ "D"
247
+ ]);
248
+ })());
249
+ }
250
+ async function solveMegaminx(state) {
251
+ mustBeInsideWorker();
252
+ const trembleSolver = await getCachedTrembleSolver2();
253
+ const stateWithoutMO = JSON.parse(JSON.stringify(state));
254
+ stateWithoutMO.CENTERS.orientation = new Array(12).fill(0);
255
+ const alg = await trembleSolver.solve(stateWithoutMO, TREMBLE_DEPTH2, () => 5);
256
+ return alg;
257
+ }
258
+
259
+ // src/cubing/search/inside/solve/puzzles/pyraminx.ts
260
+ var TREMBLE_DEPTH3 = 3;
261
+ var cachedTrembleSolver3 = null;
262
+ async function getCachedTrembleSolver3() {
263
+ return cachedTrembleSolver3 || (cachedTrembleSolver3 = (async () => {
264
+ const sgs = await import("./pyraminx.sgs.json-7QMPT5XP.js");
265
+ const json = await sgs.sgsDataPyraminx();
266
+ return new TrembleSolver(await puzzles.pyraminx.def(), json, "RLUB".split(""));
267
+ })());
268
+ }
269
+ async function solvePyraminx(state) {
270
+ mustBeInsideWorker();
271
+ const trembleSolver = await getCachedTrembleSolver3();
272
+ const alg = await trembleSolver.solve(state, TREMBLE_DEPTH3, () => 3);
273
+ return alg;
274
+ }
275
+ async function randomPyraminxStateFixedOrientation() {
276
+ return randomStateFromSGS(await puzzles.pyraminx.def(), await sgsDataPyraminxFixedOrientation());
277
+ }
278
+ async function randomPyraminxScrambleFixedOrientation() {
279
+ return solvePyraminx(await randomPyraminxStateFixedOrientation());
280
+ }
281
+
282
+ // src/cubing/search/inside/solve/puzzles/skewb.ts
283
+ var TREMBLE_DEPTH4 = 3;
284
+ var cachedTrembleSolver4 = null;
285
+ async function getCachedTrembleSolver4() {
286
+ return cachedTrembleSolver4 || (cachedTrembleSolver4 = (async () => {
287
+ const sgs = await import("./skewb.sgs.json-FWHYACJG.js");
288
+ const json = await sgs.sgsDataSkewb();
289
+ return new TrembleSolver(await sgs.skewbDefWithoutMOCached(), json, "RLUB".split(""));
290
+ })());
291
+ }
292
+ function resetCenterOrientation(state) {
293
+ return {
294
+ CORNERS: state.CORNERS,
295
+ CENTERS: {
296
+ permutation: state.CENTERS.permutation,
297
+ orientation: new Array(6).fill(0)
298
+ }
299
+ };
300
+ }
301
+ async function solveSkewb(state) {
302
+ mustBeInsideWorker();
303
+ const trembleSolver = await getCachedTrembleSolver4();
304
+ const alg = await trembleSolver.solve(resetCenterOrientation(state), TREMBLE_DEPTH4, (quantumMove) => quantumMove.family === "y" ? 4 : 3);
305
+ return alg;
306
+ }
307
+ async function randomSkewbFixedCornerState() {
308
+ return randomStateFromSGS(await skewbDefWithoutMOCached(), await sgsDataSkewbFixedCorner());
309
+ }
310
+ async function randomSkewbFixedCornerScramble() {
311
+ return solveSkewb(await randomSkewbFixedCornerState());
312
+ }
313
+
314
+ // src/cubing/search/inside/solve/puzzles/big-cubes.ts
315
+ function numMoves(n) {
316
+ switch (n) {
317
+ case 5:
318
+ return 60;
319
+ case 6:
320
+ return 80;
321
+ default:
322
+ return 100;
323
+ }
324
+ }
325
+ var axesFaces = [
326
+ ["U", "D"],
327
+ ["L", "R"],
328
+ ["F", "B"]
329
+ ];
330
+ var axesMovesCache = new Map();
331
+ function cachedAxesMoves(n) {
332
+ const existing = axesMovesCache.get(n);
333
+ if (existing) {
334
+ return existing;
335
+ }
336
+ const axesMoves = [];
337
+ for (const faces of axesFaces) {
338
+ const axisMoveFamilies = [];
339
+ axesMoves.push(axisMoveFamilies);
340
+ for (const face of faces) {
341
+ axisMoveFamilies.push(new QuantumMove(face));
342
+ if (n > 3) {
343
+ axisMoveFamilies.push(new QuantumMove(`${face}w`));
344
+ }
345
+ for (let i = 3; i <= n / 2; i++) {
346
+ axisMoveFamilies.push(new QuantumMove(`${face}w`, i));
347
+ }
348
+ }
349
+ }
350
+ axesMovesCache.set(n, axesMoves);
351
+ return axesMoves;
352
+ }
353
+ async function bigCubeRandomMoves(n) {
354
+ const randomUintBelow = await randomUIntBelowFactory();
355
+ const randomChoice = await randomChoiceFactory();
356
+ const randomNumChoice = randomChoice;
357
+ const axesMoves = cachedAxesMoves(n);
358
+ const cachedNumMoves = numMoves(n);
359
+ const algBuilder = new AlgBuilder();
360
+ let currentAxisIdx = 0;
361
+ const currentAxisQuantumMoves = new Set();
362
+ while (algBuilder.experimentalNumUnits() < cachedNumMoves) {
363
+ const newAxisIdx = randomUintBelow(3);
364
+ if (newAxisIdx !== currentAxisIdx) {
365
+ currentAxisQuantumMoves.clear();
366
+ }
367
+ currentAxisIdx = newAxisIdx;
368
+ const quantumMove = randomChoice(axesMoves[currentAxisIdx]);
369
+ const quantumMoveStr = quantumMove.toString();
370
+ if (currentAxisQuantumMoves.has(quantumMoveStr)) {
371
+ continue;
372
+ }
373
+ currentAxisQuantumMoves.add(quantumMoveStr);
374
+ algBuilder.push(new Move(quantumMove, randomNumChoice([1, 2, -1])));
375
+ }
376
+ return algBuilder.toAlg();
377
+ }
378
+
379
+ // src/cubing/search/inside/solve/puzzles/5x5x5.ts
380
+ var randomSuffixes2 = [
381
+ [null, "3Rw", "3Rw2", "3Rw'", "3Fw", "3Fw'"],
382
+ [null, "3Dw", "3Dw2", "3Dw'"]
383
+ ];
384
+ async function oriented555RandomMoves() {
385
+ return addOrientationSuffix(await bigCubeRandomMoves(5), randomSuffixes2);
386
+ }
387
+
388
+ // src/cubing/search/inside/solve/puzzles/sq1.ts
389
+ var cachedImport2 = null;
390
+ function dynamicScrambleSq1() {
391
+ return cachedImport2 ?? (cachedImport2 = import("./scramble_sq1-PQ2AYBFW.js"));
392
+ }
393
+ async function getRandomSquare1Scramble() {
394
+ return Alg.fromString(await (await dynamicScrambleSq1()).getRandomSquare1ScrambleString());
395
+ }
396
+
397
+ // src/cubing/search/inside/solve/puzzles/fto.ts
398
+ var TREMBLE_DEPTH5 = 3;
399
+ var cachedTrembleSolver5 = null;
400
+ async function getCachedTrembleSolver5() {
401
+ return cachedTrembleSolver5 || (cachedTrembleSolver5 = (async () => {
402
+ const sgs = await import("./fto.sgs.json-62YNULOK.js");
403
+ const json = await sgs.sgsDataFTO();
404
+ return new TrembleSolver(await sgs.ftoDef(), json, [
405
+ "U",
406
+ "R",
407
+ "F",
408
+ "L",
409
+ "D",
410
+ "B",
411
+ "BR",
412
+ "BL"
413
+ ]);
414
+ })());
415
+ }
416
+ async function solveFTO(state) {
417
+ mustBeInsideWorker();
418
+ const trembleSolver = await getCachedTrembleSolver5();
419
+ const alg = await trembleSolver.solve(state, TREMBLE_DEPTH5, () => 3);
420
+ return alg;
421
+ }
422
+ var warned = false;
423
+ async function randomFTOScramble() {
424
+ if (!warned) {
425
+ console.warn("FTO scrambles are not yet optimized. They may be much too long (\u224890 moves).");
426
+ warned = true;
427
+ }
428
+ const sgs = await import("./fto.sgs.json-62YNULOK.js");
429
+ return solveFTO(await randomStateFromSGS(await sgs.ftoDef(), await sgs.sgsDataFTO()));
430
+ }
431
+
432
+ // src/cubing/search/inside/api.ts
433
+ setIsInsideWorker(true);
434
+ var DEBUG_MEASURE_PERF = true;
435
+ function setDebugMeasurePerf(newDebugMeasurePerf) {
436
+ DEBUG_MEASURE_PERF = newDebugMeasurePerf;
437
+ }
438
+ function now() {
439
+ return (typeof performance === "undefined" ? Date : performance).now();
440
+ }
441
+ async function measurePerf(name, f) {
442
+ if (!DEBUG_MEASURE_PERF) {
443
+ return f();
444
+ }
445
+ const start = now();
446
+ const result = f();
447
+ if (result?.then) {
448
+ await result;
449
+ }
450
+ const end = now();
451
+ console.warn(`${name}: ${Math.round(end - start)}ms`);
452
+ return result;
453
+ }
454
+ var insideAPI = {
455
+ initialize: async (eventID) => {
456
+ switch (eventID) {
457
+ case "222":
458
+ return measurePerf("preInitialize222", preInitialize222);
459
+ case "333":
460
+ case "333oh":
461
+ case "333ft":
462
+ return measurePerf("initialize333", initialize333);
463
+ case "444":
464
+ return measurePerf("initialize444", initialize444);
465
+ default:
466
+ throw new Error(`unsupported event: ${eventID}`);
467
+ }
468
+ },
469
+ randomScrambleForEvent: async (eventID) => {
470
+ switch (eventID) {
471
+ case "222":
472
+ return measurePerf("random222Scramble", random222Scramble);
473
+ case "333":
474
+ case "333oh":
475
+ case "333ft":
476
+ return measurePerf("random333Scramble", random333Scramble);
477
+ case "333fm":
478
+ return measurePerf("random333FewestMovesScramble", random333FewestMovesScramble);
479
+ case "333bf":
480
+ case "333mb":
481
+ return measurePerf("random333OrientedScramble", random333OrientedScramble);
482
+ case "444":
483
+ return measurePerf("random444Scramble", random444Scramble);
484
+ case "444bf":
485
+ return measurePerf("random444OrientedScramble", random444OrientedScramble);
486
+ case "555":
487
+ return measurePerf("bigCubeScramble(5)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 5));
488
+ case "555bf":
489
+ return measurePerf("oriented555RandomMoves", oriented555RandomMoves);
490
+ case "666":
491
+ return measurePerf("bigCubeScramble(6)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 6));
492
+ case "777":
493
+ return measurePerf("bigCubeScramble(7)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 7));
494
+ case "skewb":
495
+ return measurePerf("randomSkewbFixedCornerScramble", randomSkewbFixedCornerScramble);
496
+ case "pyram":
497
+ return measurePerf("randomPyraminxScrambleFixedOrientation", randomPyraminxScrambleFixedOrientation);
498
+ case "sq1":
499
+ return measurePerf("getRandomSquare1Scramble", getRandomSquare1Scramble);
500
+ case "fto":
501
+ return measurePerf("randomFTOScramble", randomFTOScramble);
502
+ default:
503
+ throw new Error(`unsupported event: ${eventID}`);
504
+ }
505
+ },
506
+ randomScrambleStringForEvent: async (eventID) => {
507
+ return (await insideAPI.randomScrambleForEvent(eventID)).toString();
508
+ },
509
+ solve333ToString: async (s) => {
510
+ return (await solve333(s)).toString();
511
+ },
512
+ solve222ToString: async (s) => {
513
+ return (await solve222(s)).toString();
514
+ },
515
+ solveSkewbToString: async (s) => {
516
+ return (await solveSkewb(s)).toString();
517
+ },
518
+ solvePyraminxToString: async (s) => {
519
+ return (await solvePyraminx(s)).toString();
520
+ },
521
+ solveMegaminxToString: async (s) => {
522
+ return (await solveMegaminx(s)).toString();
523
+ },
524
+ setDebugMeasurePerf: async (measure) => {
525
+ setDebugMeasurePerf(measure);
526
+ }
527
+ };
528
+
529
+ // src/cubing/search/inside/entry.js
530
+ expose(insideAPI);
531
+ //# sourceMappingURL=entry-L6CE2HLF.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/search/inside/solve/tremble.ts", "../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../src/cubing/search/inside/solve/puzzles/megaminx.ts", "../../src/cubing/search/inside/solve/puzzles/pyraminx.ts", "../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../src/cubing/search/inside/solve/puzzles/big-cubes.ts", "../../src/cubing/search/inside/solve/puzzles/5x5x5.ts", "../../src/cubing/search/inside/solve/puzzles/sq1.ts", "../../src/cubing/search/inside/solve/puzzles/fto.ts", "../../src/cubing/search/inside/api.ts", "../../src/cubing/search/inside/entry.js"],
4
+ "sourcesContent": ["import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../alg\";\nimport {\n areStatesEquivalent,\n combineTransformations,\n identityTransformation,\n invertTransformation,\n KPuzzle,\n KPuzzleDefinition,\n Transformation,\n} from \"../../../kpuzzle\";\nimport { countMoves } from \"../../../notation\";\nimport type { SGSAction, SGSCachedData } from \"./parseSGS\";\nimport { randomChoiceFactory } from \"../../../vendor/random-uint-below\";\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 def: KPuzzleDefinition,\n moveNames: string[],\n): {\n move: Move;\n transformation: Transformation;\n}[] {\n const searchMoves: {\n move: Move;\n transformation: Transformation;\n }[] = [];\n // const identity = identityTransformation(def); // TODO\n const kpuzzle = new KPuzzle(def);\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 kpuzzle.reset();\n // eslint-disable-next-line no-constant-condition\n for (let i = 1; true; i++) {\n kpuzzle.applyMove(rootMove);\n // console.log(kpuzzle.state, identityTransformation(def));\n if (\n // TODO: Use cached identity.\n areStatesEquivalent(def, kpuzzle.state, identityTransformation(def))\n ) {\n break;\n }\n searchMoves.push({\n move: rootMove.modified({ amount: i }),\n transformation: kpuzzle.state, // TODO: make this safe through the KPuzzle API\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: Transformation;\n }[];\n\n constructor(\n private def: KPuzzleDefinition,\n private sgs: SGSCachedData,\n trembleMoveNames?: string[],\n ) {\n this.searchMoves = calculateMoves(\n this.def,\n trembleMoveNames ?? Object.keys(this.def.moves),\n );\n }\n\n // public badRandomMoves(): KSolvePuzzleState {\n // return badRandomMoves(this.moves, this.ksp);\n // }\n\n public async solve(\n state: Transformation,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n let bestAlg: Alg | null = null;\n let bestLen = 1000000;\n const recur = (\n recursiveState: Transformation,\n togo: number,\n sofar: Alg,\n ) => {\n // console.log(\"recur\");\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveState, bestLen);\n if (!sgsAlg) {\n return;\n }\n // console.log(\"sgs done!\", sofar.toString(), \"|\", sgsAlg.toString());\n const newAlg = sofar\n .concat(sgsAlg)\n .simplify({ collapseMoves: true, quantumMoveOrder });\n\n const len = countMoves(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 combineTransformations(\n this.def,\n recursiveState,\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(state, 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 initialState: Transformation,\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 state = initialState;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseState = invertTransformation(this.def, state);\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 += ` ${inverseState[orbitName].permutation[idx]} ${inverseState[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.experimentalNumUnits() >= bestLenSofar) {\n return null;\n }\n state = combineTransformations(this.def, state, 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 state[orbitName].permutation[idx] !== idx ||\n state[orbitName].orientation[idx] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport async function randomStateFromSGS(\n def: KPuzzleDefinition,\n sgs: SGSCachedData,\n): Promise<Transformation> {\n const randomChoice = await randomChoiceFactory<SGSAction>(); // TODO: make this sync by putting the factory into a TLA\n\n let state = identityTransformation(def);\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n state = combineTransformations(def, state, sgsAction.transformation);\n }\n return state;\n}\n", "import type { Alg } from \"../../../../alg\";\nimport {\n KPuzzle,\n KPuzzleDefinition,\n Transformation,\n} from \"../../../../kpuzzle\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport {\n randomPermute,\n randomUIntBelowFactory,\n} from \"../../../../vendor/random-uint-below\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\n\n// Empirical ly determined depth:\n// - \u224811 moves on average (as opposed to >13 moves for depth 2),\n// - in close to 40ms(on a MacBook Pro).\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 import(\"./2x2x2.sgs.json\")\n ).cachedData222();\n return new TrembleSolver(\n await puzzles[\"2x2x2\"].def(),\n json,\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(state: Transformation): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 4); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\n// TODO: factor out and test.\nasync function randomizeOrbit(\n def: KPuzzleDefinition,\n orbitName: string,\n state: Transformation,\n options?: { orientationSum?: number },\n): Promise<void> {\n const randomUIntBelow = await randomUIntBelowFactory();\n await randomPermute(state[orbitName].permutation);\n\n const orbitDef = def.orbits[orbitName];\n const ori = state[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDef.numPieces; i++) {\n const o = randomUIntBelow(orbitDef.orientations);\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.orientations) +\n orbitDef.orientations) %\n orbitDef.orientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222State(): Promise<Transformation> {\n const nonExtensibleDef = await puzzles[\"2x2x2\"].def();\n const def = Object.assign({}, nonExtensibleDef);\n const kpuzzle = new KPuzzle(def);\n const stateCopy: Transformation = JSON.parse(JSON.stringify(kpuzzle.state)); // TODO\n await randomizeOrbit(def, \"CORNERS\", stateCopy, { orientationSum: 0 });\n return stateCopy;\n}\n\nexport async function random222Scramble(): Promise<Alg> {\n return await solve222(await random222State());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nlet cachedImport: Promise<\n typeof import(\"../../../../vendor/cstimer/src/js/scramble/scramble_444\")\n> | null = null;\nfunction dynamicScramble444(): Promise<\n typeof import(\"../../../../vendor/cstimer/src/js/scramble/scramble_444\")\n> {\n return (cachedImport ??= import(\n \"../../../../vendor/cstimer/src/js/scramble/scramble_444\"\n ));\n}\n\nexport async function initialize444(): Promise<void> {\n return (await dynamicScramble444()).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n return (await dynamicScramble444()).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { Transformation } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { cachedMegaminxDefWithoutMO } from \"./megaminx.sgs.json\";\nimport { TrembleSolver } from \"../tremble\";\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 sgs = await import(\"./megaminx.sgs.json\");\n const json: SGSCachedData = await sgs.cachedSGSDataMegaminx();\n return new TrembleSolver(await cachedMegaminxDefWithoutMO(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"BR\",\n \"BL\",\n \"FR\",\n \"FL\",\n \"DR\",\n \"DL\",\n \"B\",\n \"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: Transformation): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const stateWithoutMO: Transformation = JSON.parse(JSON.stringify(state));\n stateWithoutMO.CENTERS.orientation = new Array(12).fill(0);\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 { Transformation } from \"../../../../kpuzzle\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport { sgsDataPyraminxFixedOrientation } from \"./pyraminx.sgs.json\";\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 sgs = await import(\"./pyraminx.sgs.json\");\n const json: SGSCachedData = await sgs.sgsDataPyraminx();\n return new TrembleSolver(\n await puzzles.pyraminx.def(),\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: Transformation): 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<Transformation> {\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await puzzles.pyraminx.def(),\n await sgsDataPyraminxFixedOrientation(),\n );\n}\n\nexport async function randomPyraminxScrambleFixedOrientation(): Promise<Alg> {\n return solvePyraminx(await randomPyraminxStateFixedOrientation());\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport type { Transformation } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport {\n sgsDataSkewbFixedCorner,\n skewbDefWithoutMOCached,\n} from \"./skewb.sgs.json\";\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 sgs = await import(\"./skewb.sgs.json\");\n const json: SGSCachedData = await sgs.sgsDataSkewb();\n return new TrembleSolver(\n await sgs.skewbDefWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nfunction resetCenterOrientation(state: Transformation): Transformation {\n return {\n CORNERS: state.CORNERS,\n CENTERS: {\n permutation: state.CENTERS.permutation,\n orientation: new Array(6).fill(0),\n },\n };\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(state: Transformation): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n 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<Transformation> {\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await skewbDefWithoutMOCached(),\n await sgsDataSkewbFixedCorner(),\n );\n}\n\nexport async function randomSkewbFixedCornerScramble(): Promise<Alg> {\n return solveSkewb(await randomSkewbFixedCornerState());\n}\n", "import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../../alg\";\nimport {\n randomChoiceFactory,\n randomUIntBelowFactory,\n} from \"../../../../vendor/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 randomUintBelow = await randomUIntBelowFactory();\n const randomChoice = await randomChoiceFactory<QuantumMove>();\n const randomNumChoice = randomChoice as any as (arr: Array<number>) => number; // TODO: Avoid needing multiple instantiations or recasting.\n\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.experimentalNumUnits() < 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, randomNumChoice([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 { Alg } from \"../../../../alg\";\n\nlet cachedImport: Promise<\n typeof import(\"../../../../vendor/sq12phase/scramble_sq1\")\n> | null = null;\nfunction dynamicScrambleSq1(): Promise<\n typeof import(\"../../../../vendor/sq12phase/scramble_sq1\")\n> {\n return (cachedImport ??= import(\"../../../../vendor/sq12phase/scramble_sq1\"));\n}\n\nexport async function getRandomSquare1Scramble(): Promise<Alg> {\n return Alg.fromString(\n await (await dynamicScrambleSq1()).getRandomSquare1ScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { Transformation } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\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 sgs = await import(\"./fto.sgs.json\");\n const json: SGSCachedData = await sgs.sgsDataFTO();\n return new TrembleSolver(await sgs.ftoDef(), 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: Transformation): 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\nlet warned = false;\nexport async function randomFTOScramble(): Promise<Alg> {\n if (!warned) {\n console.warn(\n \"FTO scrambles are not yet optimized. They may be much too long (\u224890 moves).\",\n );\n warned = true;\n }\n const sgs = await import(\"./fto.sgs.json\");\n return solveFTO(\n await randomStateFromSGS(await sgs.ftoDef(), await sgs.sgsDataFTO()),\n );\n}\n", "import type { Alg } from \"../../alg\";\nimport {\n preInitialize222,\n random222Scramble,\n solve222,\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 { solveMegaminx } from \"./solve/puzzles/megaminx\";\nimport {\n randomPyraminxScrambleFixedOrientation,\n solvePyraminx,\n} from \"./solve/puzzles/pyraminx\";\nimport {\n randomSkewbFixedCornerScramble,\n solveSkewb,\n} from \"./solve/puzzles/skewb\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport { bigCubeRandomMoves } from \"./solve/puzzles/big-cubes\";\nimport { oriented555RandomMoves } from \"./solve/puzzles/5x5x5\";\nimport { getRandomSquare1Scramble } from \"./solve/puzzles/sq1\";\nimport type { Transformation } from \"../../kpuzzle\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto\";\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): 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(`${name}: ${Math.round(end - start)}ms`);\n return result;\n}\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 randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"random222Scramble\", random222Scramble);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble);\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 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(\n \"getRandomSquare1Scramble\",\n getRandomSquare1Scramble,\n );\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n solve333ToString: async (s: Transformation): Promise<string> => {\n return (await solve333(s)).toString();\n },\n\n solve222ToString: async (s: Transformation): Promise<string> => {\n return (await solve222(s)).toString();\n },\n\n solveSkewbToString: async (s: Transformation): Promise<string> => {\n return (await solveSkewb(s)).toString();\n },\n\n solvePyraminxToString: async (s: Transformation): Promise<string> => {\n return (await solvePyraminx(s)).toString();\n },\n\n solveMegaminxToString: async (s: Transformation): Promise<string> => {\n return (await solveMegaminx(s)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n};\n\nexport type WorkerInsideAPI = typeof insideAPI;\n", "import { expose } from \"../../vendor/comlink-everywhere/inside\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,19 +1,8 @@
1
+ import {
2
+ expose
3
+ } from "./chunk-BJIOROQC.js";
1
4
  import "./chunk-WO2AXYFE.js";
2
5
 
3
- // src/cubing/vendor/comlink-everywhere/inside/index.js
4
- import { expose as comlinkExpose } from "comlink";
5
- var useNodeWorkarounds = typeof globalThis.Worker === "undefined" && typeof globalThis.WorkerNavigator === "undefined";
6
- function expose(api) {
7
- if (useNodeWorkarounds) {
8
- (async () => {
9
- const { port } = await import("./node-SP4L2AKI.js");
10
- comlinkExpose(api, await port());
11
- })();
12
- } else {
13
- comlinkExpose(api);
14
- }
15
- }
16
-
17
6
  // src/cubing/search/esm-test-worker.js
18
7
  var esmTestAPIImplementation = {
19
8
  test: (s) => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/cubing/vendor/comlink-everywhere/inside/index.js", "../../src/cubing/search/esm-test-worker.js"],
4
- "sourcesContent": ["import { expose as comlinkExpose } from \"comlink\";\n\nconst useNodeWorkarounds =\n typeof globalThis.Worker === \"undefined\" &&\n typeof globalThis.WorkerNavigator === \"undefined\";\n\nexport function expose(api) {\n if (useNodeWorkarounds) {\n (async () => {\n const { port } = await import(\"./node.js\");\n comlinkExpose(api, await port());\n })();\n } else {\n comlinkExpose(api);\n }\n}\n", "// We need to use a static `import` statement instead of dynamic `import()` to\n// test true compatibility (Snowpack behaves differently for those two, for\n// example). This may result in an unpreventable extra error in the console.\nimport { expose } from \"../vendor/comlink-everywhere/inside\";\n\nexport const esmTestAPIImplementation = {\n test: (s) => {\n if (s === \"to worker\") {\n return \"from worker\";\n }\n },\n};\n\nexpose(esmTestAPIImplementation);\n"],
5
- "mappings": ";;;AAAA;AAEA,IAAM,qBACJ,OAAO,WAAW,WAAW,eAC7B,OAAO,WAAW,oBAAoB;AAEjC,gBAAgB,KAAK;AAC1B,MAAI,oBAAoB;AACtB,IAAC,aAAY;AACX,YAAM,EAAE,SAAS,MAAM,OAAO;AAC9B,oBAAc,KAAK,MAAM;AAAA;AAAA,SAEtB;AACL,kBAAc;AAAA;AAAA;;;ACRX,IAAM,2BAA2B;AAAA,EACtC,MAAM,CAAC,MAAM;AACX,QAAI,MAAM,aAAa;AACrB,aAAO;AAAA;AAAA;AAAA;AAKb,OAAO;",
3
+ "sources": ["../../src/cubing/search/esm-test-worker.js"],
4
+ "sourcesContent": ["// We need to use a static `import` statement instead of dynamic `import()` to\n// test true compatibility (Snowpack behaves differently for those two, for\n// example). This may result in an unpreventable extra error in the console.\nimport { expose } from \"../vendor/comlink-everywhere/inside\";\n\nexport const esmTestAPIImplementation = {\n test: (s) => {\n if (s === \"to worker\") {\n return \"from worker\";\n }\n },\n};\n\nexpose(esmTestAPIImplementation);\n"],
5
+ "mappings": ";;;;;;AAKO,IAAM,2BAA2B;AAAA,EACtC,MAAM,CAAC,MAAM;AACX,QAAI,MAAM,aAAa;AACrB,aAAO;AAAA;AAAA;AAAA;AAKb,OAAO;",
6
6
  "names": []
7
7
  }