@rednaxela101/cubing 0.63.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -0
- package/alg/index.d.ts +1 -0
- package/bluetooth/index.d.ts +1 -0
- package/dist/bin/chunks/chunk-22VWCGBC.js +13 -0
- package/dist/bin/chunks/chunk-22VWCGBC.js.map +7 -0
- package/dist/bin/order.js +59 -0
- package/dist/bin/order.js.map +7 -0
- package/dist/bin/puzzle-geometry-bin.js +407 -0
- package/dist/bin/puzzle-geometry-bin.js.map +7 -0
- package/dist/bin/scramble.js +188 -0
- package/dist/bin/scramble.js.map +7 -0
- package/dist/bin/svg.js +56 -0
- package/dist/bin/svg.js.map +7 -0
- package/dist/lib/cubing/alg/index.d.ts +2 -0
- package/dist/lib/cubing/alg/index.js +43 -0
- package/dist/lib/cubing/alg/index.js.map +7 -0
- package/dist/lib/cubing/bluetooth/index.d.ts +189 -0
- package/dist/lib/cubing/bluetooth/index.js +2271 -0
- package/dist/lib/cubing/bluetooth/index.js.map +7 -0
- package/dist/lib/cubing/chunks/big-puzzle-orientation-BA6QHO5C.js +68 -0
- package/dist/lib/cubing/chunks/big-puzzle-orientation-BA6QHO5C.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-2VJB4TMH.js +1774 -0
- package/dist/lib/cubing/chunks/chunk-2VJB4TMH.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-52ZXJEUO.js +665 -0
- package/dist/lib/cubing/chunks/chunk-52ZXJEUO.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-56VZAEPF.js +274 -0
- package/dist/lib/cubing/chunks/chunk-56VZAEPF.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-7GUL3OBQ.js +9 -0
- package/dist/lib/cubing/chunks/chunk-7GUL3OBQ.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-7L7BJSIM.js +21 -0
- package/dist/lib/cubing/chunks/chunk-7L7BJSIM.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-AESPJKN6.js +265 -0
- package/dist/lib/cubing/chunks/chunk-AESPJKN6.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-C2Q347XS.js +89 -0
- package/dist/lib/cubing/chunks/chunk-C2Q347XS.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-CGBMJBU3.js +1195 -0
- package/dist/lib/cubing/chunks/chunk-CGBMJBU3.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-HZQONEMD.js +249 -0
- package/dist/lib/cubing/chunks/chunk-HZQONEMD.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-IAGCVPL3.js +1069 -0
- package/dist/lib/cubing/chunks/chunk-IAGCVPL3.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-NAPITA3L.js +1 -0
- package/dist/lib/cubing/chunks/chunk-NAPITA3L.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-XPDJUSZ7.js +1876 -0
- package/dist/lib/cubing/chunks/chunk-XPDJUSZ7.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-YSI6PF35.js +619 -0
- package/dist/lib/cubing/chunks/chunk-YSI6PF35.js.map +7 -0
- package/dist/lib/cubing/chunks/inside-LG2EAKCL.js +557 -0
- package/dist/lib/cubing/chunks/inside-LG2EAKCL.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-2x2x2-JYJJXB4V.js +142 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-2x2x2-JYJJXB4V.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-3x3x3-FYXD7SIU.js +365 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-3x3x3-FYXD7SIU.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js +132 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-5x5x5-JUNRX27W.js +277 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-5x5x5-JUNRX27W.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-clock-USGQTDPO.js +836 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-clock-USGQTDPO.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-fto-WJHMLYCJ.js +100 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-fto-WJHMLYCJ.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-megaminx-2LVHIDL4.js +224 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-megaminx-2LVHIDL4.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-pyraminx-7UWX4HHI.js +93 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-pyraminx-7UWX4HHI.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-square1-PQEKBPFN.js +842 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-square1-PQEKBPFN.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-2x2x2-XFKQ4VJS.js +125 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-2x2x2-XFKQ4VJS.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-megaminx-ZDOOLEDW.js +1564 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-megaminx-ZDOOLEDW.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-pyraminx-W6UJWBYY.js +108 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-pyraminx-W6UJWBYY.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-skewb-FXGKV4KD.js +125 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-skewb-FXGKV4KD.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-YK6HA7BK.js +644 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-YK6HA7BK.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-3x3x3-DLMAGPXS.js +2549 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-3x3x3-DLMAGPXS.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NONXQHOJ.js +2923 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NONXQHOJ.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-3GQ2HLSW.js +1405 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-3GQ2HLSW.js.map +7 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js +19 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js.map +7 -0
- package/dist/lib/cubing/chunks/square1-stickerings-W2ZLZWIN.js +73 -0
- package/dist/lib/cubing/chunks/square1-stickerings-W2ZLZWIN.js.map +7 -0
- package/dist/lib/cubing/chunks/twips-2RNTWYNZ.js +433 -0
- package/dist/lib/cubing/chunks/twips-2RNTWYNZ.js.map +7 -0
- package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-23XTPLIK.js +10 -0
- package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-23XTPLIK.js.map +7 -0
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-JO6OGKOF.js +2424 -0
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-JO6OGKOF.js.map +7 -0
- package/dist/lib/cubing/index-BX6f56uo.d.ts +76 -0
- package/dist/lib/cubing/index-CcRu94bx.d.ts +2622 -0
- package/dist/lib/cubing/kpuzzle/index.d.ts +2 -0
- package/dist/lib/cubing/kpuzzle/index.js +12 -0
- package/dist/lib/cubing/kpuzzle/index.js.map +7 -0
- package/dist/lib/cubing/notation/index.d.ts +32 -0
- package/dist/lib/cubing/notation/index.js +20 -0
- package/dist/lib/cubing/notation/index.js.map +7 -0
- package/dist/lib/cubing/outside-BCzgSYQ_.d.ts +38 -0
- package/dist/lib/cubing/protocol/index.d.ts +28 -0
- package/dist/lib/cubing/protocol/index.js +20 -0
- package/dist/lib/cubing/protocol/index.js.map +7 -0
- package/dist/lib/cubing/puzzle-geometry/index.d.ts +2 -0
- package/dist/lib/cubing/puzzle-geometry/index.js +5024 -0
- package/dist/lib/cubing/puzzle-geometry/index.js.map +7 -0
- package/dist/lib/cubing/puzzles/index.d.ts +2 -0
- package/dist/lib/cubing/puzzles/index.js +23 -0
- package/dist/lib/cubing/puzzles/index.js.map +7 -0
- package/dist/lib/cubing/scramble/index.d.ts +2 -0
- package/dist/lib/cubing/scramble/index.js +16 -0
- package/dist/lib/cubing/scramble/index.js.map +7 -0
- package/dist/lib/cubing/search/index.d.ts +7 -0
- package/dist/lib/cubing/search/index.js +37 -0
- package/dist/lib/cubing/search/index.js.map +7 -0
- package/dist/lib/cubing/stream/index.d.ts +2 -0
- package/dist/lib/cubing/stream/index.js +111 -0
- package/dist/lib/cubing/stream/index.js.map +7 -0
- package/dist/lib/cubing/twisty/index.d.ts +2 -0
- package/dist/lib/cubing/twisty/index.js +6236 -0
- package/dist/lib/cubing/twisty/index.js.map +7 -0
- package/experimental-json-schema/kpuzzle/KPatternData.schema.json +34 -0
- package/experimental-json-schema/kpuzzle/KPuzzleDefinition.schema.json +97 -0
- package/experimental-json-schema/kpuzzle/KTransformationData.schema.json +27 -0
- package/kpuzzle/index.d.ts +1 -0
- package/notation/index.d.ts +1 -0
- package/package.json +146 -0
- package/protocol/index.d.ts +1 -0
- package/puzzle-geometry/index.d.ts +1 -0
- package/puzzles/index.d.ts +1 -0
- package/scramble/index.d.ts +1 -0
- package/search/index.d.ts +1 -0
- package/stream/index.d.ts +1 -0
- package/twisty/index.d.ts +1 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cubing/puzzles/events.ts", "../../../../src/cubing/puzzles/implementations/2x2x2/index.ts", "../../../../src/cubing/puzzles/implementations/4x4x4/cube4x4x4And5x5x5KeyMapping.ts", "../../../../src/cubing/puzzles/implementations/4x4x4/index.ts", "../../../../src/cubing/puzzles/implementations/5x5x5/index.ts", "../../../../src/cubing/puzzles/implementations/clock/index.ts", "../../../../src/cubing/puzzles/stickerings/fto-stickerings.ts", "../../../../src/cubing/puzzles/implementations/fto/ftoKeyMapping.ts", "../../../../src/cubing/puzzles/implementations/fto/index.ts", "../../../../src/cubing/puzzles/stickerings/megaminx-stickerings.ts", "../../../../src/cubing/puzzles/implementations/megaminx/megaminxKeyMapping.ts", "../../../../src/cubing/puzzles/implementations/megaminx/index.ts", "../../../../src/cubing/puzzles/implementations/pyraminx/index.ts", "../../../../src/cubing/puzzles/implementations/square1/index.ts", "../../../../src/cubing/puzzles/index.ts"],
|
|
4
|
+
"sourcesContent": ["import type { PuzzleID } from \"../twisty\";\n\ninterface EventInfo {\n puzzleID: PuzzleID;\n eventName: string;\n /** Whether/how scrambles are implemented in `randomScrambleForEvent(\u2026)` in this version of `cubing.js` */\n scramblesImplemented: null | \"random-state\" | \"random-moves\";\n}\n\nexport const wcaEvents: Record<string, EventInfo> = {\n \"333\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Cube\",\n scramblesImplemented: \"random-state\",\n },\n \"222\": {\n puzzleID: \"2x2x2\",\n eventName: \"2x2x2 Cube\",\n scramblesImplemented: \"random-state\",\n },\n \"444\": {\n puzzleID: \"4x4x4\",\n eventName: \"4x4x4 Cube\",\n scramblesImplemented: \"random-state\",\n },\n \"555\": {\n puzzleID: \"5x5x5\",\n eventName: \"5x5x5 Cube\",\n scramblesImplemented: \"random-moves\",\n },\n \"666\": {\n puzzleID: \"6x6x6\",\n eventName: \"6x6x6 Cube\",\n scramblesImplemented: \"random-moves\",\n },\n \"777\": {\n puzzleID: \"7x7x7\",\n eventName: \"7x7x7 Cube\",\n scramblesImplemented: \"random-moves\",\n },\n \"333bf\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Blindfolded\",\n scramblesImplemented: \"random-state\",\n },\n \"333fm\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Fewest Moves\",\n scramblesImplemented: \"random-state\",\n },\n \"333oh\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 One-Handed\",\n scramblesImplemented: \"random-state\",\n },\n clock: {\n puzzleID: \"clock\",\n eventName: \"Clock\",\n scramblesImplemented: \"random-state\",\n },\n minx: {\n puzzleID: \"megaminx\",\n eventName: \"Megaminx\",\n scramblesImplemented: \"random-moves\",\n },\n pyram: {\n puzzleID: \"pyraminx\",\n eventName: \"Pyraminx\",\n scramblesImplemented: \"random-state\",\n },\n skewb: {\n puzzleID: \"skewb\",\n eventName: \"Skewb\",\n scramblesImplemented: \"random-state\",\n },\n sq1: {\n puzzleID: \"square1\",\n eventName: \"Square-1\",\n scramblesImplemented: \"random-state\",\n },\n \"444bf\": {\n puzzleID: \"4x4x4\",\n eventName: \"4x4x4 Blindfolded\",\n scramblesImplemented: \"random-state\",\n },\n \"555bf\": {\n puzzleID: \"5x5x5\",\n eventName: \"5x5x5 Blindfolded\",\n scramblesImplemented: \"random-moves\",\n },\n \"333mbf\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Multi-Blind\",\n scramblesImplemented: \"random-state\",\n },\n};\n\n/** @category Event Info */\nexport function wcaEventInfo(event: string): EventInfo | null {\n return wcaEvents[event] ?? null;\n}\n\nexport const twizzleEvents: Record<string, EventInfo> = {\n ...wcaEvents,\n fto: {\n puzzleID: \"fto\",\n eventName: \"Face-Turning Octahedron\",\n scramblesImplemented: \"random-state\",\n },\n};\n\n/** @category Event Info */\nexport function eventInfo(event: string): EventInfo | null {\n return twizzleEvents[event] ?? null;\n}\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport { experimentalIs2x2x2Solved } from \"../../../puzzles/cubing-private\";\nimport type { ExperimentalStickering } from \"../../../twisty\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"../../stickerings/cube-like-stickerings\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport { cubeMirrorTransforms } from \"../3x3x3\";\n\n/** @category Specific Puzzles */\nexport const cube2x2x2: PuzzleLoader = {\n id: \"2x2x2\",\n fullName: \"2\u00D72\u00D72 Cube\",\n kpuzzle: getCached(async () => {\n const kpuzzle = new KPuzzle(\n (await import(\"../dynamic/2x2x2/puzzles-dynamic-2x2x2\")).cube2x2x2JSON,\n );\n kpuzzle.definition.experimentalIsPatternSolved = experimentalIs2x2x2Solved;\n return kpuzzle;\n }),\n svg: async () =>\n (await import(\"../dynamic/2x2x2/puzzles-dynamic-2x2x2\")).cube2x2x2SVG,\n llSVG: getCached(\n async () =>\n (await import(\"../dynamic/2x2x2/puzzles-dynamic-2x2x2\")).cube2x2x2LLSVG,\n ),\n pg: getCached(async () => {\n return asyncGetPuzzleGeometry(\"2x2x2\");\n }),\n stickeringMask: (\n stickering: ExperimentalStickering,\n ): Promise<StickeringMask> => cubeLikeStickeringMask(cube2x2x2, stickering),\n stickerings: () =>\n cubeLikeStickeringList(\"2x2x2\", { use3x3x3Fallbacks: true }),\n algTransformData: cubeMirrorTransforms,\n};\n", "import { type AlgLeaf, Move } from \"../../../alg\";\nimport { cube3x3x3KeyMapping } from \"../3x3x3/cube3x3x3KeyMapping\";\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code\n\n// TODO: place this definition in a more shared location.\nexport const cube4x4x4And5x5x5KeyMapping: { [key: number | string]: AlgLeaf } =\n {\n ...cube3x3x3KeyMapping,\n KeyZ: new Move(\"m'\"),\n KeyB: new Move(\"m\"),\n Period: new Move(\"m'\"),\n };\n", "import { CubePGPuzzleLoader, PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport { bigCubePuzzleOrientation } from \"../../cubing-private\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport { cube4x4x4And5x5x5KeyMapping } from \"./cube4x4x4And5x5x5KeyMapping\";\n\nconst cube4x4x4: PuzzleLoader = new CubePGPuzzleLoader({\n id: \"4x4x4\",\n fullName: \"4\u00D74\u00D74 Cube\",\n inventedBy: [\"Peter Sebest\u00E9ny\"],\n inventionYear: 1981,\n});\n\ncube4x4x4.llSVG = getCached(async () => {\n return (await import(\"../dynamic/4x4x4/puzzles-dynamic-4x4x4\"))\n .cube4x4x4LLSVG;\n});\ncube4x4x4.keyMapping = async () => cube4x4x4And5x5x5KeyMapping; // TODO: async loading\n\ncube4x4x4.kpuzzle = getCached(async () => {\n const kpuzzle = await PGPuzzleLoader.prototype.kpuzzle.call(cube4x4x4);\n // TODO: pass up an option to do this instead.\n kpuzzle.definition.defaultPattern[\"CENTERS\"].pieces = [\n // U\n 0, 0, 0, 0,\n // L\n 4, 4, 4, 4,\n // F\n 8, 8, 8, 8,\n // R\n 12, 12, 12, 12,\n // B\n 16, 16, 16, 16,\n // D\n 20, 20, 20, 20,\n ];\n const { experimentalIsBigCubeSolved } = await bigCubePuzzleOrientation();\n kpuzzle.definition.experimentalIsPatternSolved = experimentalIsBigCubeSolved;\n return kpuzzle;\n});\n\nexport { cube4x4x4 };\n", "import { CubePGPuzzleLoader, PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport { bigCubePuzzleOrientation } from \"../../cubing-private\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport { cube4x4x4And5x5x5KeyMapping } from \"../4x4x4/cube4x4x4And5x5x5KeyMapping\";\n\nconst cube5x5x5: PuzzleLoader = new CubePGPuzzleLoader({\n id: \"5x5x5\",\n fullName: \"5\u00D75\u00D75 Cube\",\n inventedBy: [\"Udo Krell\"],\n inventionYear: 1981,\n});\n\ncube5x5x5.llSVG = getCached(async () => {\n return (await import(\"../dynamic/5x5x5/puzzles-dynamic-5x5x5\"))\n .cube5x5x5LLSVG;\n});\n\ncube5x5x5.keyMapping = async () => cube4x4x4And5x5x5KeyMapping; // TODO: async loading\n\ncube5x5x5.kpuzzle = getCached(async () => {\n const kpuzzle = await PGPuzzleLoader.prototype.kpuzzle.call(cube5x5x5);\n\n const speffzDistinguishableCenters = [\n // U\n 0, 0, 0, 0,\n // L\n 4, 4, 4, 4,\n // F\n 8, 8, 8, 8,\n // R\n 12, 12, 12, 12,\n // B\n 16, 16, 16, 16,\n // D\n 20, 20, 20, 20,\n ];\n // TODO: pass up an option to do this instead.\n kpuzzle.definition.defaultPattern[\"CENTERS\"].pieces =\n speffzDistinguishableCenters;\n kpuzzle.definition.defaultPattern[\"CENTERS2\"].pieces =\n speffzDistinguishableCenters;\n kpuzzle.definition.defaultPattern[\"CENTERS3\"].orientationMod = new Array(\n 6,\n ).fill(1);\n const { experimentalIsBigCubeSolved } = await bigCubePuzzleOrientation();\n kpuzzle.definition.experimentalIsPatternSolved = experimentalIsBigCubeSolved;\n return kpuzzle;\n});\n\nexport { cube5x5x5 };\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const clock: PuzzleLoader = {\n id: \"clock\",\n fullName: \"Clock\",\n inventedBy: [\"Christopher C. Wiggs\", \"Christopher J. Taylor\"],\n inventionYear: 1988, // Patent application year: https://www.jaapsch.net/puzzles/patents/us4869506.pdf\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/clock/puzzles-dynamic-clock\")).clockJSON,\n ),\n ),\n svg: getCached(async () => {\n return (await import(\"../dynamic/clock/puzzles-dynamic-clock\")).clockSVG;\n }),\n};\n", "import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n type PieceSet,\n PieceStickering,\n PuzzleStickering,\n StickeringManager,\n type StickeringMask,\n} from \"./mask\";\n\nexport async function ftoStickering(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n const kpuzzle = await puzzleLoader.kpuzzle();\n const puzzleStickering = new PuzzleStickering(kpuzzle);\n const m = new StickeringManager(kpuzzle);\n\n const experimentalFTO_FC = (): PieceSet =>\n m.and([m.move(\"U\"), m.not(m.or(m.moves([\"F\", \"BL\", \"BR\"])))]);\n const experimentalFTO_F2T = (): PieceSet =>\n m.and([m.move(\"U\"), m.not(m.move(\"F\"))]);\n const experimentalFTO_SC = (): PieceSet =>\n m.or([\n experimentalFTO_F2T(),\n m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"BL\", \"BR\"])))]),\n ]);\n const experimentalFTO_L2C = (): PieceSet =>\n m.not(\n m.or([\n m.and([m.move(\"U\"), m.move(\"F\")]),\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n m.and([m.move(\"BL\"), m.move(\"BR\")]),\n ]),\n );\n const experimentalFTO_LBT = (): PieceSet =>\n m.not(\n m.or([\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n m.and([m.move(\"BL\"), m.move(\"BR\")]),\n ]),\n );\n\n switch (stickering) {\n case \"full\":\n break;\n case \"experimental-fto-fc\": {\n puzzleStickering.set(\n m.not(experimentalFTO_FC()),\n PieceStickering.Ignored,\n );\n break;\n }\n case \"experimental-fto-f2t\": {\n puzzleStickering.set(\n m.not(experimentalFTO_F2T()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_FC(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-sc\": {\n puzzleStickering.set(\n m.not(experimentalFTO_SC()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_F2T(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-l2c\": {\n puzzleStickering.set(\n m.not(experimentalFTO_L2C()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_SC(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-lbt\": {\n puzzleStickering.set(\n m.not(experimentalFTO_LBT()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_L2C(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-l3t\": {\n puzzleStickering.set(experimentalFTO_LBT(), PieceStickering.Dim);\n break;\n }\n default:\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n puzzleStickering.set(m.and(m.moves([])), PieceStickering.Dim);\n }\n return puzzleStickering.toStickeringMask();\n}\n\nexport async function ftoStickerings(): Promise<ExperimentalStickering[]> {\n return [\n \"full\",\n \"experimental-fto-fc\",\n \"experimental-fto-f2t\",\n \"experimental-fto-sc\",\n \"experimental-fto-l2c\",\n \"experimental-fto-lbt\",\n \"experimental-fto-l3t\",\n ];\n}\n", "import { type AlgLeaf, Move, Pause } from \"../../../alg\";\n\nexport const ftoKeyMapping: { [key: number | string]: AlgLeaf } = {\n KeyI: new Move(\"R\"),\n KeyK: new Move(\"R'\"),\n KeyW: new Move(\"B\"),\n KeyO: new Move(\"B'\"),\n KeyS: new Move(\"D\"),\n KeyL: new Move(\"D'\"),\n KeyD: new Move(\"L\"),\n KeyE: new Move(\"L'\"),\n KeyJ: new Move(\"U\"),\n KeyF: new Move(\"U'\"),\n KeyH: new Move(\"F\"),\n KeyG: new Move(\"F'\"),\n\n KeyN: new Move(\"Rv'\"),\n KeyC: new Move(\"l\"),\n KeyR: new Move(\"l'\"),\n KeyU: new Move(\"r\"),\n KeyM: new Move(\"r'\"),\n\n KeyX: new Move(\"d\"),\n Comma: new Move(\"d'\"),\n\n KeyT: new Move(\"Lv'\"),\n KeyY: new Move(\"Rv\"),\n KeyV: new Move(\"Lv\"),\n Semicolon: new Move(\"Uv\"),\n KeyA: new Move(\"Uv'\"),\n KeyP: new Move(\"BR'\"),\n KeyQ: new Move(\"BL\"),\n\n KeyZ: new Move(\"BL'\"),\n KeyB: new Move(\"T\"),\n Period: new Move(\"BR\"),\n\n Backquote: new Pause(),\n};\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { AlgTransformData } from \"../../cubing-private\";\nimport {\n ftoStickering,\n ftoStickerings,\n} from \"../../stickerings/fto-stickerings\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport { ftoKeyMapping } from \"./ftoKeyMapping\";\n\nclass FTOPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n pgID: \"FTO\",\n id: \"fto\",\n fullName: \"Face-Turning Octahedron\",\n inventedBy: [\"Karl Rohrbach\", \"David Pitcher\"], // http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1663\n inventionYear: 1983, // http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1663\n });\n }\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return ftoStickering(this, stickering);\n }\n stickerings = ftoStickerings;\n override svg = getCached(async () => {\n return (await import(\"../dynamic/fto/puzzles-dynamic-fto\")).ftoSVG;\n });\n keyMapping = async () => ftoKeyMapping;\n algTransformData: AlgTransformData = {\n \"\u2194 Mirror (x)\": {\n replaceMovesByFamily: {\n L: \"R\",\n R: \"L\",\n l: \"r\",\n r: \"l\",\n Lw: \"Rw\",\n Rw: \"Lw\",\n Lv: \"Rv\",\n Rv: \"Lv\",\n BL: \"BR\",\n BR: \"BL\",\n bl: \"br\",\n br: \"bl\",\n BLw: \"BRw\",\n BRw: \"BLw\",\n BLv: \"BRv\",\n BRv: \"BLv\",\n },\n invertExceptByFamily: new Set([\"x\"]),\n },\n };\n}\n\nexport const fto = new FTOPuzzleLoader();\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\nimport type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"./cube-like-stickerings\";\nimport type { StickeringMask } from \"./mask\";\n\n// TODO: cache calculations?\nexport async function megaminxStickeringMask(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n // TODO: optimize lookup instead of looking through a list\n if ((await megaminxStickerings()).includes(stickering)) {\n return cubeLikeStickeringMask(puzzleLoader, stickering);\n }\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n return cubeLikeStickeringMask(puzzleLoader, \"full\");\n}\n\nconst megaminxStickeringListPromise: Promise<string[]> = new LazyPromise(() =>\n cubeLikeStickeringList(\"megaminx\"),\n);\nexport function megaminxStickerings(): Promise<string[]> {\n return megaminxStickeringListPromise;\n}\n", "import { type AlgLeaf, Move, Pause } from \"../../../alg\";\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code\n\nexport const megaminxKeyMapping: { [key: number | string]: AlgLeaf } = {\n KeyI: new Move(\"R\"),\n KeyK: new Move(\"R'\"),\n KeyW: new Move(\"B\"),\n KeyO: new Move(\"B'\"),\n KeyS: new Move(\"FR\"),\n KeyL: new Move(\"FR'\"),\n KeyD: new Move(\"L\"),\n KeyE: new Move(\"L'\"),\n KeyJ: new Move(\"U\"),\n KeyF: new Move(\"U'\"),\n KeyH: new Move(\"F\"),\n KeyG: new Move(\"F'\"),\n\n KeyC: new Move(\"Lw\"),\n KeyR: new Move(\"Lw'\"),\n KeyU: new Move(\"Rw\"),\n KeyM: new Move(\"Rw'\"),\n\n KeyX: new Move(\"d\"),\n Comma: new Move(\"d'\"),\n\n KeyT: new Move(\"Rv\"),\n KeyY: new Move(\"Rv\"),\n KeyV: new Move(\"Rv'\"),\n KeyN: new Move(\"Rv'\"),\n Semicolon: new Move(\"y\"),\n KeyA: new Move(\"y'\"),\n KeyP: new Move(\"z\"),\n KeyQ: new Move(\"z'\"),\n\n KeyZ: new Move(\"2L'\"),\n KeyB: new Move(\"2R\"),\n Period: new Move(\"2R'\"),\n\n Backquote: new Pause(),\n};\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\nimport {\n megaminxStickeringMask,\n megaminxStickerings,\n} from \"../../stickerings/megaminx-stickerings\";\nimport { megaminxKeyMapping } from \"./megaminxKeyMapping\";\n\nclass MegaminxPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n id: \"megaminx\",\n fullName: \"Megaminx\",\n // Too many simultaneous inventors to name.\n inventionYear: 1981, // Earliest date from https://www.jaapsch.net/puzzles/megaminx.htm\n });\n }\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return megaminxStickeringMask(this, stickering);\n }\n stickerings = megaminxStickerings;\n\n llSVG = getCached(async () => {\n return (await import(\"../dynamic/megaminx/puzzles-dynamic-megaminx\"))\n .megaminxLLSVG;\n });\n\n keyMapping = async () => megaminxKeyMapping; // TODO: async loading\n}\n\nexport const megaminx = new MegaminxPuzzleLoader();\n", "import { PGPuzzleLoader } from \"../../async/async-pg3d\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { AlgTransformData } from \"../../cubing-private\";\n\nclass PyraminxPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n id: \"pyraminx\",\n fullName: \"Pyraminx\",\n inventedBy: [\"Uwe Meffert\"],\n });\n }\n override svg = getCached(async () => {\n return (await import(\"../dynamic/pyraminx/puzzles-dynamic-pyraminx\"))\n .pyraminxSVG;\n });\n algTransformData: AlgTransformData = {\n \"\u2194 Mirror (x)\": {\n replaceMovesByFamily: {\n L: \"R\",\n R: \"L\",\n l: \"r\",\n r: \"l\",\n Lw: \"Rw\",\n Rw: \"Lw\",\n Lv: \"Rv\",\n Rv: \"Lv\",\n },\n invertExceptByFamily: new Set([]),\n },\n };\n}\n\nexport const pyraminx = new PyraminxPuzzleLoader();\n", "import { KPuzzle } from \"../../../kpuzzle\";\nimport type { ExperimentalStickering } from \"../../../twisty\";\nimport { getCached } from \"../../async/lazy-cached\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport { cubeLikeStickeringList } from \"../../stickerings/cube-like-stickerings\";\nimport type { StickeringMask } from \"../../stickerings/mask\";\n\nexport const square1: PuzzleLoader = {\n id: \"square1\",\n fullName: \"Square-1\",\n inventedBy: [\"Karel Hr\u0161el\", \"Vojtech Kopsk\u00FD\"],\n inventionYear: 1990, // Czech patent application year: http://spisy.upv.cz/Patents/FullDocuments/277/277266.pdf\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/square1/puzzles-dynamic-square1\"))\n .sq1HyperOrbitJSON,\n ),\n ),\n svg: getCached(async () => {\n return (await import(\"../dynamic/square1/puzzles-dynamic-square1\"))\n .sq1HyperOrbitSVG;\n }),\n llSVG: getCached(async () => {\n return (await import(\"../dynamic/square1/puzzles-dynamic-square1\"))\n .sq1HyperOrbitLLSVG;\n }),\n stickeringMask: async (\n stickering: ExperimentalStickering,\n ): Promise<StickeringMask> => {\n return (\n await import(\"../../stickerings/square1-stickerings\")\n ).square1StickeringMask(square1, stickering);\n },\n stickerings: () => cubeLikeStickeringList(\"square1\"),\n};\n", "export { eventInfo, twizzleEvents, wcaEventInfo, wcaEvents } from \"./events\";\nexport type { PuzzleLoader };\nexport { cube2x2x2, cube3x3x3 };\n\nimport { CubePGPuzzleLoader, PGPuzzleLoader } from \"./async/async-pg3d\";\nimport { cube2x2x2 } from \"./implementations/2x2x2\";\nimport { cube3x3x3 } from \"./implementations/3x3x3\";\nimport { cube4x4x4 } from \"./implementations/4x4x4\";\nimport { cube5x5x5 } from \"./implementations/5x5x5\";\nimport { clock } from \"./implementations/clock\";\nimport { fto } from \"./implementations/fto\";\nimport { megaminx } from \"./implementations/megaminx\";\nimport { pyraminx } from \"./implementations/pyraminx\";\nimport { square1 } from \"./implementations/square1\";\nimport type { PuzzleLoader } from \"./PuzzleLoader\";\n\n/** @category All Puzzles */\nexport const puzzles: Record<string, PuzzleLoader> = {\n /******** Start of WCA Puzzles *******/\n \"3x3x3\": cube3x3x3,\n \"2x2x2\": cube2x2x2,\n \"4x4x4\": cube4x4x4,\n \"5x5x5\": cube5x5x5,\n \"6x6x6\": new CubePGPuzzleLoader({ id: \"6x6x6\", fullName: \"6\u00D76\u00D76 Cube\" }),\n \"7x7x7\": new CubePGPuzzleLoader({ id: \"7x7x7\", fullName: \"7\u00D77\u00D77 Cube\" }),\n // 3x3x3 Blindfolded\n // 3x3x3 Fewest Moves\n // 3x3x3 One-Handed\n clock,\n megaminx: megaminx,\n pyraminx,\n skewb: new PGPuzzleLoader({\n id: \"skewb\",\n fullName: \"Skewb\",\n inventedBy: [\"Tony Durham\"], // https://www.jaapsch.net/puzzles/skewb.htm\n // inventionYear: 1982, // 1982 is actually the year of Hofstadter's column.\n }),\n square1,\n // 4x4x4 Blindfolded\n // 5x5x5 Blindfolded\n /******** End of WCA puzzles ********/\n fto,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import {
|
|
2
|
+
countMoves
|
|
3
|
+
} from "./chunk-56VZAEPF.js";
|
|
4
|
+
import {
|
|
5
|
+
addOrientationSuffix,
|
|
6
|
+
expose,
|
|
7
|
+
initialize333,
|
|
8
|
+
mustBeInsideWorker,
|
|
9
|
+
random333OrientedScramble,
|
|
10
|
+
random333Scramble,
|
|
11
|
+
setIsInsideWorker,
|
|
12
|
+
solve333
|
|
13
|
+
} from "./chunk-IAGCVPL3.js";
|
|
14
|
+
import {
|
|
15
|
+
cube2x2x2,
|
|
16
|
+
puzzles,
|
|
17
|
+
wcaEvents
|
|
18
|
+
} from "./chunk-YSI6PF35.js";
|
|
19
|
+
import {
|
|
20
|
+
LazyPromise
|
|
21
|
+
} from "./chunk-2VJB4TMH.js";
|
|
22
|
+
import {
|
|
23
|
+
KPattern,
|
|
24
|
+
KPuzzle
|
|
25
|
+
} from "./chunk-52ZXJEUO.js";
|
|
26
|
+
import {
|
|
27
|
+
Alg,
|
|
28
|
+
AlgBuilder,
|
|
29
|
+
Move
|
|
30
|
+
} from "./chunk-XPDJUSZ7.js";
|
|
31
|
+
|
|
32
|
+
// src/cubing/search/inside/solve/puzzles/2x2x2.ts
|
|
33
|
+
import { randomPermuteInPlace, randomUIntBelow } from "random-uint-below";
|
|
34
|
+
|
|
35
|
+
// src/cubing/search/inside/solve/tremble.ts
|
|
36
|
+
import { randomChoice } from "random-uint-below";
|
|
37
|
+
var DEFAULT_STAGE1_DEPTH_LIMIT = 2;
|
|
38
|
+
var DOUBLECHECK_PLACED_PIECES = true;
|
|
39
|
+
var DEBUG = false;
|
|
40
|
+
function calculateMoves(kpuzzle, moveNames) {
|
|
41
|
+
const searchMoves = [];
|
|
42
|
+
for (const moveName of moveNames) {
|
|
43
|
+
const rootMove = new Move(moveName);
|
|
44
|
+
if (rootMove.amount !== 1) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
"SGS cannot handle def moves with an amount other than 1 yet."
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
let transformation = kpuzzle.identityTransformation();
|
|
50
|
+
for (let i = 1; ; i++) {
|
|
51
|
+
transformation = transformation.applyMove(rootMove);
|
|
52
|
+
if (transformation.isIdentityTransformation()) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
searchMoves.push({
|
|
56
|
+
move: rootMove.modified({ amount: i }),
|
|
57
|
+
transformation
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return searchMoves;
|
|
62
|
+
}
|
|
63
|
+
var TrembleSolver = class {
|
|
64
|
+
constructor(kpuzzle, sgs, trembleMoveNames) {
|
|
65
|
+
this.kpuzzle = kpuzzle;
|
|
66
|
+
this.sgs = sgs;
|
|
67
|
+
this.searchMoves = calculateMoves(
|
|
68
|
+
this.kpuzzle,
|
|
69
|
+
trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
kpuzzle;
|
|
73
|
+
sgs;
|
|
74
|
+
searchMoves;
|
|
75
|
+
// public badRandomMoves(): KSolvePuzzleState {
|
|
76
|
+
// return badRandomMoves(this.moves, this.ksp);
|
|
77
|
+
// }
|
|
78
|
+
async solve(pattern, stage1DepthLimit = DEFAULT_STAGE1_DEPTH_LIMIT, quantumMoveOrder) {
|
|
79
|
+
const transformation = pattern.experimentalToTransformation();
|
|
80
|
+
if (!transformation) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
"distinguishable pieces are not supported in tremble solver yt"
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
let bestAlg = null;
|
|
86
|
+
let bestLen = 1e6;
|
|
87
|
+
const recur = (recursiveTransformation, togo, sofar) => {
|
|
88
|
+
if (togo === 0) {
|
|
89
|
+
const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);
|
|
90
|
+
if (!sgsAlg) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const newAlg = sofar.concat(sgsAlg).experimentalSimplify({
|
|
94
|
+
cancel: {
|
|
95
|
+
directional: "any-direction",
|
|
96
|
+
puzzleSpecificModWrap: "canonical-centered"
|
|
97
|
+
},
|
|
98
|
+
puzzleSpecificSimplifyOptions: { quantumMoveOrder }
|
|
99
|
+
});
|
|
100
|
+
const len = countMoves(newAlg);
|
|
101
|
+
if (bestAlg === null || len < bestLen) {
|
|
102
|
+
if (DEBUG) {
|
|
103
|
+
console.log(`New best (${len} moves): ${newAlg.toString()}`);
|
|
104
|
+
console.log(`Tremble moves are: ${sofar.toString()}`);
|
|
105
|
+
}
|
|
106
|
+
bestAlg = newAlg;
|
|
107
|
+
bestLen = len;
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
for (const searchMove of this.searchMoves) {
|
|
112
|
+
recur(
|
|
113
|
+
recursiveTransformation.applyTransformation(
|
|
114
|
+
searchMove.transformation
|
|
115
|
+
),
|
|
116
|
+
togo - 1,
|
|
117
|
+
sofar.concat([searchMove.move])
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
for (let d = 0; d <= stage1DepthLimit; d++) {
|
|
122
|
+
recur(transformation, d, new Alg());
|
|
123
|
+
}
|
|
124
|
+
if (bestAlg === null) {
|
|
125
|
+
throw new Error("SGS search failed.");
|
|
126
|
+
}
|
|
127
|
+
return bestAlg;
|
|
128
|
+
}
|
|
129
|
+
sgsPhaseSolve(initialTransformation, bestLenSofar) {
|
|
130
|
+
const algBuilder = new AlgBuilder();
|
|
131
|
+
let transformation = initialTransformation;
|
|
132
|
+
for (const step of this.sgs.ordering) {
|
|
133
|
+
const cubieSeq = step.pieceOrdering;
|
|
134
|
+
let key = "";
|
|
135
|
+
const inverseTransformation = transformation.invert();
|
|
136
|
+
for (let i = 0; i < cubieSeq.length; i++) {
|
|
137
|
+
const loc = cubieSeq[i];
|
|
138
|
+
const orbitName = loc.orbitName;
|
|
139
|
+
const idx = loc.permutationIdx;
|
|
140
|
+
key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;
|
|
141
|
+
}
|
|
142
|
+
const info = step.lookup[key];
|
|
143
|
+
if (!info) {
|
|
144
|
+
throw new Error("Missing algorithm in sgs or esgs?");
|
|
145
|
+
}
|
|
146
|
+
algBuilder.experimentalPushAlg(info.alg);
|
|
147
|
+
if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
transformation = transformation.applyTransformation(info.transformation);
|
|
151
|
+
if (DOUBLECHECK_PLACED_PIECES) {
|
|
152
|
+
for (let i = 0; i < cubieSeq.length; i++) {
|
|
153
|
+
const location = cubieSeq[i];
|
|
154
|
+
const orbitName = location.orbitName;
|
|
155
|
+
const idx = location.permutationIdx;
|
|
156
|
+
if (transformation.transformationData[orbitName].permutation[idx] !== idx || transformation.transformationData[orbitName].orientationDelta[idx] !== 0) {
|
|
157
|
+
throw new Error("bad SGS :-(");
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return algBuilder.toAlg();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// src/cubing/search/inside/solve/twips.ts
|
|
167
|
+
var twipsPromise = new LazyPromise(
|
|
168
|
+
async () => import("./twips-2RNTWYNZ.js")
|
|
169
|
+
);
|
|
170
|
+
async function wasmTwips(def, pattern, options) {
|
|
171
|
+
const { wasmTwips: wasmTwips2 } = await twipsPromise;
|
|
172
|
+
return wasmTwips2(def, pattern, options);
|
|
173
|
+
}
|
|
174
|
+
async function wasmRandomScrambleForEvent(eventID) {
|
|
175
|
+
const { wasmRandomScrambleForEvent: wasmRandomScrambleForEvent2 } = await twipsPromise;
|
|
176
|
+
return wasmRandomScrambleForEvent2(eventID);
|
|
177
|
+
}
|
|
178
|
+
async function wasmDeriveScrambleForEvent(derivationSeedHex, derivationSaltHierarchy, eventID) {
|
|
179
|
+
const { wasmDeriveScrambleForEvent: wasmDeriveScrambleForEvent2 } = await twipsPromise;
|
|
180
|
+
return wasmDeriveScrambleForEvent2(
|
|
181
|
+
derivationSeedHex,
|
|
182
|
+
derivationSaltHierarchy,
|
|
183
|
+
eventID
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-2x2x2/index.ts
|
|
188
|
+
var searchDynamicSGS2x2x2 = new LazyPromise(
|
|
189
|
+
() => import("./search-dynamic-sgs-2x2x2-XFKQ4VJS.js")
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
// src/cubing/search/inside/solve/puzzles/2x2x2.ts
|
|
193
|
+
var cachedTrembleSolver = null;
|
|
194
|
+
async function getCachedTrembleSolver() {
|
|
195
|
+
return cachedTrembleSolver || (cachedTrembleSolver = (async () => {
|
|
196
|
+
const sgsCachedData = await (await searchDynamicSGS2x2x2).cachedData222();
|
|
197
|
+
return new TrembleSolver(
|
|
198
|
+
await puzzles["2x2x2"].kpuzzle(),
|
|
199
|
+
sgsCachedData,
|
|
200
|
+
"URFLBD".split("")
|
|
201
|
+
);
|
|
202
|
+
})());
|
|
203
|
+
}
|
|
204
|
+
async function preInitialize222() {
|
|
205
|
+
await getCachedTrembleSolver();
|
|
206
|
+
}
|
|
207
|
+
async function solve222(pattern) {
|
|
208
|
+
mustBeInsideWorker();
|
|
209
|
+
return wasmTwips((await cube2x2x2.kpuzzle()).definition, pattern, {
|
|
210
|
+
generatorMoves: "UFLR".split("")
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts
|
|
215
|
+
var dynamic4x4x4Solver = new LazyPromise(
|
|
216
|
+
() => import("./search-dynamic-solve-4x4x4-NONXQHOJ.js")
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
// src/cubing/search/inside/solve/puzzles/4x4x4.ts
|
|
220
|
+
var randomSuffixes = [
|
|
221
|
+
[null, "x", "x2", "x'", "z", "z'"],
|
|
222
|
+
[null, "y", "y2", "y'"]
|
|
223
|
+
];
|
|
224
|
+
async function initialize444() {
|
|
225
|
+
return (await dynamic4x4x4Solver).initialize();
|
|
226
|
+
}
|
|
227
|
+
async function random444Scramble() {
|
|
228
|
+
mustBeInsideWorker();
|
|
229
|
+
return (await dynamic4x4x4Solver).random444Scramble();
|
|
230
|
+
}
|
|
231
|
+
async function random444OrientedScramble() {
|
|
232
|
+
return addOrientationSuffix(await random444Scramble(), randomSuffixes);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts
|
|
236
|
+
var dynamicFTO = new LazyPromise(
|
|
237
|
+
() => import("./search-dynamic-solve-fto-3GQ2HLSW.js")
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
// src/cubing/search/inside/solve/puzzles/fto.ts
|
|
241
|
+
var dynamic = new LazyPromise(
|
|
242
|
+
() => import("./search-dynamic-sgs-unofficial-YK6HA7BK.js")
|
|
243
|
+
);
|
|
244
|
+
async function randomFTOScramble() {
|
|
245
|
+
mustBeInsideWorker();
|
|
246
|
+
return new Alg(await (await dynamicFTO).getRandomFTOScramble());
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-megaminx/index.ts
|
|
250
|
+
var searchDynamicSGSmegaminx = new LazyPromise(
|
|
251
|
+
() => import("./search-dynamic-sgs-megaminx-ZDOOLEDW.js")
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
// src/cubing/search/inside/solve/puzzles/megaminx.ts
|
|
255
|
+
var TREMBLE_DEPTH = 2;
|
|
256
|
+
var cachedTrembleSolver2 = null;
|
|
257
|
+
async function getCachedTrembleSolver2() {
|
|
258
|
+
return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
|
|
259
|
+
const json = await (await searchDynamicSGSmegaminx).cachedSGSDataMegaminx();
|
|
260
|
+
return new TrembleSolver(
|
|
261
|
+
await (await searchDynamicSGSmegaminx).cachedMegaminxKPuzzleWithoutMO(),
|
|
262
|
+
json,
|
|
263
|
+
["U", "R", "F", "L", "BR", "BL", "FR", "FL", "DR", "DL", "B", "D"]
|
|
264
|
+
);
|
|
265
|
+
})());
|
|
266
|
+
}
|
|
267
|
+
async function solveMegaminx(pattern) {
|
|
268
|
+
mustBeInsideWorker();
|
|
269
|
+
const trembleSolver = await getCachedTrembleSolver2();
|
|
270
|
+
const patternDataWithoutMO = structuredClone(
|
|
271
|
+
pattern.patternData
|
|
272
|
+
);
|
|
273
|
+
patternDataWithoutMO["CENTERS"].orientation = new Array(12).fill(0);
|
|
274
|
+
const patternWithoutMO = new KPattern(
|
|
275
|
+
await (await searchDynamicSGSmegaminx).cachedMegaminxKPuzzleWithoutMO(),
|
|
276
|
+
patternDataWithoutMO
|
|
277
|
+
);
|
|
278
|
+
const alg = await trembleSolver.solve(
|
|
279
|
+
patternWithoutMO,
|
|
280
|
+
TREMBLE_DEPTH,
|
|
281
|
+
() => 5
|
|
282
|
+
// TODO: Attach quantum move order lookup to puzzle.
|
|
283
|
+
);
|
|
284
|
+
return alg;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-pyraminx/index.ts
|
|
288
|
+
var searchDynamicSGSpyraminx = new LazyPromise(
|
|
289
|
+
() => import("./search-dynamic-sgs-pyraminx-W6UJWBYY.js")
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
// src/cubing/search/inside/solve/puzzles/pyraminx.ts
|
|
293
|
+
var TREMBLE_DEPTH2 = 3;
|
|
294
|
+
var cachedTrembleSolver3 = null;
|
|
295
|
+
async function getCachedTrembleSolver3() {
|
|
296
|
+
return cachedTrembleSolver3 || (cachedTrembleSolver3 = (async () => {
|
|
297
|
+
const json = await (await searchDynamicSGSpyraminx).sgsDataPyraminx();
|
|
298
|
+
return new TrembleSolver(
|
|
299
|
+
await puzzles["pyraminx"].kpuzzle(),
|
|
300
|
+
json,
|
|
301
|
+
"RLUB".split("")
|
|
302
|
+
);
|
|
303
|
+
})());
|
|
304
|
+
}
|
|
305
|
+
async function solvePyraminx(pattern) {
|
|
306
|
+
mustBeInsideWorker();
|
|
307
|
+
const trembleSolver = await getCachedTrembleSolver3();
|
|
308
|
+
const alg = await trembleSolver.solve(pattern, TREMBLE_DEPTH2, () => 3);
|
|
309
|
+
return alg;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// src/cubing/search/inside/solve/puzzles/dynamic/sgs-skewb/index.ts
|
|
313
|
+
var searchDynamicSGSskewb = new LazyPromise(
|
|
314
|
+
() => import("./search-dynamic-sgs-skewb-FXGKV4KD.js")
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
// src/cubing/search/inside/solve/puzzles/skewb.ts
|
|
318
|
+
var TREMBLE_DEPTH3 = 3;
|
|
319
|
+
var cachedTrembleSolver4 = null;
|
|
320
|
+
async function getCachedTrembleSolver4() {
|
|
321
|
+
return cachedTrembleSolver4 || (cachedTrembleSolver4 = (async () => {
|
|
322
|
+
const json = await (await searchDynamicSGSskewb).sgsDataSkewb();
|
|
323
|
+
return new TrembleSolver(
|
|
324
|
+
await (await searchDynamicSGSskewb).skewbKPuzzleWithoutMOCached(),
|
|
325
|
+
json,
|
|
326
|
+
"RLUB".split("")
|
|
327
|
+
);
|
|
328
|
+
})());
|
|
329
|
+
}
|
|
330
|
+
async function resetCenterOrientation(pattern) {
|
|
331
|
+
return new KPattern(
|
|
332
|
+
await (await searchDynamicSGSskewb).skewbKPuzzleWithoutMOCached(),
|
|
333
|
+
{
|
|
334
|
+
CORNERS: pattern.patternData["CORNERS"],
|
|
335
|
+
CENTERS: {
|
|
336
|
+
pieces: pattern.patternData["CENTERS"].pieces,
|
|
337
|
+
orientation: new Array(6).fill(0)
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
async function solveSkewb(pattern) {
|
|
343
|
+
mustBeInsideWorker();
|
|
344
|
+
const trembleSolver = await getCachedTrembleSolver4();
|
|
345
|
+
const alg = await trembleSolver.solve(
|
|
346
|
+
await resetCenterOrientation(pattern),
|
|
347
|
+
TREMBLE_DEPTH3,
|
|
348
|
+
(quantumMove) => quantumMove.family === "y" ? 4 : 3
|
|
349
|
+
// TODO: Attach quantum move order lookup to puzzle.
|
|
350
|
+
);
|
|
351
|
+
return alg;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// src/cubing/search/inside/api.ts
|
|
355
|
+
var IDLE_PREFETCH_TIMEOUT_MS = 1e3;
|
|
356
|
+
setIsInsideWorker(true);
|
|
357
|
+
var DEBUG_MEASURE_PERF = true;
|
|
358
|
+
function setDebugMeasurePerf(newDebugMeasurePerf) {
|
|
359
|
+
DEBUG_MEASURE_PERF = newDebugMeasurePerf;
|
|
360
|
+
}
|
|
361
|
+
var DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = false;
|
|
362
|
+
function setDebugForceTwipsForScrambles(forceTwipsForScrambles) {
|
|
363
|
+
DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = forceTwipsForScrambles;
|
|
364
|
+
}
|
|
365
|
+
function now() {
|
|
366
|
+
return (typeof performance === "undefined" ? Date : performance).now();
|
|
367
|
+
}
|
|
368
|
+
async function measurePerf(name, f, options) {
|
|
369
|
+
if (!DEBUG_MEASURE_PERF) {
|
|
370
|
+
return f();
|
|
371
|
+
}
|
|
372
|
+
const start = now();
|
|
373
|
+
const result = f();
|
|
374
|
+
if (result?.then) {
|
|
375
|
+
await result;
|
|
376
|
+
}
|
|
377
|
+
const end = now();
|
|
378
|
+
console.warn(
|
|
379
|
+
`${name}${options?.isPrefetch ? " (prefetched)" : ""}: ${Math.round(
|
|
380
|
+
end - start
|
|
381
|
+
)}ms`
|
|
382
|
+
);
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
var prefetchPromises = /* @__PURE__ */ new Map();
|
|
386
|
+
var queuedPrefetchTimeoutID = null;
|
|
387
|
+
var scrambleActivityLock;
|
|
388
|
+
async function randomScrambleForEvent(eventID, options) {
|
|
389
|
+
return scrambleActivityLock = (async () => {
|
|
390
|
+
await scrambleActivityLock;
|
|
391
|
+
function wasm() {
|
|
392
|
+
return measurePerf(
|
|
393
|
+
`wasmRandomScrambleForEvent(${JSON.stringify(eventID)})`,
|
|
394
|
+
() => wasmRandomScrambleForEvent(eventID),
|
|
395
|
+
{
|
|
396
|
+
isPrefetch: options?.isPrefetch
|
|
397
|
+
}
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
function twipsOverride() {
|
|
401
|
+
if (DEBUG_FORCE_TWIPS_FOR_SCRAMBLES && eventID in wcaEvents) {
|
|
402
|
+
console.log(`Using \`twips\` override for \`${eventID}\` scramble.`);
|
|
403
|
+
return wasm();
|
|
404
|
+
}
|
|
405
|
+
return void 0;
|
|
406
|
+
}
|
|
407
|
+
switch (eventID) {
|
|
408
|
+
// case "333":
|
|
409
|
+
case "222":
|
|
410
|
+
return (await wasm()).experimentalSimplify({
|
|
411
|
+
puzzleSpecificSimplifyOptions: {
|
|
412
|
+
quantumMoveOrder: () => 4
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
// case "444":
|
|
416
|
+
case "555":
|
|
417
|
+
case "666":
|
|
418
|
+
case "777":
|
|
419
|
+
// case "333bf":
|
|
420
|
+
case "333fm":
|
|
421
|
+
// case "333oh":
|
|
422
|
+
case "clock":
|
|
423
|
+
case "minx":
|
|
424
|
+
case "pyram":
|
|
425
|
+
case "skewb":
|
|
426
|
+
case "sq1":
|
|
427
|
+
// case "444bf":
|
|
428
|
+
// case "333mbf":
|
|
429
|
+
// case "fto":
|
|
430
|
+
case "555bf":
|
|
431
|
+
return wasm();
|
|
432
|
+
case "333":
|
|
433
|
+
case "333oh":
|
|
434
|
+
case "333ft":
|
|
435
|
+
return twipsOverride() ?? measurePerf("random333Scramble", random333Scramble, {
|
|
436
|
+
isPrefetch: options?.isPrefetch
|
|
437
|
+
});
|
|
438
|
+
case "333bf":
|
|
439
|
+
case "333mbf":
|
|
440
|
+
return twipsOverride() ?? measurePerf("random333OrientedScramble", random333OrientedScramble);
|
|
441
|
+
case "444":
|
|
442
|
+
return twipsOverride() ?? measurePerf("random444Scramble", random444Scramble, {
|
|
443
|
+
isPrefetch: options?.isPrefetch
|
|
444
|
+
});
|
|
445
|
+
case "444bf":
|
|
446
|
+
return twipsOverride() ?? measurePerf("random444OrientedScramble", random444OrientedScramble);
|
|
447
|
+
case "fto":
|
|
448
|
+
return measurePerf("randomFTOScramble", randomFTOScramble, {
|
|
449
|
+
isPrefetch: options?.isPrefetch
|
|
450
|
+
});
|
|
451
|
+
default:
|
|
452
|
+
throw new Error(`unsupported event: ${eventID}`);
|
|
453
|
+
}
|
|
454
|
+
})();
|
|
455
|
+
}
|
|
456
|
+
var currentPrefetchLevel = "auto" /* Auto */;
|
|
457
|
+
var insideAPI = {
|
|
458
|
+
initialize: async (eventID) => {
|
|
459
|
+
switch (eventID) {
|
|
460
|
+
case "222":
|
|
461
|
+
return measurePerf("preInitialize222", preInitialize222);
|
|
462
|
+
case "333":
|
|
463
|
+
case "333oh":
|
|
464
|
+
case "333ft":
|
|
465
|
+
return measurePerf("initialize333", initialize333);
|
|
466
|
+
case "444":
|
|
467
|
+
return measurePerf("initialize444", initialize444);
|
|
468
|
+
default:
|
|
469
|
+
throw new Error(`unsupported event: ${eventID}`);
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
setScramblePrefetchLevel(prefetchLevel) {
|
|
473
|
+
currentPrefetchLevel = prefetchLevel;
|
|
474
|
+
},
|
|
475
|
+
randomScrambleForEvent: async (eventID) => {
|
|
476
|
+
let promise = prefetchPromises.get(eventID);
|
|
477
|
+
if (promise) {
|
|
478
|
+
prefetchPromises.delete(eventID);
|
|
479
|
+
} else {
|
|
480
|
+
promise = randomScrambleForEvent(eventID);
|
|
481
|
+
}
|
|
482
|
+
if (currentPrefetchLevel !== "none" /* None */) {
|
|
483
|
+
promise.then(() => {
|
|
484
|
+
if (queuedPrefetchTimeoutID) {
|
|
485
|
+
clearTimeout(queuedPrefetchTimeoutID);
|
|
486
|
+
}
|
|
487
|
+
queuedPrefetchTimeoutID = setTimeout(
|
|
488
|
+
() => {
|
|
489
|
+
prefetchPromises.set(
|
|
490
|
+
eventID,
|
|
491
|
+
randomScrambleForEvent(eventID, {
|
|
492
|
+
isPrefetch: true
|
|
493
|
+
})
|
|
494
|
+
);
|
|
495
|
+
},
|
|
496
|
+
currentPrefetchLevel === "immediate" /* Immediate */ ? 0 : IDLE_PREFETCH_TIMEOUT_MS
|
|
497
|
+
);
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
return promise;
|
|
501
|
+
},
|
|
502
|
+
randomScrambleStringForEvent: async (eventID) => {
|
|
503
|
+
return (await insideAPI.randomScrambleForEvent(eventID)).toString();
|
|
504
|
+
},
|
|
505
|
+
deriveScrambleStringForEvent: async (derivationSeedHex, derivationSaltHierarchy, eventID) => {
|
|
506
|
+
const scramble = await measurePerf(
|
|
507
|
+
`deriveScrambleForEvent(\u2026, ${JSON.stringify(eventID)})`,
|
|
508
|
+
() => wasmDeriveScrambleForEvent(
|
|
509
|
+
derivationSeedHex,
|
|
510
|
+
derivationSaltHierarchy,
|
|
511
|
+
eventID
|
|
512
|
+
)
|
|
513
|
+
);
|
|
514
|
+
return scramble.toString();
|
|
515
|
+
},
|
|
516
|
+
solve333ToString: async (patternData) => {
|
|
517
|
+
const pattern = new KPattern(await puzzles["3x3x3"].kpuzzle(), patternData);
|
|
518
|
+
return (await solve333(pattern)).toString();
|
|
519
|
+
},
|
|
520
|
+
solve222ToString: async (patternData) => {
|
|
521
|
+
const pattern = new KPattern(await puzzles["2x2x2"].kpuzzle(), patternData);
|
|
522
|
+
return (await solve222(pattern)).toString();
|
|
523
|
+
},
|
|
524
|
+
solveSkewbToString: async (patternData) => {
|
|
525
|
+
const pattern = new KPattern(await puzzles["skewb"].kpuzzle(), patternData);
|
|
526
|
+
return (await solveSkewb(pattern)).toString();
|
|
527
|
+
},
|
|
528
|
+
solvePyraminxToString: async (patternData) => {
|
|
529
|
+
const pattern = new KPattern(
|
|
530
|
+
await puzzles["pyraminx"].kpuzzle(),
|
|
531
|
+
patternData
|
|
532
|
+
);
|
|
533
|
+
return (await solvePyraminx(pattern)).toString();
|
|
534
|
+
},
|
|
535
|
+
solveMegaminxToString: async (patternData) => {
|
|
536
|
+
const pattern = new KPattern(
|
|
537
|
+
await puzzles["megaminx"].kpuzzle(),
|
|
538
|
+
patternData
|
|
539
|
+
);
|
|
540
|
+
return (await solveMegaminx(pattern)).toString();
|
|
541
|
+
},
|
|
542
|
+
setDebugMeasurePerf: async (measure) => {
|
|
543
|
+
setDebugMeasurePerf(measure);
|
|
544
|
+
},
|
|
545
|
+
setDebugForceTwipsForScrambles: async (measure) => {
|
|
546
|
+
setDebugForceTwipsForScrambles(measure);
|
|
547
|
+
},
|
|
548
|
+
solveTwipsToString: async (def, patternData, options) => {
|
|
549
|
+
const kpuzzle = new KPuzzle(def);
|
|
550
|
+
const pattern = new KPattern(kpuzzle, patternData);
|
|
551
|
+
return (await wasmTwips(def, pattern, options)).toString();
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
// src/cubing/search/inside/index.ts
|
|
556
|
+
expose(insideAPI);
|
|
557
|
+
//# sourceMappingURL=inside-LG2EAKCL.js.map
|