cubing 0.24.7 → 0.25.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/dist/esm/{2x2x2.sgs.json-KBCXHIZP.js → 2x2x2.sgs.json-MMXKAIKZ.js} +2 -2
- package/dist/esm/{2x2x2.sgs.json-KBCXHIZP.js.map → 2x2x2.sgs.json-MMXKAIKZ.js.map} +0 -0
- package/dist/esm/{3d-dynamic-inside-IIG5EJZP.js → 3d-dynamic-N4H7XJWX.js} +28 -26
- package/dist/esm/3d-dynamic-N4H7XJWX.js.map +7 -0
- package/dist/esm/{gwt-B7CBESZR.js → 3x3x3-min2phase-FPRJ5PCJ.js} +2 -2
- package/dist/esm/{gwt-B7CBESZR.js.map → 3x3x3-min2phase-FPRJ5PCJ.js.map} +1 -1
- package/dist/esm/{scramble_444-ZFKBLRUE.js → 444-solver-PV2GUWP2.js} +5 -5
- package/dist/esm/{scramble_444-ZFKBLRUE.js.map → 444-solver-PV2GUWP2.js.map} +1 -1
- package/dist/esm/bluetooth/index.js +1 -1
- package/dist/esm/{chunk-DMCRTYR4.js → chunk-5GJ5C7NZ.js} +31 -23
- package/dist/esm/chunk-5GJ5C7NZ.js.map +7 -0
- package/dist/esm/chunk-BEXHMXCT.js +9 -0
- package/dist/esm/chunk-BEXHMXCT.js.map +7 -0
- package/dist/esm/{chunk-KRL5KQQK.js → chunk-F5WNHV7V.js} +2 -2
- package/dist/esm/{chunk-KRL5KQQK.js.map → chunk-F5WNHV7V.js.map} +2 -2
- package/dist/esm/chunk-IVQ4ITE2.js +33 -0
- package/dist/esm/chunk-IVQ4ITE2.js.map +7 -0
- package/dist/esm/{chunk-T5KQKRR3.js → chunk-KJZNEDOV.js} +2 -2
- package/dist/esm/{chunk-T5KQKRR3.js.map → chunk-KJZNEDOV.js.map} +0 -0
- package/dist/esm/{chunk-MVJPIWT7.js → chunk-LMZIKLXW.js} +84 -29
- package/dist/esm/chunk-LMZIKLXW.js.map +7 -0
- package/dist/esm/{chunk-UOI5KUW4.js → chunk-NGA3FW7U.js} +4 -4
- package/dist/esm/{chunk-UOI5KUW4.js.map → chunk-NGA3FW7U.js.map} +2 -2
- package/dist/esm/{chunk-OOIEAACO.js → chunk-OH2FLVZM.js} +7 -2
- package/dist/esm/{chunk-OOIEAACO.js.map → chunk-OH2FLVZM.js.map} +2 -2
- package/dist/esm/{chunk-QMZKTP7F.js → chunk-QEDC2QTN.js} +2 -2
- package/dist/esm/{chunk-QMZKTP7F.js.map → chunk-QEDC2QTN.js.map} +0 -0
- package/dist/esm/{chunk-37EHU3GZ.js → chunk-RENZB7QN.js} +4 -2
- package/dist/esm/chunk-RENZB7QN.js.map +7 -0
- package/dist/esm/{chunk-V7BTHDW3.js → chunk-UNROETIO.js} +2 -2
- package/dist/esm/{chunk-V7BTHDW3.js.map → chunk-UNROETIO.js.map} +0 -0
- package/dist/esm/chunk-WDJDRVZZ.js +28 -0
- package/dist/esm/chunk-WDJDRVZZ.js.map +7 -0
- package/dist/esm/fto-solver-HI6NIV74.js +1537 -0
- package/dist/esm/fto-solver-HI6NIV74.js.map +7 -0
- package/dist/esm/{fto.sgs.json-USV4WNQJ.js → fto.dynamic-UHH65HEC.js} +8 -3
- package/dist/esm/fto.dynamic-UHH65HEC.js.map +7 -0
- package/dist/esm/kilominx.kpuzzle.svg-7XJBOKFU.js +83 -0
- package/dist/esm/kilominx.kpuzzle.svg-7XJBOKFU.js.map +7 -0
- package/dist/esm/master_tetraminx-solver-KBQJGW4A.js +729 -0
- package/dist/esm/master_tetraminx-solver-KBQJGW4A.js.map +7 -0
- package/dist/esm/{megaminx.sgs.json-KKR4VPHV.js → megaminx.sgs.json-3ZEDZMWF.js} +3 -3
- package/dist/esm/{megaminx.sgs.json-KKR4VPHV.js.map → megaminx.sgs.json-3ZEDZMWF.js.map} +0 -0
- package/dist/esm/puzzle-geometry/index.js +1 -1
- package/dist/esm/puzzles/index.js +3 -1
- package/dist/esm/{pyraminx.sgs.json-HMKDN3ZT.js → pyraminx.sgs.json-5IA2F65U.js} +3 -3
- package/dist/esm/{pyraminx.sgs.json-HMKDN3ZT.js.map → pyraminx.sgs.json-5IA2F65U.js.map} +0 -0
- package/dist/esm/scramble/index.js +6 -4
- package/dist/esm/search/index.js +6 -4
- package/dist/esm/{entry-FHL2XSAP.js → search-worker-js-entry-AXEFSQVG.js} +49 -66
- package/dist/esm/search-worker-js-entry-AXEFSQVG.js.map +7 -0
- package/dist/esm/search-worker-ts-entry-OOL7WATY.js +22 -0
- package/dist/esm/search-worker-ts-entry-OOL7WATY.js.map +7 -0
- package/dist/esm/{skewb.sgs.json-MWONK6HT.js → skewb.sgs.json-6NDFH63U.js} +3 -3
- package/dist/esm/{skewb.sgs.json-MWONK6HT.js.map → skewb.sgs.json-6NDFH63U.js.map} +0 -0
- package/dist/esm/{scramble_sq1-PQ2AYBFW.js → sq1-solver-P3IWWET7.js} +3 -3
- package/dist/esm/{scramble_sq1-PQ2AYBFW.js.map → sq1-solver-P3IWWET7.js.map} +1 -1
- package/dist/esm/twisty/index.js +55 -12
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/worker-inside-generated-string-CSXWVF2Y.js +3522 -0
- package/dist/esm/worker-inside-generated-string-CSXWVF2Y.js.map +7 -0
- package/dist/types/puzzles/async/async-pg3d.d.ts +2 -0
- package/dist/types/puzzles/events.d.ts +8 -0
- package/dist/types/puzzles/implementations/kilominx/index.d.ts +2 -0
- package/dist/types/puzzles/implementations/kilominx/kilominx.kpuzzle.svg.d.ts +1 -0
- package/dist/types/puzzles/index.d.ts +6 -11
- package/dist/types/{esm-test-worker.d.ts → search/inside/search-worker-js-entry.d.ts} +0 -0
- package/dist/types/search/inside/{module-entry-path-getter.d.ts → search-worker-ts-entry-path-getter.d.ts} +0 -0
- package/dist/types/search/inside/{module-entry.d.ts → search-worker-ts-entry.d.ts} +0 -0
- package/dist/types/search/inside/solve/puzzles/fto.d.ts +1 -1
- package/dist/types/search/inside/solve/puzzles/{fto.sgs.json.d.ts → fto.dynamic.d.ts} +1 -0
- package/dist/types/search/inside/solve/puzzles/master_tetraminx.d.ts +2 -0
- package/dist/types/search/inside/worker-guard.d.ts +3 -0
- package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
- package/dist/types/twisty/heavy-code-imports/3d.d.ts +1 -1
- package/dist/types/twisty/heavy-code-imports/dynamic-entries/{3d-dynamic-inside.d.ts → 3d-dynamic.d.ts} +0 -0
- package/dist/types/twisty/model/TwistyPlayerModel.d.ts +4 -0
- package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts +1 -2
- package/dist/types/twisty/model/props/general/ArbitraryStringProp.d.ts +4 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +1 -0
- package/dist/types/twisty/views/TwistyPlayer.d.ts +6 -0
- package/dist/types/twisty/views/TwistyPlayerSettable.d.ts +6 -0
- package/dist/types/twisty/views/twizzle/TwizzleLink.d.ts +1 -1
- package/dist/types/vendor/comlink-everywhere/inside/index.d.ts +4 -1
- package/dist/types/vendor/comlink-everywhere/node-adapter.d.ts +6 -0
- package/dist/types/vendor/comlink-everywhere/outside/index.d.ts +4 -2
- package/dist/types/vendor/cstimer/src/js/scramble/{scramble_444.d.ts → 444-solver.d.ts} +0 -0
- package/dist/types/vendor/min2phase/{gwt.d.ts → 3x3x3-min2phase.d.ts} +0 -0
- package/dist/types/vendor/sq12phase/{scramble_sq1.d.ts → sq1-solver.d.ts} +0 -0
- package/dist/types/vendor/xyzzy/fto-solver-original.d.ts +203 -0
- package/dist/types/vendor/xyzzy/fto-solver.d.ts +1 -0
- package/dist/types/vendor/xyzzy/kilosolver.d.ts +140 -0
- package/dist/types/vendor/xyzzy/master_tetraminx-solver.d.ts +1 -0
- package/dist/types/vendor/xyzzy/rediscrambler.d.ts +94 -0
- package/package.json +3 -3
- package/dist/esm/3d-dynamic-inside-IIG5EJZP.js.map +0 -7
- package/dist/esm/chunk-37EHU3GZ.js.map +0 -7
- package/dist/esm/chunk-BJIOROQC.js +0 -18
- package/dist/esm/chunk-BJIOROQC.js.map +0 -7
- package/dist/esm/chunk-DMCRTYR4.js.map +0 -7
- package/dist/esm/chunk-MVJPIWT7.js.map +0 -7
- package/dist/esm/entry-FHL2XSAP.js.map +0 -7
- package/dist/esm/esm-test-worker.js +0 -15
- package/dist/esm/esm-test-worker.js.map +0 -7
- package/dist/esm/fto.sgs.json-USV4WNQJ.js.map +0 -7
- package/dist/esm/module-entry-TKJ6ZAZB.js +0 -18
- package/dist/esm/module-entry-TKJ6ZAZB.js.map +0 -7
- package/dist/esm/node-SP4L2AKI.js +0 -12
- package/dist/esm/node-SP4L2AKI.js.map +0 -7
- package/dist/esm/node-W3AD4HBK.js +0 -39
- package/dist/esm/node-W3AD4HBK.js.map +0 -7
- package/dist/esm/worker-inside-generated-string-XYHIVIPG.js +0 -3447
- package/dist/esm/worker-inside-generated-string-XYHIVIPG.js.map +0 -7
- package/dist/types/search/esm-test-worker.d.ts +0 -3
- package/dist/types/search/inside/entry.d.ts +0 -1
- package/dist/types/vendor/comlink-everywhere/inside/node.d.ts +0 -1
- package/dist/types/vendor/comlink-everywhere/outside/node.d.ts +0 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/vendor/xyzzy/master_tetraminx-solver.js"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable */\n/* master pyraminx scramble generator */\n// From https://gist.github.com/torchlight/9a5c53da09d8e090756a228f4b5f3471\n// Added to `cubing.js` under the GPL license by permission from the author (@torchlight/xyzzy).\n\n\"use strict\";\n\nimport { randomUIntBelowFactory } from \"../random-uint-below\";\n\nfunction counter(A) {\n let counts = [];\n for (let a of A) counts[a] = (counts[a] || 0) + 1;\n return counts;\n}\n\n/* Combinatoric functions */\n\nfunction factorial(n) {\n if (n < 2) return n;\n let f = 1;\n for (let i = 2; i <= n; i++) f *= i;\n return f;\n}\n\nfunction identity_permutation(n) {\n let a = Array(n);\n for (let i = 0; i < n; i++) {\n a[i] = i;\n }\n return a;\n}\n\nfunction permutation_to_index(perm) {\n perm = perm.slice();\n let n = perm.length;\n let f = factorial(n - 1);\n let ind = 0;\n while (n > 1) {\n n--;\n // invariant: f == factorial(n)\n // also, perm stores meaningful values up to perm[n]\n let e = perm[0];\n ind += e * f;\n for (let i = 0; i < n; i++) {\n let x = perm[i + 1];\n perm[i] = x - (x > e);\n }\n f /= n;\n }\n return ind;\n}\n\nfunction index_to_permutation(ind, n) {\n let perm = [];\n let f = factorial(n - 1);\n for (let i = 0; i < n; i++) {\n perm[i] = (ind / f) | 0;\n ind %= f;\n f /= n - 1 - i;\n }\n for (let i = n - 2; i >= 0; i--) {\n for (let j = i + 1; j < n; j++) {\n perm[j] += +(perm[j] >= perm[i]);\n }\n }\n return perm;\n}\n\nfunction permutation_parity(A) {\n let n = A.length;\n let parity = 0;\n for (let i = 0; i < n - 1; i++) {\n for (let j = i; j < n; j++) {\n if (A[i] > A[j]) parity ^= 1;\n }\n }\n return parity;\n}\n\nfunction index_to_evenpermutation(ind, n) {\n let perm = [];\n let f = factorial(n - 1) / 2;\n let parity = 0;\n for (let i = 0; i < n - 1; i++) {\n perm[i] = (ind / f) | 0;\n ind %= f;\n f /= n - 1 - i;\n }\n perm[n - 1] = 0;\n for (let i = n - 2; i >= 0; i--) {\n for (let j = i + 1; j < n; j++) {\n if (perm[j] >= perm[i]) perm[j]++;\n else parity ^= 1;\n }\n }\n if (parity === 1) [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];\n return perm;\n}\n\nfunction evenpermutation_to_index(perm) {\n return permutation_to_index(perm) >> 1;\n}\n\nlet [evenpermutation12_to_index, index_to_evenpermutation12] = (() => {\n let index_in_set_bits = new Int8Array(4096 * 12);\n let look_up_set_bits = new Int8Array(4096 * 12);\n for (let i = 0; i < 4096; i++) {\n for (let j = 0, counter = 0; j < 12; j++) {\n if (((i >>> j) & 1) === 0) {\n continue;\n }\n index_in_set_bits[(j << 12) | i] = counter;\n look_up_set_bits[(counter << 12) | i] = j;\n counter++;\n }\n }\n\n function evenpermutation12_to_index(perm) {\n let unused = 0xfff; // track which values in 0..11 haven't been used so far\n let f = 19958400; // = 11!/2\n let ind = 0;\n for (let i = 0; i < 10; i++) {\n let v = perm[i];\n ind += index_in_set_bits[unused | (v << 12)] * f;\n unused &= ~(1 << v);\n f /= 11 - i;\n }\n return ind;\n }\n\n function index_to_evenpermutation12(ind, perm) {\n let unused = 0xfff;\n let f = 19958400; // = 11!/2\n let parity = 0;\n for (let i = 0; i < 10; i++) {\n let a = (ind / f) | 0;\n ind -= a * f;\n parity ^= a & 1;\n let v = look_up_set_bits[unused | (a << 12)];\n perm[i] = v;\n unused &= ~(1 << v);\n f /= 11 - i;\n }\n // the last two elements are uniquely determined by the other ten\n perm[10] = look_up_set_bits[unused | (parity << 12)];\n perm[11] = look_up_set_bits[unused | ((parity ^ 1) << 12)];\n return perm;\n }\n\n // these functions could be significantly faster with SWAR, but we can't SWAR here without 64-bit\n // bitwise ops. :<\n\n return [evenpermutation12_to_index, index_to_evenpermutation12];\n})();\n\nfunction compose(A, B) {\n let C = [];\n for (let i = 0; i < B.length; i++) C[i] = A[B[i]];\n return C;\n}\n\nfunction double_compose(A, B, C) {\n let D = [];\n for (let i = 0; i < C.length; i++) {\n D[i] = A[B[C[i]]];\n }\n return D;\n}\n\nfunction invert(perm) {\n let inv = [];\n for (let i = 0; i < perm.length; i++) {\n inv[perm[i]] = i;\n }\n return inv;\n}\n\nfunction permutation_from_cycle(cycle, n) {\n let perm = [];\n for (let i = 0; i < n; i++) perm[i] = i;\n for (let i = 0; i < cycle.length; i++) {\n perm[cycle[i]] = cycle[(i + 1) % cycle.length];\n }\n return perm;\n}\n\nfunction permutation_from_cycles(cycles, n) {\n if (cycles.length === 0) {\n return identity_permutation(n);\n }\n return cycles\n .map((cycle) => permutation_from_cycle(cycle, n))\n .reduce(compose);\n // not very efficient, but this function is only called during init so it's fine\n}\n\n/* puzzle-specific stuff */\n\n/*\nWe will (mostly) ignore the trivial tips here. When we say \"single-layer\", we mean one layer\n*excluding* the tip, so it's really two layers on the physical puzzle; likewise, \"double-layer\"\nmeans three layers on the physical puzzle. Hopefully this won't be too confusing.\n\nTips (\"zero-layer\" moves?) are written with a single lowercase letter: u, l, r, b.\nSingle-layer moves are written with a single uppercase letter: U, L, R, B.\nDouble-layer moves are written with a single uppercase letter and a w suffix: Uw, Lw, Rw, Bw.\n\nThe master pyraminx has four types of pieces:\n- 4 corners (same as pyraminx); three orientations each (no permutation).\n- 6 midges (same as pyraminx); even permutation, two orientations each, sum(orientations)%2 = 0.\n- 12 wings; even permutation (no orientation).\n- 4 centres; even permutation (no visible orientation).\n\nThe total number of states is (3^4) * (6!/2 * 2^5) * (12!/2) * (4!/2) = 2 681 795 837 952 000.\n\nThis is small enough that an optimal solver is feasible *if* we can use large pruning tables, but\nif we want to keep init times short, a two-phase algorithm would be much better. Here, we will use a\ntwo-phase reduction algorithm: the first phase reduces to a Halpern-Meier Pyramid / Jing's pyraminx,\nand the second phase just solves that (using only double-layer moves).\n\nSome ~group theory~ flexing: the alternating group A_4 (acting on the centres) has a copy of the\nKlein four-group V as a normal subgroup of index 3. We can name the cosets (other than V itself) as\nthe cw coset if the elements are a clockwise 3-cycle (as viewed from a corner) and the ccw coset if\nthe elements are an anticlockwise 3-cycle. On the H-M pyra, (the name of) the V-coset of the centres\nis exactly the sum of the orientations of the corners mod 3; this follows from V being a normal\nsubgroup of A_4.\n\n---\n\nIn the first phase, we:\n(i) do edge pairing (12!/2 ~ 2.4e8);\n(ii) ensure the V-coset of the centres matches the corner orientations (3).\n\nRelevant coordinates:\nlocations of a midge and its matching wings + centre stuff ((6*12*11) * 3 = 2376)\n\nPruning table:\n- forming two tredges + centre stuff ((6*5*12*11*10*9) * 3 = 1069200)\n- counting solved wings versus flipped wings + centre stuff (21 * 2 = 42)\n\nThe first pruning table takes around a quarter of a second to generate, which is kinda slow, but it\ncan't be helped. We check all fifteen possible pairs. (Checking only three pairs is enough, but has\nvery poor worst-case performance.)\n\nThe second pruning table takes literally an hour to generate, but it's also small so we just hard-\ncode all of its values instead of computing it on initialisation. Using this table kills off worst-\ncase behaviour on \"bad\" scrambles, but doesn't do a lot on \"median\" scrambles.\n\n---\n\nIn the second phase, we solve the puzzle like a H-M pyra.\n\nRelevant coordinates:\n(i) edge permutation, location of yellow centre (6!/2 * 4 = 1440)\n(ii) edge orientation, corner orientation (2^5 * 3^4 = 2592)\n\nCorner orientation uniquely determines the V-coset of the centre permutation, and since V acts\nsharply transitively on the centres, knowing where the yellow centre is uniquely determines which\nelement of that V-coset is the centre permutation.\n\n---\n\nConsiderations for generating scrambles:\n\nTip scrambling: the standard pyraminx scramblers just put the tips at the end of the scramble. This\nis *really bad* when we're doing the scrambles by hand and then immediately solving afterwards.\nIdeally, the scramble sequence shouldn't reveal any obvious information about the scramble.\n\nLike 333 and a few other puzzles, the states of a master pyra have a group structure, and so we can\ntake inverses. Once we have generated a random state, we can return either the inverse of its\nsolution, or the solution of its inverse. Since inversion preserves uniformity, we could just as\nwell just directly return a solution of a random state.\n\n---\n\n(ASCII nets modified from TNoodle's source code comments)\n\ncorners:\n\n* ____ ____ ____ ____\n* /\\ /\\ /\\ /\\ /\\ /\\\n* /3 \\ / \\ /0 \\ U /0 \\ / \\ /3 \\\n* /____\\/____\\/____\\ ____ /____\\/____\\/____\\\n* \\ /\\ /\\ / /\\ /\\ \\ /\\ /\\ /\n* \\ / \\ / \\ / / \\0 / \\ \\ / \\ / \\ /\n* \\/____\\/____\\/ /____\\/____\\ \\/____\\/____\\/\n* \\ /\\ / /\\ /\\ /\\ \\ /\\ /\n* \\ /1 \\ / / \\ / \\ / \\ \\ /2 \\ /\n* \\/____\\/ /____\\/____\\/____\\ \\/____\\/\n* \\ /\\ /\\ /\n* \\1 / \\ / \\2 /\n* L \\/____\\/____\\/ R\n*\n* ____ ____\n* /\\ /\\ /\\\n* /1 \\ / \\ /2 \\\n* /____\\/____\\/____\\\n* \\ /\\ /\\ /\n* \\ / \\ / \\ /\n* \\/____\\/____\\/\n* \\ /\\ /\n* \\ /3 \\ /\n* \\/____\\/\n*\n* B\n\nmidges:\n\n* ____ ____ ____ ____\n* /\\ /\\ /\\ /\\ /\\ /\\\n* / \\ /11\\ / \\ U / \\ /5 \\ / \\\n* /____\\/____\\/____\\ ____ /____\\/____\\/____\\\n* \\ /\\ /\\ / /\\ /\\ \\ /\\ /\\ /\n* \\ /8 \\ /7 \\ / / \\ / \\ \\ /9 \\ /10\\ /\n* \\/____\\/____\\/ /____\\/____\\ \\/____\\/____\\/\n* \\ /\\ / /\\ /\\ /\\ \\ /\\ /\n* \\ / \\ / / \\1 / \\3 / \\ \\ / \\ /\n* \\/____\\/ /____\\/____\\/____\\ \\/____\\/\n* \\ /\\ /\\ /\n* \\ / \\0 / \\ /\n* L \\/____\\/____\\/ R\n*\n* ____ ____\n* /\\ /\\ /\\\n* / \\ /6 \\ / \\\n* /____\\/____\\/____\\\n* \\ /\\ /\\ /\n* \\ /2 \\ /4 \\ /\n* \\/____\\/____\\/\n* \\ /\\ /\n* \\ / \\ /\n* \\/____\\/\n*\n* B\n\nwings:\n\n* ____ ____ ____ ____\n* /\\ /\\ /\\ /\\ /\\ /\\\n* / \\5 / \\11/ \\ U / \\11/ \\5 / \\\n* /____\\/____\\/____\\ ____ /____\\/____\\/____\\\n* \\ /\\ /\\ / /\\ /\\ \\ /\\ /\\ /\n* \\8 / \\ / \\1 / /1 \\ /9 \\ \\9 / \\ / \\4 /\n* \\/____\\/____\\/ /____\\/____\\ \\/____\\/____\\/\n* \\ /\\ / /\\ /\\ /\\ \\ /\\ /\n* \\2 / \\7 / /7 \\ / \\ /3 \\ \\3 / \\10/\n* \\/____\\/ /____\\/____\\/____\\ \\/____\\/\n* \\ /\\ /\\ /\n* \\ /0 \\ /6 \\ /\n* L \\/____\\/____\\/ R\n*\n* ____ ____\n* /\\ /\\ /\\\n* / \\0 / \\6 / \\\n* /____\\/____\\/____\\\n* \\ /\\ /\\ /\n* \\2 / \\ / \\10/\n* \\/____\\/____\\/\n* \\ /\\ /\n* \\8 / \\4 /\n* \\/____\\/\n*\n* B\n\ncentres:\n\n* ____ ____ ____ ____\n* /\\ /\\ /\\ /\\ /\\ /\\\n* / \\ / \\ / \\ U / \\ / \\ / \\\n* /____\\/____\\/____\\ ____ /____\\/____\\/____\\\n* \\ /\\ /\\ / /\\ /\\ \\ /\\ /\\ /\n* \\ / \\2 / \\ / / \\ / \\ \\ / \\1 / \\ /\n* \\/____\\/____\\/ /____\\/____\\ \\/____\\/____\\/\n* \\ /\\ / /\\ /\\ /\\ \\ /\\ /\n* \\ / \\ / / \\ /3 \\ / \\ \\ / \\ /\n* \\/____\\/ /____\\/____\\/____\\ \\/____\\/\n* \\ /\\ /\\ /\n* \\ / \\ / \\ /\n* L \\/____\\/____\\/ R\n*\n* ____ ____\n* /\\ /\\ /\\\n* / \\ / \\ / \\\n* /____\\/____\\/____\\\n* \\ /\\ /\\ /\n* \\ / \\0 / \\ /\n* \\/____\\/____\\/\n* \\ /\\ /\n* \\ / \\ /\n* \\/____\\/\n*\n* B\n\n---\n\nfull state:\n{\n co: int[4]: corner orientation (ccw twist = 1, cw twist = 2),\n mp: int[12]: midge facelet permutation (this encodes orientation as well),\n wp: int[12]: wing permutation,\n cp: int[4]: centre permutation\n}\n\nphase 1 state:\nint[6]: locations of midge and matching wings + (CO - coset index) % 3\n\nphase 2 state:\n[\n int: edge permutation + yellow centre coordinate (0..1439),\n int: edge orientation + corner orientation coordinate (0..2591)\n]\n*/\n\nfunction compose_state(state1, state2) {\n let co = Array(4);\n for (let i = 0; i < 4; i++) {\n co[i] = (state1.co[i] + state2.co[i]) % 3;\n }\n let mp = compose(state1.mp, state2.mp);\n let wp = compose(state1.wp, state2.wp);\n let cp = compose(state1.cp, state2.cp);\n return { co: co, mp: mp, wp: wp, cp: cp };\n}\n\nfunction invert_state(state) {\n let co = Array(4);\n for (let i = 0; i < 4; i++) {\n co[i] = (3 - state.co[i]) % 3;\n }\n let mp = invert(state.mp);\n let wp = invert(state.wp);\n let cp = invert(state.cp);\n return { co: co, mp: mp, wp: wp, cp: cp };\n}\n\nlet solved = {\n co: [0, 0, 0, 0],\n mp: identity_permutation(12),\n wp: identity_permutation(12),\n cp: [0, 1, 2, 3],\n};\n\n// the single-layer moves don't affect midges (mp) or centres (cp)\nlet move_U = {\n co: [2, 0, 0, 0],\n mp: identity_permutation(12),\n wp: permutation_from_cycle([1, 9, 11], 12),\n cp: [0, 1, 2, 3],\n};\nlet move_L = {\n co: [0, 2, 0, 0],\n mp: identity_permutation(12),\n wp: permutation_from_cycle([0, 7, 2], 12),\n cp: [0, 1, 2, 3],\n};\nlet move_R = {\n co: [0, 0, 2, 0],\n mp: identity_permutation(12),\n wp: permutation_from_cycle([3, 6, 10], 12),\n cp: [0, 1, 2, 3],\n};\nlet move_B = {\n co: [0, 0, 0, 2],\n mp: identity_permutation(12),\n wp: permutation_from_cycle([4, 8, 5], 12),\n cp: [0, 1, 2, 3],\n};\n\n// the double-layer moves affect everything, but permute the midges and wings identically\nlet move_Uw = {\n co: [2, 0, 0, 0],\n mp: permutation_from_cycles(\n [\n [1, 9, 11],\n [7, 3, 5],\n ],\n 12,\n ),\n wp: permutation_from_cycles(\n [\n [1, 9, 11],\n [7, 3, 5],\n ],\n 12,\n ),\n cp: [0, 2, 3, 1],\n};\nlet move_Lw = {\n co: [0, 2, 0, 0],\n mp: permutation_from_cycles(\n [\n [0, 7, 2],\n [6, 1, 8],\n ],\n 12,\n ),\n wp: permutation_from_cycles(\n [\n [0, 7, 2],\n [6, 1, 8],\n ],\n 12,\n ),\n cp: [3, 1, 0, 2],\n};\nlet move_Rw = {\n co: [0, 0, 2, 0],\n mp: permutation_from_cycles(\n [\n [3, 6, 10],\n [9, 0, 4],\n ],\n 12,\n ),\n wp: permutation_from_cycles(\n [\n [3, 6, 10],\n [9, 0, 4],\n ],\n 12,\n ),\n cp: [1, 3, 2, 0],\n};\nlet move_Bw = {\n co: [0, 0, 0, 2],\n mp: permutation_from_cycles(\n [\n [4, 8, 5],\n [10, 2, 11],\n ],\n 12,\n ),\n wp: permutation_from_cycles(\n [\n [4, 8, 5],\n [10, 2, 11],\n ],\n 12,\n ),\n cp: [2, 0, 1, 3],\n};\n\nlet moves = [\n move_Uw,\n move_Lw,\n move_Rw,\n move_Bw,\n move_U,\n move_L,\n move_R,\n move_B,\n];\nlet move_names = [\"u\", \"l\", \"r\", \"b\", \"U\", \"L\", \"R\", \"B\"];\nconst N_MOVES = 8; // number of moves\nconst N_MOVES_PHASE2 = 4; // number of moves for phase 2\n\nfunction moves_commute(i, j) {\n // single-layer moves always commute with each other\n if (i >= 4 && j >= 4) {\n return true;\n }\n // double-layer moves commute iff they are equal\n if (i < 4 && j < 4) {\n return i === j;\n }\n // a single-layer and a double-layer move commute iff they're on the same axis\n return (i ^ j) === 4;\n}\n\nfunction apply_move_sequence(state, move_sequence) {\n for (let [m, r] of move_sequence) {\n for (let i = 0; i < r; i++) state = compose_state(state, moves[m]);\n }\n return state;\n}\n\nfunction stringify_move_sequence(move_sequence) {\n let suffixes = [\"0\", \"\", \"'\"];\n let s = move_sequence.map(([m, r]) => move_names[m] + suffixes[r]);\n return s.join(\" \");\n}\n\nfunction print_move_sequence(move_sequence) {\n console.log(stringify_move_sequence(move_sequence));\n}\n\nfunction generate_random_state(randomUintBelow) {\n // master pyra has no \"nontrivial\" restrictions, beyond the usual parity stuff\n let co = Array(4);\n for (let i = 0; i < 4; i++) {\n co[i] = randomUintBelow(3);\n }\n let mp = index_to_evenpermutation(randomUintBelow(factorial(6) / 2), 6);\n for (let i = 0, parity = 0; i < 6; i++) {\n let eo = i === 5 ? parity : randomUintBelow(2);\n parity ^= eo;\n mp[i] += eo * 6;\n mp[i + 6] = (mp[i] + 6) % 12;\n }\n let wp = index_to_evenpermutation(randomUintBelow(factorial(12) / 2), 12);\n let cp = index_to_evenpermutation(randomUintBelow(factorial(4) / 2), 4);\n return { co: co, mp: mp, wp: wp, cp: cp };\n}\n\nfunction generate_random_state_scramble(randomUintBelow) {\n return solve(generate_random_state(randomUintBelow));\n}\n\nfunction generate_scramble_sequence(\n randomUintBelow,\n tips = true,\n obfuscate_tips = false,\n) {\n let scramble_string = stringify_move_sequence(\n generate_random_state_scramble(randomUintBelow),\n );\n if (!tips) {\n return scramble_string;\n }\n let tip_names = [\"u\", \"l\", \"r\", \"b\"];\n let suffixes = [\"0\", \"\", \"'\"];\n if (!obfuscate_tips) {\n for (let i = 0; i < 4; i++) {\n let x = randomUintBelow(3);\n if (x !== 0) {\n scramble_string += \" \" + tip_names[i] + suffixes[x];\n }\n }\n return scramble_string.trim();\n }\n let amount = [],\n amount_pre = [],\n amount_post = [];\n for (let i = 0; i < 4; i++) {\n amount[i] = randomUintBelow(3);\n amount_pre[i] = randomUintBelow(3);\n amount_post[i] = (amount[i] - amount_pre[i] + 3) % 3;\n }\n let weight = (arr) => arr.filter((x) => x !== 0).length;\n while (\n !(\n weight(amount_pre) >= 1 &&\n weight(amount_post) >= 1 &&\n weight(amount_pre) + weight(amount_post) >= 4\n )\n ) {\n for (let i = 0; i < 4; i++) {\n amount_pre[i] = randomUintBelow(3);\n amount_post[i] = (amount[i] - amount_pre[i] + 3) % 3;\n }\n }\n let prepend = amount_pre\n .map((x, i) => (x !== 0 ? tip_names[i] + suffixes[x] + \" \" : \"\"))\n .join(\"\");\n let append = amount_post\n .map((x, i) => (x !== 0 ? \" \" + tip_names[i] + suffixes[x] : \"\"))\n .join(\"\");\n return prepend + scramble_string + append;\n // this technically has the extremely edge case of the original no-tip scramble being the\n // trivial scramble and the resulting string will have a double space, but this is Very Rare\n}\n\nfunction solve(state) {\n let phase1_indices = index_phase1(state);\n let phase2_mtables = [\n generate_phase2_permutation_mtable(),\n generate_phase2_orientation_mtable(),\n ];\n let phase2_ptables = [\n generate_phase2_permutation_ptable(),\n generate_phase2_orientation_ptable(),\n ];\n\n let phase1gen = phase1_ida_solve_gen(phase1_indices);\n let best = undefined;\n let intermediate_states = new Set();\n let start_time = performance.now();\n for (let i = 0; i < 22; i++) {\n let { value: sol1, done } = phase1gen.next();\n let new_state = state;\n for (let [m, r] of sol1) {\n for (let i = 0; i < r; i++)\n new_state = compose_state(new_state, moves[m]);\n }\n let stringified_state = JSON.stringify(new_state);\n if (intermediate_states.has(stringified_state)) {\n // console.log(\"skip\");\n continue;\n } else intermediate_states.add(stringified_state);\n let phase2_indices = index_phase2(new_state);\n //let sol2 = [];\n let moves_left = best ? best.length - sol1.length - 1 : 999999;\n let sol2 = ida_solve_gen(\n phase2_indices,\n phase2_mtables,\n phase2_ptables,\n moves_left,\n ).next().value;\n if (sol2 === undefined) {\n // console.log(\"prune\");\n continue;\n }\n // console.log(\n // `to ${stringified_state} in ${sol1.length} moves; total move count ${\n // sol1.length + sol2.length\n // }`,\n // );\n if (best === undefined || best.length > sol1.length + sol2.length) {\n best = sol1.concat(sol2);\n }\n // bail if we've spent too much time\n if (performance.now() - start_time > 300) break;\n }\n return best;\n}\n\nfunction determine_V_coset(p) {\n // p: even permutation on 4 elements\n // NOTE: the formula depends on the centre ordering and corner orientation conventions\n // V itself is 0, ccw coset is 1, cw coset is 2.\n return p[3 ^ p.indexOf(3)];\n}\n\nfunction index_phase1(state) {\n let w = compose(invert(state.mp), state.wp);\n let c =\n (state.co.reduce((x, y) => x + y) - determine_V_coset(state.cp) + 3) % 3;\n return [0, 1, 2, 3, 4, 5].map(\n (i) => i + 6 * w.indexOf(i) + 72 * w.indexOf(i + 6) + 864 * c,\n );\n}\n\nlet phase1_permtable_m = [],\n phase1_permtable_minv = [];\nlet phase1_permtable_w = [],\n phase1_permtable_winv = [];\nfor (let i = 0; i < N_MOVES; i++) {\n let move = moves[i];\n phase1_permtable_m[i] = move.mp;\n phase1_permtable_minv[i] = invert(move.mp);\n phase1_permtable_w[i] = move.wp;\n phase1_permtable_winv[i] = invert(move.wp);\n}\nlet phase1_c_update = [0, 0, 0, 0, 2, 2, 2, 2];\n\n/* score = (# matching wings - # flipped wings) + 12\n(the +12 is to make it have range 0..24 rather than -12..12)\n\nthis is more effective than looking at # matching wings alone, or # flipped wings alone.\n\nstats for centre/corner solved:\njs> num_by_score\n[1, 0, 0, 320, 1350, 11328, 77280, 422400, 2016735, 7808000, 23467296, 50855040, 70181300, 50855040, 23467296, 7808000, 2016735, 422400, 77280, 11328, 1350, 320, 0, 0, 1]\njs> min_by_score\n[14, 9999, 9999, 11, 11, 10, 9, 8, 8, 7, 7, 6, 4, 5, 5, 3, 4, 4, 2, 3, 4, 3, 9999, 9999, 0]\njs> max_by_score\n[14, -9999, -9999, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 11, 10, 10, 10, 9, 8, 8, 5, -9999, -9999, 0]\njs> sum_by_score\n[14, 0, 0, 3856, 16458, 131856, 904280, 4885752, 23019405, 87454032, 256924344, 542481888, 725249936, 501317616, 218566356, 67825352, 16313334, 3116472, 509352, 63600, 7854, 1288, 0, 0, 0]\n\nstats for centre/corner unsolved:\njs> min_by_score\n[13, 9999, 9999, 11, 10, 10, 9, 8, 8, 7, 7, 6, 4, 5, 5, 3, 4, 4, 2, 3, 3, 1, 9999, 9999, 6]\njs> max_by_score\n[13, -9999, -9999, 13, 13, 13, 13, 13, 13, 13, 13, 12, 13, 12, 11, 11, 10, 9, 9, 8, 8, 6, -9999, -9999, 6]\njs> sum_by_score\n[13, 0, 0, 3792, 16026, 133344, 900726, 4870308, 23008797, 87434932, 256859772, 542586948, 725077315, 501101484, 218802804, 67943128, 16250601, 3110148, 509044, 65940, 7284, 1148, 0, 0, 6]\n\n*/\n\nlet phase1_score_ptable = [\n //-12 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 12\n [\n 14, -1, -1, 11, 11, 10, 9, 8, 8, 7, 7, 6, 4, 5, 5, 3, 4, 4, 2, 3, 4, 3, -1,\n -1, 0,\n ],\n [\n 13, -1, -1, 11, 10, 10, 9, 8, 8, 7, 7, 6, 4, 5, 5, 3, 4, 4, 2, 3, 3, 1, -1,\n -1, 6,\n ],\n];\nlet phase1_score_ptable_condensed = new Int8Array(55);\nfor (let i = 0; i < 25; i++) {\n phase1_score_ptable_condensed[i] = phase1_score_ptable[0][i];\n phase1_score_ptable_condensed[i + 30] = phase1_score_ptable[1][i];\n}\nlet phase1_coord_to_score = new Int8Array(6 * 12 * 12 * 3);\nfor (let i = 0; i < 6; i++)\n for (let j = 0; j < 12; j++)\n for (let k = 0; k < 12; k++) {\n let index = i + 6 * j + 72 * k;\n let score = 2;\n if (j === i) {\n score++;\n } else if (j === (i + 6) % 12) {\n score--;\n }\n if (k === (i + 6) % 12) {\n score++;\n } else if (k === i) {\n score--;\n }\n phase1_coord_to_score[index] = score;\n phase1_coord_to_score[index + 6 * 12 * 12] = phase1_coord_to_score[\n index + 2 * 6 * 12 * 12\n ] = score + 5;\n }\n\nfunction phase1_benchmark() {\n /* some 13-move phase 1 states*/\n let phase1_test_states = [\n [1836, 2551, 1922, 1947, 2440, 2063],\n [1674, 1153, 1058, 1353, 1000, 1271],\n [1764, 2497, 1904, 2001, 2242, 2087],\n [582, 301, 566, 273, 40, 431],\n [600, 217, 200, 477, 136, 431],\n [60, 613, 98, 273, 214, 407],\n [36, 265, 98, 777, 190, 431],\n [1764, 1987, 2402, 1881, 2368, 2159],\n [36, 277, 194, 129, 334, 431],\n [1764, 1843, 1928, 2499, 2158, 2039],\n [528, 721, 194, 429, 112, 275],\n [840, 115, 182, 219, 346, 425],\n [1752, 1831, 2498, 1989, 2416, 1943],\n [324, 133, 554, 231, 58, 431],\n [18, 331, 194, 495, 658, 431],\n [1764, 1987, 1880, 2337, 2578, 2081],\n [1776, 1855, 1934, 1989, 2050, 2231],\n [396, 811, 194, 297, 712, 47],\n [816, 115, 482, 273, 148, 425],\n [972, 907, 1070, 1281, 1174, 1511],\n ];\n generate_phase1_pairing2c_ptable();\n let start = performance.now();\n for (let coords of phase1_test_states) {\n phase1_ida_solve_gen(coords).next();\n }\n return performance.now() - start;\n}\n\nfunction* phase1_ida_solve_gen(coords) {\n let bound = 0;\n let mtable = generate_phase1_pairingc_mtable();\n let ptable = generate_phase1_pairing2c_ptable();\n while (true) {\n yield* phase1_ida_search_gen(...coords, mtable, ptable, bound, -1);\n bound++;\n }\n}\n\nfunction* phase1_ida_search_gen(a, b, c, d, e, f, mtable, ptable, bound, last) {\n let nmoves = N_MOVES; // = 8\n let score =\n phase1_coord_to_score[a] +\n phase1_coord_to_score[b] +\n phase1_coord_to_score[c] +\n phase1_coord_to_score[d] +\n phase1_coord_to_score[e] +\n phase1_coord_to_score[f];\n let heuristic = Math.max(\n ptable[(a % 864) + b * 864],\n ptable[(c % 864) + b * 864],\n ptable[(e % 864) + b * 864],\n ptable[(a % 864) + d * 864],\n ptable[(c % 864) + d * 864],\n ptable[(e % 864) + d * 864],\n ptable[(a % 864) + f * 864],\n ptable[(c % 864) + f * 864],\n ptable[(e % 864) + f * 864],\n ptable[(a % 864) + c * 864],\n ptable[(a % 864) + e * 864],\n ptable[(c % 864) + e * 864],\n ptable[(b % 864) + d * 864],\n ptable[(b % 864) + f * 864],\n ptable[(d % 864) + f * 864],\n phase1_score_ptable_condensed[score],\n );\n if (heuristic > bound) return;\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) return;\n for (let m = 0; m < nmoves; m++) {\n if (m === last) continue;\n if (m < last && moves_commute(m, last)) continue;\n let A = a,\n B = b,\n C = c,\n D = d,\n E = e,\n F = f;\n for (let r = 1; r <= 2; r++) {\n A = mtable[A][m];\n B = mtable[B][m];\n C = mtable[C][m];\n D = mtable[D][m];\n E = mtable[E][m];\n F = mtable[F][m];\n let subpath_gen = phase1_ida_search_gen(\n A,\n B,\n C,\n D,\n E,\n F,\n mtable,\n ptable,\n bound - 1,\n m,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) break;\n yield [[m, r]].concat(subpath);\n }\n }\n }\n}\n\nfunction index_phase2(state) {\n let edges = state.mp;\n let ep = evenpermutation_to_index(edges.slice(0, 6).map((x) => x % 6));\n let eo = edges\n .slice(0, 5)\n .map((x, i) => (x >= 6) * 2 ** i)\n .reduce((x, y) => x + y);\n let co = state.co.map((x, i) => x * 3 ** i).reduce((x, y) => x + y);\n let cloc = state.cp.indexOf(0);\n return [ep + 360 * cloc, eo + 32 * co];\n}\n\nlet tables = {};\n\nfunction generate_phase1_pairing_mtable() {\n if (tables.phase1pm) {\n return tables.phase1pm;\n }\n let mtable = Array(6 * 12 * 12)\n .fill()\n .map(() => Array(N_MOVES).fill(-1));\n for (let midge = 0; midge < 6; midge++) {\n for (let wingl = 0; wingl < 12; wingl++) {\n for (let wingh = 0; wingh < 12; wingh++) {\n if (wingl === wingh) {\n continue;\n }\n let index = midge + 6 * wingl + 72 * wingh;\n for (let m = 0; m < N_MOVES; m++) {\n let new_midge = phase1_permtable_minv[m][midge];\n let new_wingl = phase1_permtable_winv[m][wingl];\n let new_wingh = phase1_permtable_winv[m][wingh];\n if (new_midge < 6) {\n mtable[index][m] = new_midge + 6 * new_wingl + 72 * new_wingh;\n } else {\n mtable[index][m] = new_midge - 6 + 6 * new_wingh + 72 * new_wingl;\n }\n }\n }\n }\n }\n return (tables.phase1pm = mtable);\n}\n\nfunction generate_phase1_pairingc_mtable() {\n if (tables.phase1pcm) {\n return tables.phase1pcm;\n }\n let mtable_pairing = generate_phase1_pairing_mtable();\n let mtable = Array(mtable_pairing.length * 3)\n .fill()\n .map(() => Array(N_MOVES).fill(-1));\n for (let index = 0; index < mtable_pairing.length; index++) {\n for (let m = 0; m < N_MOVES; m++) {\n let new_index = mtable_pairing[index][m];\n mtable[index][m] = new_index + 6 * 12 * 12 * phase1_c_update[m];\n mtable[index + 6 * 12 * 12][m] =\n new_index + 6 * 12 * 12 * ((phase1_c_update[m] + 1) % 3);\n mtable[index + 2 * 6 * 12 * 12][m] =\n new_index + 6 * 12 * 12 * ((phase1_c_update[m] + 2) % 3);\n }\n }\n return (tables.phase1pcm = mtable);\n}\n\nfunction generate_phase1_pairing2c_ptable() {\n if (tables.phase1p2cp) {\n return tables.phase1p2cp;\n }\n let mtable_noc = generate_phase1_pairing_mtable();\n let mtable = generate_phase1_pairingc_mtable();\n let ptable = new Int8Array((6 * 12 * 12) ** 2 * 3);\n ptable.fill(-1);\n let g = [0, 1, 2, 3, 4, 5].map((x) => x + 6 * x + 72 * (x + 6));\n for (let i = 0; i < 6; i++)\n for (let j = 0; j < 6; j++) {\n if (i === j) continue;\n ptable[g[i] + 864 * g[j]] = 0;\n }\n let dist = 0;\n while (true) {\n let changed = false;\n for (let index = 0; index < ptable.length; index++) {\n if (ptable[index] !== dist) {\n continue;\n }\n let index0 = index % 864,\n index1 = Math.floor(index / 864);\n for (let m = 0; m < N_MOVES; m++) {\n let new_index0 = index0,\n new_index1 = index1;\n for (let r = 1; r <= 2; r++) {\n new_index0 = mtable_noc[new_index0][m];\n new_index1 = mtable[new_index1][m];\n let new_index = new_index0 + 864 * new_index1;\n if (ptable[new_index] === -1) {\n changed = true;\n ptable[new_index] = dist + 1;\n }\n }\n }\n }\n if (!changed) {\n break;\n }\n dist++;\n }\n return (tables.phase1p2cp = ptable);\n}\n\nfunction generate_phase1_full_ptable() {\n // extremely slow, do not use\n if (tables.phase1p) {\n return tables.phase1p;\n }\n const HALFFACT12 = factorial(12) / 2;\n const SIZE = HALFFACT12 * 3;\n let ptable = new Int8Array(SIZE).fill(-1);\n ptable[0] = 0;\n let dist = 0;\n let perm = new Int8Array(12),\n new_perm = new Int8Array(12);\n while (true) {\n let changed = false;\n let count = 0;\n for (let index = 0; index < SIZE; index++) {\n if (ptable[index] !== dist) {\n continue;\n }\n count++;\n let cindex = index % 3;\n let windex = (index - cindex) / 3;\n index_to_evenpermutation12(windex, perm);\n for (let m = 0; m < N_MOVES; m++) {\n let move_m = phase1_permtable_m[m],\n move_minv = phase1_permtable_minv[m];\n let move_w = phase1_permtable_w[m],\n move_winv = phase1_permtable_winv[m];\n {\n // clockwise move\n let new_cindex = (cindex + phase1_c_update[m]) % 3;\n for (let i = 0; i < 12; i++) {\n new_perm[i] = move_minv[perm[move_w[i]]];\n }\n let new_windex = evenpermutation12_to_index(new_perm);\n let new_index = new_cindex + 3 * new_windex;\n if (ptable[new_index] === -1) {\n changed = true;\n ptable[new_index] = dist + 1;\n }\n }\n {\n // anticlockwise move\n let new_cindex = (cindex + 3 - phase1_c_update[m]) % 3;\n for (let i = 0; i < 12; i++) {\n new_perm[i] = move_m[perm[move_winv[i]]];\n }\n let new_windex = evenpermutation12_to_index(new_perm);\n let new_index = new_cindex + 3 * new_windex;\n if (ptable[new_index] === -1) {\n changed = true;\n ptable[new_index] = dist + 1;\n }\n }\n }\n }\n console.log(`${count} nodes at depth ${dist}`);\n if (!changed) {\n break;\n }\n dist++;\n }\n return (tables.phase1p = ptable);\n}\n\nfunction generate_phase2_permutation_mtable() {\n if (tables.phase2pm) {\n return tables.phase2pm;\n }\n let mtable = Array(1440)\n .fill()\n .map(() => Array(N_MOVES_PHASE2));\n for (let ep = 0; ep < 360; ep++) {\n let perm = index_to_evenpermutation(ep, 6);\n // fill in the \"opposite\" values\n for (let i = 0; i < 6; i++) {\n perm[i + 6] = perm[i] + 6;\n }\n for (let m = 0; m < N_MOVES_PHASE2; m++) {\n let new_perm = compose(perm, moves[m].mp);\n let new_ep = evenpermutation_to_index(\n new_perm.slice(0, 6).map((x) => x % 6),\n );\n for (let new_cloc = 0; new_cloc < 4; new_cloc++) {\n let cloc = moves[m].cp[new_cloc];\n mtable[ep + 360 * cloc][m] = new_ep + 360 * new_cloc;\n }\n }\n }\n return (tables.phase2pm = mtable);\n}\n\nfunction generate_phase2_orientation_mtable() {\n if (tables.phase2om) {\n return tables.phase2om;\n }\n let mtable = Array(32 * 81)\n .fill()\n .map(() => Array(N_MOVES_PHASE2));\n for (let eo = 0; eo < 32; eo++) {\n let eo_array = [0, 1, 2, 3, 4].map((i) => (eo >> i) & 1);\n eo_array[5] = eo_array.reduce((x, y) => x ^ y);\n let perm = [];\n for (let i = 0; i < 6; i++) {\n perm[i] = i + 6 * eo_array[i];\n perm[i + 6] = i + 6 * (eo_array[i] ^ 1);\n }\n for (let co = 0; co < 81; co++) {\n let co_array = [0, 1, 2, 3].map((i) => Math.floor(co / 3 ** i) % 3);\n for (let m = 0; m < N_MOVES_PHASE2; m++) {\n let new_perm = compose(perm, moves[m].mp);\n let new_eo_array = new_perm.slice(0, 5).map((x) => +(x >= 6));\n let new_eo = 0;\n for (let i = 0; i < 5; i++) {\n new_eo += new_eo_array[i] << i;\n }\n let new_co_array = co_array.map((x, i) => (x + moves[m].co[i]) % 3);\n let new_co = 0;\n for (let i = 0; i < 4; i++) {\n new_co += new_co_array[i] * 3 ** i;\n }\n mtable[eo + 32 * co][m] = new_eo + 32 * new_co;\n }\n }\n }\n return (tables.phase2om = mtable);\n}\n\nfunction generate_phase2_permutation_ptable() {\n if (tables.phase2pp) {\n return tables.phase2pp;\n }\n return (tables.phase2pp = bfs(generate_phase2_permutation_mtable(), [0]));\n}\n\nfunction generate_phase2_orientation_ptable() {\n if (tables.phase2op) {\n return tables.phase2op;\n }\n return (tables.phase2op = bfs(generate_phase2_orientation_mtable(), [0]));\n}\n\nfunction bfs(mtable, goal_states) {\n let N = mtable.length;\n let nmoves = mtable[0].length;\n let ptable = Array(N).fill(-1);\n let queue = goal_states.slice(),\n new_queue = [];\n let depth = 0;\n while (queue.length > 0) {\n new_queue.length = 0;\n for (let state of queue) {\n if (ptable[state] !== -1) continue;\n ptable[state] = depth;\n for (let move_index = 0; move_index < nmoves; move_index++) {\n let new_state = mtable[state][move_index];\n while (new_state != state) {\n new_queue.push(new_state);\n new_state = mtable[new_state][move_index];\n }\n }\n }\n [queue, new_queue] = [new_queue, queue];\n depth += 1;\n }\n return ptable;\n}\n\nfunction* ida_solve_gen(indices, mtables, ptables, moves_left) {\n let ncoords = indices.length;\n let bound = 0;\n for (let i = 0; i < ncoords; i++)\n bound = Math.max(bound, ptables[i][indices[i]]);\n while (bound <= moves_left) {\n yield* ida_search_gen(indices, mtables, ptables, bound, -1);\n bound++;\n }\n}\n\nfunction* ida_search_gen(indices, mtables, ptables, bound, last) {\n let ncoords = indices.length;\n let nmoves = mtables[0][0].length;\n let heuristic = 0;\n for (let i = 0; i < ncoords; i++)\n heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n if (heuristic > bound) return;\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) return;\n for (let m = 0; m < nmoves; m++) {\n if (m === last) continue;\n if (m < last && moves_commute(m, last)) continue;\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++)\n new_indices[c] = mtables[c][indices[c]][m];\n let r = 1;\n while (indices.some((_, i) => indices[i] != new_indices[i])) {\n let subpath_gen = ida_search_gen(\n new_indices,\n mtables,\n ptables,\n bound - 1,\n m,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) break;\n yield [[m, r]].concat(subpath);\n }\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][new_indices[c]][m];\n }\n r++;\n }\n }\n}\n\nconst randomUintBelow = randomUIntBelowFactory();\nexport async function randomMasterTetraminxScrambleString() {\n return generate_scramble_sequence(await randomUintBelow, false);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
cachedMegaminxKPuzzleWithoutMO,
|
|
3
3
|
cachedSGSDataMegaminx,
|
|
4
4
|
sgsDataMegaminx
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-KJZNEDOV.js";
|
|
6
6
|
import "./chunk-27KJGD3S.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-F5WNHV7V.js";
|
|
8
8
|
import "./chunk-Y32HHZUY.js";
|
|
9
9
|
import "./chunk-EWRBHQFX.js";
|
|
10
10
|
import "./chunk-WO2AXYFE.js";
|
|
@@ -13,4 +13,4 @@ export {
|
|
|
13
13
|
cachedSGSDataMegaminx,
|
|
14
14
|
sgsDataMegaminx
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=megaminx.sgs.json-
|
|
16
|
+
//# sourceMappingURL=megaminx.sgs.json-3ZEDZMWF.js.map
|
|
File without changes
|
|
@@ -3,10 +3,11 @@ import {
|
|
|
3
3
|
cube3x3x3,
|
|
4
4
|
cubeAppearance,
|
|
5
5
|
customPGPuzzleLoader,
|
|
6
|
+
eventInfo,
|
|
6
7
|
getFaceletAppearance,
|
|
7
8
|
puzzles,
|
|
8
9
|
wcaEventInfo
|
|
9
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-LMZIKLXW.js";
|
|
10
11
|
import {
|
|
11
12
|
experimental3x3x3KPuzzle
|
|
12
13
|
} from "../chunk-Y32HHZUY.js";
|
|
@@ -15,6 +16,7 @@ import "../chunk-WO2AXYFE.js";
|
|
|
15
16
|
export {
|
|
16
17
|
cube2x2x2,
|
|
17
18
|
cube3x3x3,
|
|
19
|
+
eventInfo,
|
|
18
20
|
experimental3x3x3KPuzzle,
|
|
19
21
|
cubeAppearance as experimentalCubeAppearance,
|
|
20
22
|
customPGPuzzleLoader as experimentalCustomPGPuzzleLoader,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sgsDataPyraminx,
|
|
3
3
|
sgsDataPyraminxFixedOrientation
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UNROETIO.js";
|
|
5
5
|
import "./chunk-27KJGD3S.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-LMZIKLXW.js";
|
|
7
7
|
import "./chunk-Y32HHZUY.js";
|
|
8
8
|
import "./chunk-EWRBHQFX.js";
|
|
9
9
|
import "./chunk-WO2AXYFE.js";
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
sgsDataPyraminx,
|
|
12
12
|
sgsDataPyraminxFixedOrientation
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=pyraminx.sgs.json-
|
|
14
|
+
//# sourceMappingURL=pyraminx.sgs.json-5IA2F65U.js.map
|
|
File without changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
randomScrambleForEvent
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-5GJ5C7NZ.js";
|
|
4
|
+
import "../chunk-BEXHMXCT.js";
|
|
5
|
+
import "../chunk-IVQ4ITE2.js";
|
|
6
|
+
import "../chunk-NGA3FW7U.js";
|
|
7
|
+
import "../chunk-RENZB7QN.js";
|
|
8
|
+
import "../chunk-LMZIKLXW.js";
|
|
7
9
|
import "../chunk-Y32HHZUY.js";
|
|
8
10
|
import "../chunk-EWRBHQFX.js";
|
|
9
11
|
import "../chunk-WO2AXYFE.js";
|
package/dist/esm/search/index.js
CHANGED
|
@@ -6,12 +6,14 @@ import {
|
|
|
6
6
|
solveMegaminx,
|
|
7
7
|
solvePyraminx,
|
|
8
8
|
solveSkewb
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-5GJ5C7NZ.js";
|
|
10
|
+
import "../chunk-BEXHMXCT.js";
|
|
11
|
+
import "../chunk-IVQ4ITE2.js";
|
|
10
12
|
import {
|
|
11
13
|
random333State
|
|
12
|
-
} from "../chunk-
|
|
13
|
-
import "../chunk-
|
|
14
|
-
import "../chunk-
|
|
14
|
+
} from "../chunk-NGA3FW7U.js";
|
|
15
|
+
import "../chunk-RENZB7QN.js";
|
|
16
|
+
import "../chunk-LMZIKLXW.js";
|
|
15
17
|
import "../chunk-Y32HHZUY.js";
|
|
16
18
|
import "../chunk-EWRBHQFX.js";
|
|
17
19
|
import "../chunk-WO2AXYFE.js";
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
expose
|
|
3
|
+
} from "./chunk-WDJDRVZZ.js";
|
|
1
4
|
import {
|
|
2
5
|
cachedMegaminxKPuzzleWithoutMO
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KJZNEDOV.js";
|
|
4
7
|
import {
|
|
5
8
|
sgsDataPyraminxFixedOrientation
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UNROETIO.js";
|
|
7
10
|
import {
|
|
8
11
|
sgsDataSkewbFixedCorner,
|
|
9
12
|
skewbKPuzzleWithoutMOCached
|
|
10
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-QEDC2QTN.js";
|
|
11
14
|
import "./chunk-27KJGD3S.js";
|
|
12
|
-
import {
|
|
13
|
-
expose
|
|
14
|
-
} from "./chunk-BJIOROQC.js";
|
|
15
15
|
import {
|
|
16
16
|
countMoves
|
|
17
17
|
} from "./chunk-U2TSTTDG.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-F5WNHV7V.js";
|
|
19
|
+
import "./chunk-IVQ4ITE2.js";
|
|
19
20
|
import {
|
|
20
21
|
addOrientationSuffix,
|
|
21
22
|
initialize333,
|
|
@@ -25,15 +26,15 @@ import {
|
|
|
25
26
|
random333Scramble,
|
|
26
27
|
setIsInsideWorker,
|
|
27
28
|
solve333
|
|
28
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-NGA3FW7U.js";
|
|
29
30
|
import {
|
|
30
31
|
randomChoiceFactory,
|
|
31
32
|
randomPermute,
|
|
32
33
|
randomUIntBelowFactory
|
|
33
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-RENZB7QN.js";
|
|
34
35
|
import {
|
|
35
36
|
puzzles
|
|
36
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-LMZIKLXW.js";
|
|
37
38
|
import {
|
|
38
39
|
KState
|
|
39
40
|
} from "./chunk-Y32HHZUY.js";
|
|
@@ -164,7 +165,7 @@ var TREMBLE_DEPTH = 3;
|
|
|
164
165
|
var cachedTrembleSolver = null;
|
|
165
166
|
async function getCachedTrembleSolver() {
|
|
166
167
|
return cachedTrembleSolver || (cachedTrembleSolver = (async () => {
|
|
167
|
-
const sgsCachedData = await (await import("./2x2x2.sgs.json-
|
|
168
|
+
const sgsCachedData = await (await import("./2x2x2.sgs.json-MMXKAIKZ.js")).cachedData222();
|
|
168
169
|
return new TrembleSolver(await puzzles["2x2x2"].kpuzzle(), sgsCachedData, "URFLBD".split(""));
|
|
169
170
|
})());
|
|
170
171
|
}
|
|
@@ -211,7 +212,7 @@ var randomSuffixes = [
|
|
|
211
212
|
];
|
|
212
213
|
var cachedImport = null;
|
|
213
214
|
function dynamicScramble444() {
|
|
214
|
-
return cachedImport ?? (cachedImport = import("./
|
|
215
|
+
return cachedImport ?? (cachedImport = import("./444-solver-PV2GUWP2.js"));
|
|
215
216
|
}
|
|
216
217
|
async function initialize444() {
|
|
217
218
|
return (await dynamicScramble444()).initialize();
|
|
@@ -298,46 +299,25 @@ async function oriented555RandomMoves() {
|
|
|
298
299
|
}
|
|
299
300
|
|
|
300
301
|
// src/cubing/search/inside/solve/puzzles/fto.ts
|
|
301
|
-
|
|
302
|
-
var cachedTrembleSolver2 = null;
|
|
303
|
-
async function getCachedTrembleSolver2() {
|
|
304
|
-
return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
|
|
305
|
-
const sgs = await import("./fto.sgs.json-USV4WNQJ.js");
|
|
306
|
-
const json = await sgs.sgsDataFTO();
|
|
307
|
-
return new TrembleSolver(await puzzles["fto"].kpuzzle(), json, [
|
|
308
|
-
"U",
|
|
309
|
-
"R",
|
|
310
|
-
"F",
|
|
311
|
-
"L",
|
|
312
|
-
"D",
|
|
313
|
-
"B",
|
|
314
|
-
"BR",
|
|
315
|
-
"BL"
|
|
316
|
-
]);
|
|
317
|
-
})());
|
|
318
|
-
}
|
|
319
|
-
async function solveFTO(state) {
|
|
302
|
+
async function randomFTOScramble() {
|
|
320
303
|
mustBeInsideWorker();
|
|
321
|
-
const
|
|
322
|
-
|
|
323
|
-
return alg;
|
|
304
|
+
const { randomFTOScrambleString } = await import("./fto.dynamic-UHH65HEC.js");
|
|
305
|
+
return new Alg(await randomFTOScrambleString());
|
|
324
306
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
const sgs = await import("./fto.sgs.json-USV4WNQJ.js");
|
|
332
|
-
return solveFTO(await randomStateFromSGS(await puzzles["fto"].kpuzzle(), await sgs.sgsDataFTO()));
|
|
307
|
+
|
|
308
|
+
// src/cubing/search/inside/solve/puzzles/master_tetraminx.ts
|
|
309
|
+
async function randomMasterTetraminxScramble() {
|
|
310
|
+
const { randomMasterTetraminxScrambleString } = await import("./master_tetraminx-solver-KBQJGW4A.js");
|
|
311
|
+
mustBeInsideWorker();
|
|
312
|
+
return new Alg(await randomMasterTetraminxScrambleString());
|
|
333
313
|
}
|
|
334
314
|
|
|
335
315
|
// src/cubing/search/inside/solve/puzzles/megaminx.ts
|
|
336
|
-
var
|
|
337
|
-
var
|
|
338
|
-
async function
|
|
339
|
-
return
|
|
340
|
-
const sgs = await import("./megaminx.sgs.json-
|
|
316
|
+
var TREMBLE_DEPTH2 = 2;
|
|
317
|
+
var cachedTrembleSolver2 = null;
|
|
318
|
+
async function getCachedTrembleSolver2() {
|
|
319
|
+
return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
|
|
320
|
+
const sgs = await import("./megaminx.sgs.json-3ZEDZMWF.js");
|
|
341
321
|
const json = await sgs.cachedSGSDataMegaminx();
|
|
342
322
|
return new TrembleSolver(await cachedMegaminxKPuzzleWithoutMO(), json, [
|
|
343
323
|
"U",
|
|
@@ -357,31 +337,32 @@ async function getCachedTrembleSolver3() {
|
|
|
357
337
|
}
|
|
358
338
|
async function solveMegaminx(state) {
|
|
359
339
|
mustBeInsideWorker();
|
|
360
|
-
const trembleSolver = await
|
|
340
|
+
const trembleSolver = await getCachedTrembleSolver2();
|
|
361
341
|
const stateDataWithoutMO = JSON.parse(JSON.stringify(state.stateData));
|
|
362
342
|
stateDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);
|
|
363
343
|
const stateWithoutMO = new KState(await cachedMegaminxKPuzzleWithoutMO(), stateDataWithoutMO);
|
|
364
|
-
const alg = await trembleSolver.solve(stateWithoutMO,
|
|
344
|
+
const alg = await trembleSolver.solve(stateWithoutMO, TREMBLE_DEPTH2, () => 5);
|
|
365
345
|
return alg;
|
|
366
346
|
}
|
|
367
347
|
|
|
368
348
|
// src/cubing/search/inside/solve/puzzles/pyraminx.ts
|
|
369
|
-
var
|
|
370
|
-
var
|
|
371
|
-
async function
|
|
372
|
-
return
|
|
373
|
-
const sgs = await import("./pyraminx.sgs.json-
|
|
349
|
+
var TREMBLE_DEPTH3 = 3;
|
|
350
|
+
var cachedTrembleSolver3 = null;
|
|
351
|
+
async function getCachedTrembleSolver3() {
|
|
352
|
+
return cachedTrembleSolver3 || (cachedTrembleSolver3 = (async () => {
|
|
353
|
+
const sgs = await import("./pyraminx.sgs.json-5IA2F65U.js");
|
|
374
354
|
const json = await sgs.sgsDataPyraminx();
|
|
375
355
|
return new TrembleSolver(await puzzles.pyraminx.kpuzzle(), json, "RLUB".split(""));
|
|
376
356
|
})());
|
|
377
357
|
}
|
|
378
358
|
async function solvePyraminx(state) {
|
|
379
359
|
mustBeInsideWorker();
|
|
380
|
-
const trembleSolver = await
|
|
381
|
-
const alg = await trembleSolver.solve(state,
|
|
360
|
+
const trembleSolver = await getCachedTrembleSolver3();
|
|
361
|
+
const alg = await trembleSolver.solve(state, TREMBLE_DEPTH3, () => 3);
|
|
382
362
|
return alg;
|
|
383
363
|
}
|
|
384
364
|
async function randomPyraminxStateFixedOrientation() {
|
|
365
|
+
mustBeInsideWorker();
|
|
385
366
|
return randomStateFromSGS(await puzzles.pyraminx.kpuzzle(), await sgsDataPyraminxFixedOrientation());
|
|
386
367
|
}
|
|
387
368
|
async function randomPyraminxScrambleFixedOrientation() {
|
|
@@ -389,11 +370,11 @@ async function randomPyraminxScrambleFixedOrientation() {
|
|
|
389
370
|
}
|
|
390
371
|
|
|
391
372
|
// src/cubing/search/inside/solve/puzzles/skewb.ts
|
|
392
|
-
var
|
|
393
|
-
var
|
|
394
|
-
async function
|
|
395
|
-
return
|
|
396
|
-
const sgs = await import("./skewb.sgs.json-
|
|
373
|
+
var TREMBLE_DEPTH4 = 3;
|
|
374
|
+
var cachedTrembleSolver4 = null;
|
|
375
|
+
async function getCachedTrembleSolver4() {
|
|
376
|
+
return cachedTrembleSolver4 || (cachedTrembleSolver4 = (async () => {
|
|
377
|
+
const sgs = await import("./skewb.sgs.json-6NDFH63U.js");
|
|
397
378
|
const json = await sgs.sgsDataSkewb();
|
|
398
379
|
return new TrembleSolver(await sgs.skewbKPuzzleWithoutMOCached(), json, "RLUB".split(""));
|
|
399
380
|
})());
|
|
@@ -409,8 +390,8 @@ function resetCenterOrientation(state) {
|
|
|
409
390
|
}
|
|
410
391
|
async function solveSkewb(state) {
|
|
411
392
|
mustBeInsideWorker();
|
|
412
|
-
const trembleSolver = await
|
|
413
|
-
const alg = await trembleSolver.solve(resetCenterOrientation(state),
|
|
393
|
+
const trembleSolver = await getCachedTrembleSolver4();
|
|
394
|
+
const alg = await trembleSolver.solve(resetCenterOrientation(state), TREMBLE_DEPTH4, (quantumMove) => quantumMove.family === "y" ? 4 : 3);
|
|
414
395
|
return alg;
|
|
415
396
|
}
|
|
416
397
|
async function randomSkewbFixedCornerState() {
|
|
@@ -423,7 +404,7 @@ async function randomSkewbFixedCornerScramble() {
|
|
|
423
404
|
// src/cubing/search/inside/solve/puzzles/sq1.ts
|
|
424
405
|
var cachedImport2 = null;
|
|
425
406
|
function dynamicScrambleSq1() {
|
|
426
|
-
return cachedImport2 ?? (cachedImport2 = import("./
|
|
407
|
+
return cachedImport2 ?? (cachedImport2 = import("./sq1-solver-P3IWWET7.js"));
|
|
427
408
|
}
|
|
428
409
|
async function getRandomSquare1Scramble() {
|
|
429
410
|
return Alg.fromString(await (await dynamicScrambleSq1()).getRandomSquare1ScrambleString());
|
|
@@ -499,6 +480,8 @@ var insideAPI = {
|
|
|
499
480
|
return measurePerf("getRandomSquare1Scramble", getRandomSquare1Scramble);
|
|
500
481
|
case "fto":
|
|
501
482
|
return measurePerf("randomFTOScramble", randomFTOScramble);
|
|
483
|
+
case "master_tetraminx":
|
|
484
|
+
return measurePerf("randomMasterTetraminxScramble", randomMasterTetraminxScramble);
|
|
502
485
|
default:
|
|
503
486
|
throw new Error(`unsupported event: ${eventID}`);
|
|
504
487
|
}
|
|
@@ -531,6 +514,6 @@ var insideAPI = {
|
|
|
531
514
|
}
|
|
532
515
|
};
|
|
533
516
|
|
|
534
|
-
// src/cubing/search/inside/entry.js
|
|
517
|
+
// src/cubing/search/inside/search-worker-js-entry.js
|
|
535
518
|
expose(insideAPI);
|
|
536
|
-
//# sourceMappingURL=entry-
|
|
519
|
+
//# sourceMappingURL=search-worker-js-entry-AXEFSQVG.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/search/inside/solve/tremble.ts", "../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../src/cubing/search/inside/solve/puzzles/big-cubes.ts", "../../src/cubing/search/inside/solve/puzzles/5x5x5.ts", "../../src/cubing/search/inside/solve/puzzles/fto.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/skewb.ts", "../../src/cubing/search/inside/solve/puzzles/sq1.ts", "../../src/cubing/search/inside/api.ts", "../../src/cubing/search/inside/search-worker-js-entry.js"],
|
|
4
|
+
"sourcesContent": ["import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../alg\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle\";\nimport type { KState } from \"../../../kpuzzle/KState\";\nimport { experimentalCountMoves } from \"../../../notation\";\nimport { randomChoiceFactory } from \"../../../vendor/random-uint-below\";\nimport type { SGSAction, 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 moveNames.forEach(function (moveName) {\n const rootMove = new Move(moveName);\n if (rootMove.amount !== 1) {\n throw new Error(\n \"SGS cannot handle def moves with an amount other than 1 yet.\",\n );\n }\n let transformation = kpuzzle.identityTransformation();\n // eslint-disable-next-line no-constant-condition\n for (let i = 1; true; 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 state: KState,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = state.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\n .concat(sgsAlg)\n .simplify({ collapseMoves: true, quantumMoveOrder });\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 KState\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].orientation[idx]}`;\n }\n // console.log(key, step.lookup);\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumUnits() >= bestLenSofar) {\n return null;\n }\n 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].orientation[idx] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport async function randomStateFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): Promise<KState> {\n const randomChoice = await randomChoiceFactory<SGSAction>(); // TODO: make this sync by putting the factory into a TLA\n\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.toKState();\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPuzzle } from \"../../../../kpuzzle\";\nimport { KState } from \"../../../../kpuzzle\";\nimport { puzzles } from \"../../../../puzzles\";\nimport {\n randomPermute,\n randomUIntBelowFactory,\n} from \"../../../../vendor/random-uint-below\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\n\n// Empirical ly determined depth:\n// - \u224811 moves on average (as opposed to >13 moves for depth 2),\n// - in close to 40ms(on a MacBook Pro).\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgsCachedData: SGSCachedData = await (\n await import(\"./2x2x2.sgs.json\")\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(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 4); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\n// TODO: factor out and test.\nasync function mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n state: KState,\n options?: { orientationSum?: number },\n): Promise<void> {\n const randomUIntBelow = await randomUIntBelowFactory();\n await randomPermute(state.stateData[orbitName].pieces);\n\n const orbitDef = kpuzzle.definition.orbits[orbitName];\n const ori = state.stateData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDef.numPieces; i++) {\n const o = randomUIntBelow(orbitDef.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) % orbitDef.numOrientations) +\n orbitDef.numOrientations) %\n orbitDef.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222State(): Promise<KState> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const stateCopy: KState = new KState(\n kpuzzle,\n JSON.parse(JSON.stringify(kpuzzle.startState().stateData)),\n ); // TODO\n await mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", stateCopy, {\n orientationSum: 0,\n });\n return stateCopy;\n}\n\nexport async function random222Scramble(): Promise<Alg> {\n return await solve222(await random222State());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nlet cachedImport: Promise<\n typeof import(\"../../../../vendor/cstimer/src/js/scramble/444-solver\")\n> | null = null;\nfunction dynamicScramble444(): Promise<\n typeof import(\"../../../../vendor/cstimer/src/js/scramble/444-solver\")\n> {\n return (cachedImport ??= import(\n \"../../../../vendor/cstimer/src/js/scramble/444-solver\"\n ));\n}\n\nexport async function initialize444(): Promise<void> {\n return (await dynamicScramble444()).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n return (await dynamicScramble444()).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../../alg\";\nimport {\n randomChoiceFactory,\n randomUIntBelowFactory,\n} from \"../../../../vendor/random-uint-below\";\n\nfunction numMoves(n: number): number {\n switch (n) {\n case 5:\n return 60;\n case 6:\n return 80;\n default:\n return 100;\n }\n}\n\nconst axesFaces = [\n [\"U\", \"D\"],\n [\"L\", \"R\"],\n [\"F\", \"B\"],\n];\nconst axesMovesCache: Map<number, QuantumMove[][]> = new Map();\nfunction cachedAxesMoves(n: number): QuantumMove[][] {\n const existing = axesMovesCache.get(n);\n if (existing) {\n return existing;\n }\n const axesMoves = [];\n for (const faces of axesFaces) {\n const axisMoveFamilies: QuantumMove[] = [];\n axesMoves.push(axisMoveFamilies);\n\n for (const face of faces) {\n axisMoveFamilies.push(new QuantumMove(face));\n if (n > 3) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`));\n }\n for (let i = 3; i <= n / 2; i++) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`, i));\n }\n }\n }\n axesMovesCache.set(n, axesMoves);\n return axesMoves;\n}\n\n// TODO: Document this algorithm and compare to TNoodle.\nexport async function bigCubeRandomMoves(n: number): Promise<Alg> {\n const randomUintBelow = await randomUIntBelowFactory();\n const randomChoice = await randomChoiceFactory<QuantumMove>();\n const randomNumChoice = randomChoice as any as (arr: Array<number>) => number; // TODO: Avoid needing multiple instantiations or recasting.\n\n const axesMoves = cachedAxesMoves(n);\n\n const cachedNumMoves = numMoves(n);\n const algBuilder = new AlgBuilder();\n let currentAxisIdx = 0;\n const currentAxisQuantumMoves = new Set();\n while (algBuilder.experimentalNumUnits() < cachedNumMoves) {\n const newAxisIdx = randomUintBelow(3);\n if (newAxisIdx !== currentAxisIdx) {\n currentAxisQuantumMoves.clear();\n }\n currentAxisIdx = newAxisIdx;\n\n const quantumMove = randomChoice(axesMoves[currentAxisIdx]);\n const quantumMoveStr = quantumMove.toString();\n if (currentAxisQuantumMoves.has(quantumMoveStr)) {\n // Skip duplicates and resample with replacement.\n continue;\n }\n currentAxisQuantumMoves.add(quantumMoveStr);\n algBuilder.push(new Move(quantumMove, randomNumChoice([1, 2, -1])));\n }\n\n return algBuilder.toAlg();\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\nimport { bigCubeRandomMoves } from \"./big-cubes\";\n\nconst randomSuffixes = [\n [null, \"3Rw\", \"3Rw2\", \"3Rw'\", \"3Fw\", \"3Fw'\"],\n [null, \"3Dw\", \"3Dw2\", \"3Dw'\"],\n];\n\nexport async function oriented555RandomMoves(): Promise<Alg> {\n return addOrientationSuffix(await bigCubeRandomMoves(5), randomSuffixes);\n}\n", "import { Alg } from \"../../../../alg\";\nimport type { KState } from \"../../../../kpuzzle/KState\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgs = await import(\"./fto.dynamic\");\n const json: SGSCachedData = await sgs.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(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n state,\n TREMBLE_DEPTH,\n () => 3, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomFTOScramble(): Promise<Alg> {\n mustBeInsideWorker();\n const { randomFTOScrambleString } = await import(\"./fto.dynamic\");\n return new Alg(await randomFTOScrambleString());\n}\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n const { randomMasterTetraminxScrambleString } = await import(\n \"../../../../vendor/xyzzy/master_tetraminx-solver.js\"\n );\n mustBeInsideWorker();\n return new Alg(await randomMasterTetraminxScrambleString());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KStateData } from \"../../../../kpuzzle\";\nimport { KState } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { cachedMegaminxKPuzzleWithoutMO } from \"./megaminx.sgs.json\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgs = await import(\"./megaminx.sgs.json\");\n const json: SGSCachedData = await sgs.cachedSGSDataMegaminx();\n return new TrembleSolver(await cachedMegaminxKPuzzleWithoutMO(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"BR\",\n \"BL\",\n \"FR\",\n \"FL\",\n \"DR\",\n \"DL\",\n \"B\",\n \"D\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const stateDataWithoutMO: KStateData = JSON.parse(\n JSON.stringify(state.stateData),\n );\n stateDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);\n const stateWithoutMO = new KState(\n await cachedMegaminxKPuzzleWithoutMO(),\n stateDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n stateWithoutMO,\n TREMBLE_DEPTH,\n () => 5, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KState } from \"../../../../kpuzzle/KState\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport { sgsDataPyraminxFixedOrientation } from \"./pyraminx.sgs.json\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgs = await import(\"./pyraminx.sgs.json\");\n const json: SGSCachedData = await sgs.sgsDataPyraminx();\n return new TrembleSolver(\n await puzzles.pyraminx.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(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxStateFixedOrientation(): Promise<KState> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await puzzles.pyraminx.kpuzzle(),\n await sgsDataPyraminxFixedOrientation(),\n );\n}\n\nexport async function randomPyraminxScrambleFixedOrientation(): Promise<Alg> {\n return solvePyraminx(await randomPyraminxStateFixedOrientation());\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KState } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport {\n sgsDataSkewbFixedCorner,\n skewbKPuzzleWithoutMOCached,\n} from \"./skewb.sgs.json\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgs = await import(\"./skewb.sgs.json\");\n const json: SGSCachedData = await sgs.sgsDataSkewb();\n return new TrembleSolver(\n await sgs.skewbKPuzzleWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nfunction resetCenterOrientation(state: KState): KState {\n return new KState(state.kpuzzle, {\n CORNERS: state.stateData.CORNERS,\n CENTERS: {\n pieces: state.stateData.CENTERS.pieces,\n orientation: new Array(6).fill(0),\n },\n });\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n resetCenterOrientation(state),\n TREMBLE_DEPTH,\n (quantumMove: QuantumMove) => (quantumMove.family === \"y\" ? 4 : 3), // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomSkewbFixedCornerState(): Promise<KState> {\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await skewbKPuzzleWithoutMOCached(),\n await sgsDataSkewbFixedCorner(),\n );\n}\n\nexport async function randomSkewbFixedCornerScramble(): Promise<Alg> {\n return solveSkewb(await randomSkewbFixedCornerState());\n}\n", "import { Alg } from \"../../../../alg\";\n\nlet cachedImport: Promise<\n typeof import(\"../../../../vendor/sq12phase/sq1-solver\")\n> | null = null;\nfunction dynamicScrambleSq1(): Promise<\n typeof import(\"../../../../vendor/sq12phase/sq1-solver\")\n> {\n return (cachedImport ??= import(\"../../../../vendor/sq12phase/sq1-solver\"));\n}\n\nexport async function getRandomSquare1Scramble(): Promise<Alg> {\n return Alg.fromString(\n await (await dynamicScrambleSq1()).getRandomSquare1ScrambleString(),\n );\n}\n", "import type { Alg } from \"../../alg\";\nimport type { KStateData } from \"../../kpuzzle\";\nimport { KState } from \"../../kpuzzle\";\nimport { puzzles } from \"../../puzzles\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport {\n preInitialize222,\n random222Scramble,\n solve222,\n} from \"./solve/puzzles/2x2x2\";\nimport {\n initialize333,\n random333FewestMovesScramble,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4\";\nimport { oriented555RandomMoves } from \"./solve/puzzles/5x5x5\";\nimport { bigCubeRandomMoves } from \"./solve/puzzles/big-cubes\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto\";\nimport { randomMasterTetraminxScramble } from \"./solve/puzzles/master_tetraminx\";\nimport { solveMegaminx } from \"./solve/puzzles/megaminx\";\nimport {\n randomPyraminxScrambleFixedOrientation,\n solvePyraminx,\n} from \"./solve/puzzles/pyraminx\";\nimport {\n randomSkewbFixedCornerScramble,\n solveSkewb,\n} from \"./solve/puzzles/skewb\";\nimport { getRandomSquare1Scramble } from \"./solve/puzzles/sq1\";\n\nsetIsInsideWorker(true);\n\nlet DEBUG_MEASURE_PERF = true;\nexport function setDebugMeasurePerf(newDebugMeasurePerf: boolean): void {\n DEBUG_MEASURE_PERF = newDebugMeasurePerf;\n}\n\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\n\nasync function measurePerf<T>(\n name: string,\n f: () => T | Promise<T>,\n): Promise<T> {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n\n const start = now();\n const result = f();\n if ((result as any)?.then) {\n await result;\n }\n const end = now();\n console.warn(`${name}: ${Math.round(end - start)}ms`);\n return result;\n}\n\nexport const insideAPI = {\n initialize: async (eventID: string) => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize444);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"random222Scramble\", random222Scramble);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble);\n case \"333fm\":\n return measurePerf(\n \"random333FewestMovesScramble\",\n random333FewestMovesScramble,\n );\n case \"333bf\":\n case \"333mb\":\n return measurePerf(\n \"random333OrientedScramble\",\n random333OrientedScramble,\n );\n case \"444\":\n return measurePerf(\"random444Scramble\", random444Scramble);\n case \"444bf\":\n return measurePerf(\n \"random444OrientedScramble\",\n random444OrientedScramble,\n );\n case \"555\":\n return measurePerf(\n \"bigCubeScramble(5)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 5),\n );\n case \"555bf\":\n return measurePerf(\"oriented555RandomMoves\", oriented555RandomMoves);\n case \"666\":\n return measurePerf(\n \"bigCubeScramble(6)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 6),\n );\n case \"777\":\n return measurePerf(\n \"bigCubeScramble(7)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 7),\n );\n case \"skewb\":\n return measurePerf(\n \"randomSkewbFixedCornerScramble\",\n randomSkewbFixedCornerScramble,\n );\n case \"pyram\":\n return measurePerf(\n \"randomPyraminxScrambleFixedOrientation\",\n randomPyraminxScrambleFixedOrientation,\n );\n case \"sq1\":\n return measurePerf(\n \"getRandomSquare1Scramble\",\n getRandomSquare1Scramble,\n );\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble);\n case \"master_tetraminx\":\n return measurePerf(\n \"randomMasterTetraminxScramble\",\n randomMasterTetraminxScramble,\n );\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n solve333ToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"3x3x3\"].kpuzzle(), stateData);\n return (await solve333(state)).toString();\n },\n\n solve222ToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"2x2x2\"].kpuzzle(), stateData);\n return (await solve222(state)).toString();\n },\n\n solveSkewbToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"skewb\"].kpuzzle(), stateData);\n return (await solveSkewb(state)).toString();\n },\n\n solvePyraminxToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"pyraminx\"].kpuzzle(), stateData);\n return (await solvePyraminx(state)).toString();\n },\n\n solveMegaminxToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"megaminx\"].kpuzzle(), stateData);\n return (await solveMegaminx(state)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n};\n\nexport type WorkerInsideAPI = typeof insideAPI;\n", "import { expose } from \"../../vendor/comlink-everywhere/inside\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
nodeEndpointPort
|
|
3
|
+
} from "./chunk-WDJDRVZZ.js";
|
|
4
|
+
import {
|
|
5
|
+
exposeAPI
|
|
6
|
+
} from "./chunk-BEXHMXCT.js";
|
|
7
|
+
import "./chunk-IVQ4ITE2.js";
|
|
8
|
+
import "./chunk-WO2AXYFE.js";
|
|
9
|
+
|
|
10
|
+
// src/cubing/search/inside/search-worker-ts-entry.ts
|
|
11
|
+
if (exposeAPI.expose) {
|
|
12
|
+
(async () => {
|
|
13
|
+
await import("./search-worker-js-entry-AXEFSQVG.js");
|
|
14
|
+
const messagePort = globalThis.postMessage ? globalThis : await nodeEndpointPort();
|
|
15
|
+
messagePort.postMessage("comlink-exposed");
|
|
16
|
+
})();
|
|
17
|
+
}
|
|
18
|
+
var WORKER_ENTRY_FILE_URL = import.meta.url;
|
|
19
|
+
export {
|
|
20
|
+
WORKER_ENTRY_FILE_URL
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=search-worker-ts-entry-OOL7WATY.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/search/inside/search-worker-ts-entry.ts"],
|
|
4
|
+
"sourcesContent": ["import { nodeEndpointPort } from \"../../vendor/comlink-everywhere/inside/index\";\nimport { exposeAPI } from \"./worker-guard\";\n\nif (exposeAPI.expose) {\n (async () => {\n await import(\"./search-worker-js-entry.js\");\n\n // // Workaround for `node`\n const messagePort = (globalThis as any).postMessage\n ? globalThis\n : await nodeEndpointPort();\n messagePort.postMessage(\"comlink-exposed\");\n })();\n}\n\nexport const WORKER_ENTRY_FILE_URL = import.meta.url;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAGA,IAAI,UAAU,QAAQ;AACpB,EAAC,aAAY;AACX,UAAM,OAAO;AAGb,UAAM,cAAe,WAAmB,cACpC,aACA,MAAM;AACV,gBAAY,YAAY;AAAA;AAAA;AAIrB,IAAM,wBAAwB,YAAY;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
sgsDataSkewb,
|
|
3
3
|
sgsDataSkewbFixedCorner,
|
|
4
4
|
skewbKPuzzleWithoutMOCached
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QEDC2QTN.js";
|
|
6
6
|
import "./chunk-27KJGD3S.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-F5WNHV7V.js";
|
|
8
8
|
import "./chunk-Y32HHZUY.js";
|
|
9
9
|
import "./chunk-EWRBHQFX.js";
|
|
10
10
|
import "./chunk-WO2AXYFE.js";
|
|
@@ -13,4 +13,4 @@ export {
|
|
|
13
13
|
sgsDataSkewbFixedCorner,
|
|
14
14
|
skewbKPuzzleWithoutMOCached
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=skewb.sgs.json-
|
|
16
|
+
//# sourceMappingURL=skewb.sgs.json-6NDFH63U.js.map
|
|
File without changes
|