cubing 0.49.2 → 0.50.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.
- package/dist/lib/cubing/bluetooth/index.js +1 -1
- package/dist/lib/cubing/chunks/{chunk-JNIAXRNE.js → chunk-C4UUCOBH.js} +1 -1
- package/dist/lib/cubing/chunks/{chunk-W2Z7MAP2.js → chunk-I4MRKD4Z.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-OW4IHAI4.js → chunk-P5TX6QDI.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-4K67JPLC.js → chunk-YOMULQ2R.js} +7 -7
- package/dist/lib/cubing/chunks/{inside-BKENXSSR.js → inside-UAYHMFKU.js} +11 -9
- package/dist/lib/cubing/chunks/inside-UAYHMFKU.js.map +7 -0
- package/dist/lib/cubing/chunks/{puzzles-dynamic-unofficial-EE5FDJ3S.js → puzzles-dynamic-unofficial-NCMLO2AJ.js} +73 -73
- package/dist/lib/cubing/chunks/puzzles-dynamic-unofficial-NCMLO2AJ.js.map +7 -0
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-OOIOU5SK.js → search-dynamic-sgs-side-events-RPVZU2YB.js} +2 -2
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-COV225SC.js → search-dynamic-sgs-unofficial-2TYKOUM4.js} +2 -2
- package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-EWVB2ON7.js → search-dynamic-solve-4x4x4-BUXBRWGT.js} +4 -4
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-UOKDYVD5.js +1405 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-UOKDYVD5.js.map +7 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js +1 -1
- package/dist/lib/cubing/chunks/{twisty-dynamic-3d-TINH44QH.js → twisty-dynamic-3d-HF7KVBOE.js} +3 -3
- package/dist/lib/cubing/puzzles/index.js +1 -1
- package/dist/lib/cubing/scramble/index.js +3 -3
- package/dist/lib/cubing/search/index.js +3 -3
- package/dist/lib/cubing/twisty/index.js +2 -2
- package/package.json +1 -1
- package/dist/lib/cubing/chunks/inside-BKENXSSR.js.map +0 -7
- package/dist/lib/cubing/chunks/puzzles-dynamic-unofficial-EE5FDJ3S.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-EY5ZVAGO.js +0 -1781
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-EY5ZVAGO.js.map +0 -7
- /package/dist/lib/cubing/chunks/{chunk-JNIAXRNE.js.map → chunk-C4UUCOBH.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-W2Z7MAP2.js.map → chunk-I4MRKD4Z.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-OW4IHAI4.js.map → chunk-P5TX6QDI.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-4K67JPLC.js.map → chunk-YOMULQ2R.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-OOIOU5SK.js.map → search-dynamic-sgs-side-events-RPVZU2YB.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-COV225SC.js.map → search-dynamic-sgs-unofficial-2TYKOUM4.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-EWVB2ON7.js.map → search-dynamic-solve-4x4x4-BUXBRWGT.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{twisty-dynamic-3d-TINH44QH.js.map → twisty-dynamic-3d-HF7KVBOE.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
puzzles
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YOMULQ2R.js";
|
|
4
4
|
import {
|
|
5
5
|
from
|
|
6
6
|
} from "./chunk-VVXSTWUD.js";
|
|
@@ -602,4 +602,4 @@ export {
|
|
|
602
602
|
initialize333,
|
|
603
603
|
random333OrientedScramble
|
|
604
604
|
};
|
|
605
|
-
//# sourceMappingURL=chunk-
|
|
605
|
+
//# sourceMappingURL=chunk-I4MRKD4Z.js.map
|
|
@@ -527,7 +527,7 @@ var StatsPanel = class {
|
|
|
527
527
|
// src/cubing/twisty/heavy-code-imports/3d.ts
|
|
528
528
|
var cachedConstructorProxy = null;
|
|
529
529
|
async function proxy3D() {
|
|
530
|
-
return cachedConstructorProxy ??= import("./twisty-dynamic-3d-
|
|
530
|
+
return cachedConstructorProxy ??= import("./twisty-dynamic-3d-HF7KVBOE.js");
|
|
531
531
|
}
|
|
532
532
|
var THREEJS = from(
|
|
533
533
|
async () => (await proxy3D()).T3I
|
|
@@ -1155,4 +1155,4 @@ export {
|
|
|
1155
1155
|
proxy3D,
|
|
1156
1156
|
THREEJS
|
|
1157
1157
|
};
|
|
1158
|
-
//# sourceMappingURL=chunk-
|
|
1158
|
+
//# sourceMappingURL=chunk-P5TX6QDI.js.map
|
|
@@ -476,7 +476,7 @@ var FTOPuzzleLoader = class extends PGPuzzleLoader {
|
|
|
476
476
|
}
|
|
477
477
|
stickerings = ftoStickerings;
|
|
478
478
|
svg = getCached(async () => {
|
|
479
|
-
return (await import("./puzzles-dynamic-unofficial-
|
|
479
|
+
return (await import("./puzzles-dynamic-unofficial-NCMLO2AJ.js")).ftoSVG;
|
|
480
480
|
});
|
|
481
481
|
};
|
|
482
482
|
var fto = new FTOPuzzleLoader();
|
|
@@ -497,7 +497,7 @@ var kilominx = {
|
|
|
497
497
|
includeEdgeOrbits: false
|
|
498
498
|
}),
|
|
499
499
|
svg: getCached(async () => {
|
|
500
|
-
return (await import("./puzzles-dynamic-unofficial-
|
|
500
|
+
return (await import("./puzzles-dynamic-unofficial-NCMLO2AJ.js")).kilominxSVG;
|
|
501
501
|
})
|
|
502
502
|
};
|
|
503
503
|
|
|
@@ -509,11 +509,11 @@ var loopover = {
|
|
|
509
509
|
inventionYear: 2018,
|
|
510
510
|
kpuzzle: getCached(
|
|
511
511
|
async () => new KPuzzle(
|
|
512
|
-
(await import("./puzzles-dynamic-unofficial-
|
|
512
|
+
(await import("./puzzles-dynamic-unofficial-NCMLO2AJ.js")).loopoverJSON
|
|
513
513
|
)
|
|
514
514
|
),
|
|
515
515
|
svg: async () => {
|
|
516
|
-
return (await import("./puzzles-dynamic-unofficial-
|
|
516
|
+
return (await import("./puzzles-dynamic-unofficial-NCMLO2AJ.js")).loopoverSVG;
|
|
517
517
|
}
|
|
518
518
|
};
|
|
519
519
|
|
|
@@ -596,11 +596,11 @@ var rediCube = {
|
|
|
596
596
|
inventionYear: 2009,
|
|
597
597
|
kpuzzle: getCached(
|
|
598
598
|
async () => new KPuzzle(
|
|
599
|
-
(await import("./puzzles-dynamic-unofficial-
|
|
599
|
+
(await import("./puzzles-dynamic-unofficial-NCMLO2AJ.js")).rediCubeJSON
|
|
600
600
|
)
|
|
601
601
|
),
|
|
602
602
|
svg: async () => {
|
|
603
|
-
return (await import("./puzzles-dynamic-unofficial-
|
|
603
|
+
return (await import("./puzzles-dynamic-unofficial-NCMLO2AJ.js")).rediCubeSVG;
|
|
604
604
|
}
|
|
605
605
|
};
|
|
606
606
|
|
|
@@ -701,4 +701,4 @@ export {
|
|
|
701
701
|
cube3x3x3,
|
|
702
702
|
puzzles
|
|
703
703
|
};
|
|
704
|
-
//# sourceMappingURL=chunk-
|
|
704
|
+
//# sourceMappingURL=chunk-YOMULQ2R.js.map
|
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
random333Scramble,
|
|
13
13
|
setIsInsideWorker,
|
|
14
14
|
solve333
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-I4MRKD4Z.js";
|
|
16
16
|
import "./chunk-RDSQRW3G.js";
|
|
17
17
|
import {
|
|
18
18
|
cube2x2x2,
|
|
19
19
|
puzzles
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-YOMULQ2R.js";
|
|
21
21
|
import {
|
|
22
22
|
from
|
|
23
23
|
} from "./chunk-VVXSTWUD.js";
|
|
@@ -185,7 +185,7 @@ async function wasmRandomScrambleForEvent(eventID) {
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts
|
|
188
|
-
var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-
|
|
188
|
+
var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-RPVZU2YB.js"));
|
|
189
189
|
|
|
190
190
|
// src/cubing/search/inside/solve/puzzles/2x2x2.ts
|
|
191
191
|
var cachedTrembleSolver = null;
|
|
@@ -210,7 +210,7 @@ async function solve222(pattern) {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
// src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts
|
|
213
|
-
var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-
|
|
213
|
+
var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-BUXBRWGT.js"));
|
|
214
214
|
|
|
215
215
|
// src/cubing/search/inside/solve/puzzles/4x4x4.ts
|
|
216
216
|
var randomSuffixes = [
|
|
@@ -229,13 +229,15 @@ async function random444OrientedScramble() {
|
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
// src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts
|
|
232
|
-
var
|
|
232
|
+
var dynamicFTO = from(
|
|
233
|
+
() => import("./search-dynamic-solve-fto-UOKDYVD5.js")
|
|
234
|
+
);
|
|
233
235
|
|
|
234
236
|
// src/cubing/search/inside/solve/puzzles/fto.ts
|
|
235
|
-
var dynamic = from(() => import("./search-dynamic-sgs-unofficial-
|
|
237
|
+
var dynamic = from(() => import("./search-dynamic-sgs-unofficial-2TYKOUM4.js"));
|
|
236
238
|
async function randomFTOScramble() {
|
|
237
239
|
mustBeInsideWorker();
|
|
238
|
-
return new Alg(await (await
|
|
240
|
+
return new Alg(await (await dynamicFTO).getRandomFTOScramble());
|
|
239
241
|
}
|
|
240
242
|
|
|
241
243
|
// src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts
|
|
@@ -312,7 +314,7 @@ async function solvePyraminx(pattern) {
|
|
|
312
314
|
}
|
|
313
315
|
|
|
314
316
|
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts
|
|
315
|
-
var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-
|
|
317
|
+
var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-2TYKOUM4.js"));
|
|
316
318
|
|
|
317
319
|
// src/cubing/search/inside/solve/puzzles/redi_cube.ts
|
|
318
320
|
async function randomRediCubeScramble() {
|
|
@@ -568,4 +570,4 @@ var insideAPI = {
|
|
|
568
570
|
|
|
569
571
|
// src/cubing/search/inside/index.ts
|
|
570
572
|
expose(insideAPI);
|
|
571
|
-
//# sourceMappingURL=inside-
|
|
573
|
+
//# sourceMappingURL=inside-UAYHMFKU.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/twsearch.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/kilominx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/kilominx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/master_tetraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/megaminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/pyraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/redi_cube.ts", "../../../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sq1/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/sq1.ts", "../../../../src/cubing/search/inside/api.ts", "../../../../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 { wasmTwsearch } from \"../twsearch\";\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 wasmTwsearch((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 KPuzzleDefinition,\n KTransformationData,\n} from \"../../../kpuzzle\";\nimport { from } from \"../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const twsearchPromise: Promise<\n typeof import(\"../../../vendor/mpl/twsearch\")\n> = from(async () => import(\"../../../vendor/mpl/twsearch\"));\n\nexport interface TwsearchOptions {\n // TODO: start prune depth?\n generatorMoves?: string[];\n targetPattern?: KTransformationData;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function wasmTwsearch(\n def: KPuzzleDefinition,\n pattern: KPattern,\n options?: TwsearchOptions,\n): Promise<Alg> {\n const { wasmTwsearch } = await twsearchPromise;\n return wasmTwsearch(def, pattern, options);\n}\n\nexport async function wasmRandomScrambleForEvent(\n eventID: string,\n): Promise<Alg> {\n const { wasmRandomScrambleForEvent } = await twsearchPromise;\n return wasmRandomScrambleForEvent(eventID);\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const searchDynamicSideEvents = from<\n typeof import(\"./search-dynamic-sgs-side-events\")\n>(() => import(\"./search-dynamic-sgs-side-events\"));\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamic4x4x4Solver = from<\n typeof import(\"./search-dynamic-solve-4x4x4\")\n>(() => import(\"./search-dynamic-solve-4x4x4\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { 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 { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicFTO = from<typeof import(\"./search-dynamic-solve-fto\")>(\n () => import(\"./search-dynamic-solve-fto\"),\n);\n", "import { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { from } from \"../../../../vendor/mit/p-lazy/p-lazy\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { dynamicFTO } from \"./dynamic/fto\";\n\nconst dynamic = from<\n typeof import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\")\n>(() => import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\"));\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (await dynamic).sgsDataFTO();\n return new TrembleSolver(await puzzles[\"fto\"].kpuzzle(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"D\",\n \"B\",\n \"BR\",\n \"BL\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeFTO(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveFTO(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 { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicKilominxSolver = from<\n typeof import(\"./search-dynamic-solve-kilominx\")\n>(() => import(\"./search-dynamic-solve-kilominx\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicKilominxSolver } from \"./dynamic/kilominx\";\n\nexport async function randomKilominxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamicKilominxSolver).getRandomKilominxScramble();\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicMasterTetraminxSolver = from<\n typeof import(\"./search-dynamic-solve-master_tetraminx\")\n>(() => import(\"./search-dynamic-solve-master_tetraminx\"));\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicMasterTetraminxSolver } from \"./dynamic/master_tetraminx\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(\n await (\n await dynamicMasterTetraminxSolver\n ).randomMasterTetraminxScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPatternData } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedSGSDataMegaminx();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n json,\n [\"U\", \"R\", \"F\", \"L\", \"BR\", \"BL\", \"FR\", \"FL\", \"DR\", \"DL\", \"B\", \"D\"],\n );\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(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 { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const searchDynamicUnofficial = from<\n typeof import(\"./search-dynamic-sgs-unofficial\")\n>(() => import(\"./search-dynamic-sgs-unofficial\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { searchDynamicUnofficial } from \"./dynamic/sgs-unofficial\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await searchDynamicUnofficial).getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { 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 ).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\nexport async function randomSkewbFixedCornerPattern(): Promise<KPattern> {\n // Note: this sets all center orientations to 0.\n return randomPatternFromSGS(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n await (await searchDynamicSideEvents).sgsDataSkewbFixedCorner(),\n );\n}\n\nexport async function randomSkewbFixedCornerScramble(): Promise<Alg> {\n return solveSkewb(await randomSkewbFixedCornerPattern());\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicSq1Solver = from<\n typeof import(\"./search-dynamic-solve-sq1\")\n>(() => import(\"./search-dynamic-solve-sq1\"));\n", "import { Alg } from \"../../../../alg\";\nimport { dynamicSq1Solver } from \"./dynamic/sq1\";\n\nexport async function getRandomSquare1Scramble(): Promise<Alg> {\n return Alg.fromString(\n await (await dynamicSq1Solver).getRandomSquare1ScrambleString(),\n );\n}\n", "import type { Alg } from \"../../alg\";\nimport {\n KPattern,\n KPuzzle,\n type KPatternData,\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 { randomKilominxScramble } from \"./solve/puzzles/kilominx\";\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 {\n randomSkewbFixedCornerScramble,\n solveSkewb,\n} from \"./solve/puzzles/skewb\";\nimport { getRandomSquare1Scramble } from \"./solve/puzzles/sq1\";\nimport {\n wasmRandomScrambleForEvent,\n wasmTwsearch,\n type TwsearchOptions,\n} from \"./solve/twsearch\";\n\nconst IDLE_PREFETCH_TIMEOUT_MS = 1000;\n\nsetIsInsideWorker(true);\n\nlet DEBUG_MEASURE_PERF = true;\nexport function setDebugMeasurePerf(newDebugMeasurePerf: boolean): void {\n DEBUG_MEASURE_PERF = newDebugMeasurePerf;\n}\n\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\n\nasync function measurePerf<T>(\n name: string,\n f: () => T | Promise<T>,\n options?: { isPrefetch?: boolean },\n): Promise<T> {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n\n const start = now();\n const result = f();\n if ((result as any)?.then) {\n await result;\n }\n const end = now();\n console.warn(\n `${name}${options?.isPrefetch ? \" (prefetched)\" : \"\"}: ${Math.round(\n end - start,\n )}ms`,\n );\n return result;\n}\n\nconst prefetchPromises: Map<string, Promise<Alg>> = new Map();\n// This would just be a number, except `node` is extremely silly and returns an object instead.\n// https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\nlet queuedPrefetchTimeoutID: ReturnType<typeof setTimeout> | null = null;\n\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n 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\":m\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 \"skewb\":\n return measurePerf(\n \"randomSkewbFixedCornerScramble\",\n randomSkewbFixedCornerScramble,\n );\n case \"sq1\":\n return measurePerf(\"getRandomSquare1Scramble\", getRandomSquare1Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"master_tetraminx\":\n return measurePerf(\n \"randomMasterTetraminxScramble\",\n randomMasterTetraminxScramble,\n );\n case \"kilominx\":\n return measurePerf(\"randomKilominxScramble\", randomKilominxScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"redi_cube\":\n return measurePerf(\"randomRediCubeScramble\", randomRediCubeScramble, {\n isPrefetch: options?.isPrefetch,\n });\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n}\n\nexport enum PrefetchLevel {\n Auto = \"auto\",\n None = \"none\",\n Immediate = \"immediate\",\n}\n\nlet currentPrefetchLevel = PrefetchLevel.Auto;\n\nexport const insideAPI = {\n initialize: async (eventID: string) => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize444);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n setScramblePrefetchLevel(prefetchLevel: `${PrefetchLevel}`) {\n currentPrefetchLevel = prefetchLevel as PrefetchLevel;\n },\n\n randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n let promise = prefetchPromises.get(eventID);\n if (promise) {\n prefetchPromises.delete(eventID);\n } else {\n promise = randomScrambleForEvent(eventID);\n }\n if (currentPrefetchLevel !== PrefetchLevel.None) {\n promise.then(() => {\n // `queuedPrefetch` could be 0, but:\n // > Passing an invalid ID to clearTimeout() silently does nothing; no exception is thrown.\n // https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout#notes\n if (queuedPrefetchTimeoutID) {\n clearTimeout(queuedPrefetchTimeoutID);\n }\n queuedPrefetchTimeoutID = setTimeout(\n () => {\n prefetchPromises.set(\n eventID,\n randomScrambleForEvent(eventID, {\n isPrefetch: true,\n }),\n );\n },\n currentPrefetchLevel === PrefetchLevel.Immediate\n ? 0\n : IDLE_PREFETCH_TIMEOUT_MS,\n );\n });\n }\n return promise;\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n solve333ToString: async (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 solveTwsearchToString: async (\n def: KPuzzleDefinition,\n patternData: KPatternData,\n options?: TwsearchOptions,\n ): Promise<string> => {\n const kpuzzle = new KPuzzle(def);\n const pattern = new KPattern(kpuzzle, patternData);\n return (await wasmTwsearch(def, pattern, options)).toString();\n },\n};\n\nexport type WorkerInsideAPI = typeof insideAPI;\n", "import { expose } from \"../../vendor/apache/comlink-everywhere/inside\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["wasmTwsearch", "wasmRandomScrambleForEvent", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH"]
|
|
7
|
+
}
|
|
@@ -4,92 +4,92 @@ var ftoSVG = `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
4
4
|
<title>fto</title>
|
|
5
5
|
<g id="fto" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linejoin="round">
|
|
6
6
|
<g id="BL" transform="translate(2040.000000, 608.000000) scale(-1, -1) rotate(90.000000) translate(-2040.000000, -608.000000) translate(1560.000000, 368.000000)" stroke="#000000" stroke-width="12">
|
|
7
|
-
<polygon id="C4RNER-l4-o3" style="fill: #
|
|
8
|
-
<polygon id="EDGES-l9-o0" style="fill: #
|
|
9
|
-
<polygon id="CENTERS-l16-o0" style="fill: #
|
|
10
|
-
<polygon id="EDGES-l3-o0" style="fill: #
|
|
11
|
-
<polygon id="C4RNER-l3-o2" style="fill: #
|
|
12
|
-
<polygon id="CENTERS-l19-o0" style="fill: #
|
|
13
|
-
<polygon id="EDGES-l7-o0" style="fill: #
|
|
14
|
-
<polygon id="CENTERS-l3-o0" style="fill: #
|
|
15
|
-
<polygon id="C4RNER-l0-o1" style="fill: #
|
|
7
|
+
<polygon id="C4RNER-l4-o3" style="fill: #ff8000;" points="480 0 640 160 320 160"></polygon>
|
|
8
|
+
<polygon id="EDGES-l9-o0" style="fill: #ff8000;" points="640 160 800 320 480 320"></polygon>
|
|
9
|
+
<polygon id="CENTERS-l16-o0" style="fill: #ff8000;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
10
|
+
<polygon id="EDGES-l3-o0" style="fill: #ff8000;" points="320 160 480 320 160 320"></polygon>
|
|
11
|
+
<polygon id="C4RNER-l3-o2" style="fill: #ff8000;" points="800 320 960 480 640 480"></polygon>
|
|
12
|
+
<polygon id="CENTERS-l19-o0" style="fill: #ff8000;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
13
|
+
<polygon id="EDGES-l7-o0" style="fill: #ff8000;" points="480 320 640 480 320 480"></polygon>
|
|
14
|
+
<polygon id="CENTERS-l3-o0" style="fill: #ff8000;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
15
|
+
<polygon id="C4RNER-l0-o1" style="fill: #ff8000;" points="160 320 320 480 0 480"></polygon>
|
|
16
16
|
</g>
|
|
17
17
|
<g id="D" transform="translate(1280.000000, 648.000000)" stroke="#000000" stroke-width="12">
|
|
18
|
-
<polygon id="C4RNER-l4-o0" style="fill: #
|
|
19
|
-
<polygon id="EDGES-l3-o1" style="fill: #
|
|
20
|
-
<polygon id="CENTERS-l8-o0" style="fill: #
|
|
21
|
-
<polygon id="EDGES-l5-o1" style="fill: #
|
|
22
|
-
<polygon id="C4RNER-l0-o0" style="fill: #
|
|
23
|
-
<polygon id="CENTERS-l17-o0" style="fill: #
|
|
24
|
-
<polygon id="EDGES-l1-o1" style="fill: #
|
|
25
|
-
<polygon id="CENTERS-l6-o0" style="fill: #
|
|
26
|
-
<polygon id="C4RNER-l2-o0" style="fill: #
|
|
18
|
+
<polygon id="C4RNER-l4-o0" style="fill: #f4f400;" points="480 0 640 160 320 160"></polygon>
|
|
19
|
+
<polygon id="EDGES-l3-o1" style="fill: #f4f400;" points="640 160 800 320 480 320"></polygon>
|
|
20
|
+
<polygon id="CENTERS-l8-o0" style="fill: #f4f400;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
21
|
+
<polygon id="EDGES-l5-o1" style="fill: #f4f400;" points="320 160 480 320 160 320"></polygon>
|
|
22
|
+
<polygon id="C4RNER-l0-o0" style="fill: #f4f400;" points="800 320 960 480 640 480"></polygon>
|
|
23
|
+
<polygon id="CENTERS-l17-o0" style="fill: #f4f400;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
24
|
+
<polygon id="EDGES-l1-o1" style="fill: #f4f400;" points="480 320 640 480 320 480"></polygon>
|
|
25
|
+
<polygon id="CENTERS-l6-o0" style="fill: #f4f400;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
26
|
+
<polygon id="C4RNER-l2-o0" style="fill: #f4f400;" points="160 320 320 480 0 480"></polygon>
|
|
27
27
|
</g>
|
|
28
28
|
<g id="BR" transform="translate(1480.000000, 608.000000) scale(1, -1) rotate(90.000000) translate(-1480.000000, -608.000000) translate(1000.000000, 368.000000)" stroke="#000000" stroke-width="12">
|
|
29
|
-
<polygon id="C4RNER-l4-o1" style="fill: #
|
|
30
|
-
<polygon id="EDGES-l2-o0" style="fill: #
|
|
31
|
-
<polygon id="CENTERS-l15-o0" style="fill: #
|
|
32
|
-
<polygon id="EDGES-l5-o0" style="fill: #
|
|
33
|
-
<polygon id="C4RNER-l5-o2" style="fill: #
|
|
34
|
-
<polygon id="CENTERS-l2-o0" style="fill: #
|
|
35
|
-
<polygon id="EDGES-l4-o0" style="fill: #
|
|
36
|
-
<polygon id="CENTERS-l4-o0" style="fill: #
|
|
37
|
-
<polygon id="C4RNER-l2-o3" style="fill: #
|
|
29
|
+
<polygon id="C4RNER-l4-o1" style="fill: #aaaaaa;" points="480 0 640 160 320 160"></polygon>
|
|
30
|
+
<polygon id="EDGES-l2-o0" style="fill: #aaaaaa;" points="640 160 800 320 480 320"></polygon>
|
|
31
|
+
<polygon id="CENTERS-l15-o0" style="fill: #aaaaaa;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
32
|
+
<polygon id="EDGES-l5-o0" style="fill: #aaaaaa;" points="320 160 480 320 160 320"></polygon>
|
|
33
|
+
<polygon id="C4RNER-l5-o2" style="fill: #aaaaaa;" points="800 320 960 480 640 480"></polygon>
|
|
34
|
+
<polygon id="CENTERS-l2-o0" style="fill: #aaaaaa;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
35
|
+
<polygon id="EDGES-l4-o0" style="fill: #aaaaaa;" points="480 320 640 480 320 480"></polygon>
|
|
36
|
+
<polygon id="CENTERS-l4-o0" style="fill: #aaaaaa;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
37
|
+
<polygon id="C4RNER-l2-o3" style="fill: #aaaaaa;" points="160 320 320 480 0 480"></polygon>
|
|
38
38
|
</g>
|
|
39
39
|
<g id="B" transform="translate(1760.000000, 328.000000) scale(1, -1) translate(-1760.000000, -328.000000) translate(1280.000000, 88.000000)" stroke="#000000" stroke-width="12">
|
|
40
|
-
<polygon id="C4RNER-l4-o2" style="fill: #
|
|
41
|
-
<polygon id="EDGES-l9-o1" style="fill: #
|
|
42
|
-
<polygon id="CENTERS-l13-o0" style="fill: #
|
|
43
|
-
<polygon id="EDGES-l2-o1" style="fill: #
|
|
44
|
-
<polygon id="C4RNER-l3-o3" style="fill: #
|
|
45
|
-
<polygon id="CENTERS-l12-o0" style="fill: #
|
|
46
|
-
<polygon id="EDGES-l8-o1" style="fill: #
|
|
47
|
-
<polygon id="CENTERS-l10-o0" style="fill: #
|
|
48
|
-
<polygon id="C4RNER-l5-o1" style="fill: #
|
|
40
|
+
<polygon id="C4RNER-l4-o2" style="fill: #2266ff;" points="480 0 640 160 320 160"></polygon>
|
|
41
|
+
<polygon id="EDGES-l9-o1" style="fill: #2266ff;" points="640 160 800 320 480 320"></polygon>
|
|
42
|
+
<polygon id="CENTERS-l13-o0" style="fill: #2266ff;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
43
|
+
<polygon id="EDGES-l2-o1" style="fill: #2266ff;" points="320 160 480 320 160 320"></polygon>
|
|
44
|
+
<polygon id="C4RNER-l3-o3" style="fill: #2266ff;" points="800 320 960 480 640 480"></polygon>
|
|
45
|
+
<polygon id="CENTERS-l12-o0" style="fill: #2266ff;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
46
|
+
<polygon id="EDGES-l8-o1" style="fill: #2266ff;" points="480 320 640 480 320 480"></polygon>
|
|
47
|
+
<polygon id="CENTERS-l10-o0" style="fill: #2266ff;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
48
|
+
<polygon id="C4RNER-l5-o1" style="fill: #2266ff;" points="160 320 320 480 0 480"></polygon>
|
|
49
49
|
</g>
|
|
50
50
|
<g id="R" transform="translate(888.000000, 608.000000) scale(-1, -1) rotate(90.000000) translate(-888.000000, -608.000000) translate(408.000000, 368.000000)" stroke="#000000" stroke-width="12">
|
|
51
|
-
<polygon id="C4RNER-l1-o1" style="fill:
|
|
52
|
-
<polygon id="EDGES-l6-o1" style="fill:
|
|
53
|
-
<polygon id="CENTERS-l7-o0" style="fill:
|
|
54
|
-
<polygon id="EDGES-l0-o1" style="fill:
|
|
55
|
-
<polygon id="C4RNER-l5-o3" style="fill:
|
|
56
|
-
<polygon id="CENTERS-l5-o0" style="fill:
|
|
57
|
-
<polygon id="EDGES-l4-o1" style="fill:
|
|
58
|
-
<polygon id="CENTERS-l11-o0" style="fill:
|
|
59
|
-
<polygon id="C4RNER-l2-o2" style="fill:
|
|
51
|
+
<polygon id="C4RNER-l1-o1" style="fill: red;" points="480 0 640 160 320 160"></polygon>
|
|
52
|
+
<polygon id="EDGES-l6-o1" style="fill: red;" points="640 160 800 320 480 320"></polygon>
|
|
53
|
+
<polygon id="CENTERS-l7-o0" style="fill: red;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
54
|
+
<polygon id="EDGES-l0-o1" style="fill: red;" points="320 160 480 320 160 320"></polygon>
|
|
55
|
+
<polygon id="C4RNER-l5-o3" style="fill: red;" points="800 320 960 480 640 480"></polygon>
|
|
56
|
+
<polygon id="CENTERS-l5-o0" style="fill: red;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
57
|
+
<polygon id="EDGES-l4-o1" style="fill: red;" points="480 320 640 480 320 480"></polygon>
|
|
58
|
+
<polygon id="CENTERS-l11-o0" style="fill: red;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
59
|
+
<polygon id="C4RNER-l2-o2" style="fill: red;" points="160 320 320 480 0 480"></polygon>
|
|
60
60
|
</g>
|
|
61
61
|
<g id="F" transform="translate(128.000000, 648.000000)" stroke="#000000" stroke-width="12">
|
|
62
|
-
<polygon id="C4RNER-l1-o2" style="fill:
|
|
63
|
-
<polygon id="EDGES-l0-o0" style="fill:
|
|
64
|
-
<polygon id="CENTERS-l0-o0" style="fill:
|
|
65
|
-
<polygon id="EDGES-l10-o0" style="fill:
|
|
66
|
-
<polygon id="C4RNER-l2-o1" style="fill:
|
|
67
|
-
<polygon id="CENTERS-l1-o0" style="fill:
|
|
68
|
-
<polygon id="EDGES-l1-o0" style="fill:
|
|
69
|
-
<polygon id="CENTERS-l14-o0" style="fill:
|
|
70
|
-
<polygon id="C4RNER-l0-o3" style="fill:
|
|
62
|
+
<polygon id="C4RNER-l1-o2" style="fill: #44ee00;" points="480 0 640 160 320 160"></polygon>
|
|
63
|
+
<polygon id="EDGES-l0-o0" style="fill: #44ee00;" points="640 160 800 320 480 320"></polygon>
|
|
64
|
+
<polygon id="CENTERS-l0-o0" style="fill: #44ee00;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
65
|
+
<polygon id="EDGES-l10-o0" style="fill: #44ee00;" points="320 160 480 320 160 320"></polygon>
|
|
66
|
+
<polygon id="C4RNER-l2-o1" style="fill: #44ee00;" points="800 320 960 480 640 480"></polygon>
|
|
67
|
+
<polygon id="CENTERS-l1-o0" style="fill: #44ee00;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
68
|
+
<polygon id="EDGES-l1-o0" style="fill: #44ee00;" points="480 320 640 480 320 480"></polygon>
|
|
69
|
+
<polygon id="CENTERS-l14-o0" style="fill: #44ee00;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
70
|
+
<polygon id="C4RNER-l0-o3" style="fill: #44ee00;" points="160 320 320 480 0 480"></polygon>
|
|
71
71
|
</g>
|
|
72
72
|
<g id="L" transform="translate(328.000000, 608.000000) scale(1, -1) rotate(90.000000) translate(-328.000000, -608.000000) translate(-152.000000, 368.000000)" stroke="#000000" stroke-width="12">
|
|
73
|
-
<polygon id="C4RNER-l1-o3" style="fill: #
|
|
74
|
-
<polygon id="EDGES-l11-o1" style="fill: #
|
|
75
|
-
<polygon id="CENTERS-l21-o0" style="fill: #
|
|
76
|
-
<polygon id="EDGES-l10-o1" style="fill: #
|
|
77
|
-
<polygon id="C4RNER-l3-o1" style="fill: #
|
|
78
|
-
<polygon id="CENTERS-l18-o0" style="fill: #
|
|
79
|
-
<polygon id="EDGES-l7-o1" style="fill: #
|
|
80
|
-
<polygon id="CENTERS-l9-o0" style="fill: #
|
|
81
|
-
<polygon id="C4RNER-l0-o2" style="fill: #
|
|
73
|
+
<polygon id="C4RNER-l1-o3" style="fill: #8800dd;" points="480 0 640 160 320 160"></polygon>
|
|
74
|
+
<polygon id="EDGES-l11-o1" style="fill: #8800dd;" points="640 160 800 320 480 320"></polygon>
|
|
75
|
+
<polygon id="CENTERS-l21-o0" style="fill: #8800dd;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
76
|
+
<polygon id="EDGES-l10-o1" style="fill: #8800dd;" points="320 160 480 320 160 320"></polygon>
|
|
77
|
+
<polygon id="C4RNER-l3-o1" style="fill: #8800dd;" points="800 320 960 480 640 480"></polygon>
|
|
78
|
+
<polygon id="CENTERS-l18-o0" style="fill: #8800dd;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
79
|
+
<polygon id="EDGES-l7-o1" style="fill: #8800dd;" points="480 320 640 480 320 480"></polygon>
|
|
80
|
+
<polygon id="CENTERS-l9-o0" style="fill: #8800dd;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
81
|
+
<polygon id="C4RNER-l0-o2" style="fill: #8800dd;" points="160 320 320 480 0 480"></polygon>
|
|
82
82
|
</g>
|
|
83
83
|
<g id="U" transform="translate(608.000000, 328.000000) scale(1, -1) translate(-608.000000, -328.000000) translate(128.000000, 88.000000)" stroke="#000000" stroke-width="12">
|
|
84
|
-
<polygon id="C4RNER-l1-o0" style="fill: #
|
|
85
|
-
<polygon id="EDGES-l6-o0" style="fill: #
|
|
86
|
-
<polygon id="CENTERS-l20-o0" style="fill: #
|
|
87
|
-
<polygon id="EDGES-l11-o0" style="fill: #
|
|
88
|
-
<polygon id="C4RNER-l5-o0" style="fill: #
|
|
89
|
-
<polygon id="CENTERS-l23-o0" style="fill: #
|
|
90
|
-
<polygon id="EDGES-l8-o0" style="fill: #
|
|
91
|
-
<polygon id="CENTERS-l22-o0" style="fill: #
|
|
92
|
-
<polygon id="C4RNER-l3-o0" style="fill: #
|
|
84
|
+
<polygon id="C4RNER-l1-o0" style="fill: #ffffff;" points="480 0 640 160 320 160"></polygon>
|
|
85
|
+
<polygon id="EDGES-l6-o0" style="fill: #ffffff;" points="640 160 800 320 480 320"></polygon>
|
|
86
|
+
<polygon id="CENTERS-l20-o0" style="fill: #ffffff;" transform="translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) " points="480 160 640 320 320 320"></polygon>
|
|
87
|
+
<polygon id="EDGES-l11-o0" style="fill: #ffffff;" points="320 160 480 320 160 320"></polygon>
|
|
88
|
+
<polygon id="C4RNER-l5-o0" style="fill: #ffffff;" points="800 320 960 480 640 480"></polygon>
|
|
89
|
+
<polygon id="CENTERS-l23-o0" style="fill: #ffffff;" transform="translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) " points="640 320 800 480 480 480"></polygon>
|
|
90
|
+
<polygon id="EDGES-l8-o0" style="fill: #ffffff;" points="480 320 640 480 320 480"></polygon>
|
|
91
|
+
<polygon id="CENTERS-l22-o0" style="fill: #ffffff;" transform="translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) " points="320 320 480 480 160 480"></polygon>
|
|
92
|
+
<polygon id="C4RNER-l3-o0" style="fill: #ffffff;" points="160 320 320 480 0 480"></polygon>
|
|
93
93
|
</g>
|
|
94
94
|
</g>
|
|
95
95
|
</svg>
|
|
@@ -839,4 +839,4 @@ export {
|
|
|
839
839
|
rediCubeJSON,
|
|
840
840
|
rediCubeSVG
|
|
841
841
|
};
|
|
842
|
-
//# sourceMappingURL=puzzles-dynamic-unofficial-
|
|
842
|
+
//# sourceMappingURL=puzzles-dynamic-unofficial-NCMLO2AJ.js.map
|