cubing 0.34.6 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/alg/index.js +1 -1
- package/dist/esm/bluetooth/index.js +6 -6
- package/dist/esm/bluetooth/index.js.map +3 -3
- package/dist/esm/{chunk-XNFY5XVP.js → chunk-6SLFKBHE.js} +8 -12
- package/dist/esm/chunk-6SLFKBHE.js.map +7 -0
- package/dist/esm/{chunk-P7STLPTG.js → chunk-DR2VL2TJ.js} +3 -3
- package/dist/esm/{chunk-P7STLPTG.js.map → chunk-DR2VL2TJ.js.map} +0 -0
- package/dist/esm/{chunk-KJUHIZ2G.js → chunk-EV25IJFC.js} +2 -2
- package/dist/esm/{chunk-KJUHIZ2G.js.map → chunk-EV25IJFC.js.map} +1 -1
- package/dist/esm/{chunk-SXI3BVQT.js → chunk-IBO5KL3F.js} +4 -4
- package/dist/esm/chunk-IBO5KL3F.js.map +7 -0
- package/dist/esm/{chunk-P6GSDAYY.js → chunk-IN66QSRW.js} +2 -2
- package/dist/esm/{chunk-P6GSDAYY.js.map → chunk-IN66QSRW.js.map} +0 -0
- package/dist/esm/{chunk-JXIKYWF4.js → chunk-KHUSW5UE.js} +16 -16
- package/dist/esm/chunk-KHUSW5UE.js.map +7 -0
- package/dist/esm/{chunk-HBJNS3VF.js → chunk-KLI2E737.js} +2 -2
- package/dist/esm/{chunk-HBJNS3VF.js.map → chunk-KLI2E737.js.map} +0 -0
- package/dist/esm/{chunk-YUBK6NHL.js → chunk-NB7Q5BQU.js} +18 -17
- package/dist/esm/chunk-NB7Q5BQU.js.map +7 -0
- package/dist/esm/{chunk-WN53PIUG.js → chunk-UETKZMZ2.js} +6 -6
- package/dist/esm/{chunk-WN53PIUG.js.map → chunk-UETKZMZ2.js.map} +1 -1
- package/dist/esm/{chunk-STXBFKP7.js → chunk-UMKR43AG.js} +2 -2
- package/dist/esm/{chunk-STXBFKP7.js.map → chunk-UMKR43AG.js.map} +0 -0
- package/dist/esm/{chunk-RMIAXF22.js → chunk-VHWWAFLV.js} +42 -9
- package/dist/esm/chunk-VHWWAFLV.js.map +7 -0
- package/dist/esm/{chunk-ELZ5WICP.js → chunk-VZP3KFTU.js} +6 -6
- package/dist/esm/chunk-VZP3KFTU.js.map +7 -0
- package/dist/esm/{chunk-DFZ2CYSE.js → chunk-Z6WT2ASL.js} +4 -7
- package/dist/esm/{chunk-DFZ2CYSE.js.map → chunk-Z6WT2ASL.js.map} +2 -2
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +2 -2
- package/dist/esm/protocol/index.js +4 -4
- package/dist/esm/puzzle-geometry/index.js +1 -1
- package/dist/esm/puzzle-geometry/index.js.map +1 -1
- package/dist/esm/puzzles/index.js +4 -4
- package/dist/esm/{puzzles-dynamic-side-events-T2YVO2CD.js → puzzles-dynamic-side-events-D2VNVUXH.js} +62 -60
- package/dist/esm/puzzles-dynamic-side-events-D2VNVUXH.js.map +7 -0
- package/dist/esm/scramble/index.js +9 -9
- package/dist/esm/search/index.js +9 -9
- package/dist/esm/{search-dynamic-sgs-side-events-RBT77KLU.js → search-dynamic-sgs-side-events-6N5XFNFV.js} +6 -6
- package/dist/esm/{search-dynamic-sgs-side-events-RBT77KLU.js.map → search-dynamic-sgs-side-events-6N5XFNFV.js.map} +0 -0
- package/dist/esm/{search-dynamic-sgs-unofficial-XVCNTLBX.js → search-dynamic-sgs-unofficial-KUQPD44L.js} +7 -7
- package/dist/esm/{search-dynamic-sgs-unofficial-XVCNTLBX.js.map → search-dynamic-sgs-unofficial-KUQPD44L.js.map} +2 -2
- package/dist/esm/{search-dynamic-solve-3x3x3-QAWYKBYP.js → search-dynamic-solve-3x3x3-VY7R3CDP.js} +2 -2
- package/dist/esm/{search-dynamic-solve-3x3x3-QAWYKBYP.js.map → search-dynamic-solve-3x3x3-VY7R3CDP.js.map} +2 -2
- package/dist/esm/{search-dynamic-solve-4x4x4-6D3X6JPU.js → search-dynamic-solve-4x4x4-YFSKEFQT.js} +8 -8
- package/dist/esm/search-dynamic-solve-4x4x4-YFSKEFQT.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-fto-L5CX2BTQ.js → search-dynamic-solve-fto-JJ32OJVM.js} +2 -2
- package/dist/esm/{search-dynamic-solve-fto-L5CX2BTQ.js.map → search-dynamic-solve-fto-JJ32OJVM.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-kilominx-ACTR53H2.js → search-dynamic-solve-kilominx-5GTXKEAX.js} +3 -3
- package/dist/esm/search-dynamic-solve-kilominx-5GTXKEAX.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-master_tetraminx-4R5R7LC5.js → search-dynamic-solve-master_tetraminx-UF5FKJW6.js} +2 -2
- package/dist/esm/{search-dynamic-solve-master_tetraminx-4R5R7LC5.js.map → search-dynamic-solve-master_tetraminx-UF5FKJW6.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-sq1-CBPKRTVA.js → search-dynamic-solve-sq1-S6V3FTO2.js} +2 -2
- package/dist/esm/{search-dynamic-solve-sq1-CBPKRTVA.js.map → search-dynamic-solve-sq1-S6V3FTO2.js.map} +1 -1
- package/dist/esm/search-worker-inside-generated-string-QNTWOW3E.js +4110 -0
- package/dist/esm/search-worker-inside-generated-string-QNTWOW3E.js.map +7 -0
- package/dist/esm/search-worker-js-entry-EM5PNXKC.js +17 -0
- package/dist/esm/search-worker-js-entry-EM5PNXKC.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-JODGBUUR.js → search-worker-ts-entry-WJXJ5FQI.js} +4 -4
- package/dist/esm/search-worker-ts-entry-WJXJ5FQI.js.map +7 -0
- package/dist/esm/stream/index.js +1 -1
- package/dist/esm/twisty/index.js +10 -10
- package/dist/esm/twisty/index.js.map +2 -2
- package/dist/esm/{twisty-dynamic-3d-ANH7V4CU.js → twisty-dynamic-3d-26UAWO4J.js} +6 -6
- package/dist/esm/{twisty-dynamic-3d-ANH7V4CU.js.map → twisty-dynamic-3d-26UAWO4J.js.map} +1 -1
- package/dist/esm/{twsearch-T6KOUE6W.js → twsearch-H72D4ZDN.js} +6 -5
- package/dist/esm/twsearch-H72D4ZDN.js.map +7 -0
- package/dist/esm/twsearch-VUC3P72V-BNSTYRDR.js +3155 -0
- package/dist/esm/twsearch-VUC3P72V-BNSTYRDR.js.map +7 -0
- package/dist/types/{Alg-8b4e9255.d.ts → Alg-c6770822.d.ts} +6 -6
- package/dist/types/{KState-0da22515.d.ts → KState-fa1880c8.d.ts} +17 -17
- package/dist/types/{TwizzleLink-f790571d.d.ts → TwizzleLink-9873b9f1.d.ts} +82 -61
- package/dist/types/alg/index.d.ts +5 -5
- package/dist/types/bluetooth/index.d.ts +6 -6
- package/dist/types/{bluetooth-puzzle-62e2b423.d.ts → bluetooth-puzzle-1cb7db76.d.ts} +2 -2
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +1 -1
- package/dist/types/{outside-074a0f79.d.ts → outside-f29a27bc.d.ts} +2 -2
- package/dist/types/parseAlg-d2c83795.d.ts +9 -0
- package/dist/types/protocol/index.d.ts +3 -3
- package/dist/types/puzzle-geometry/index.d.ts +3 -3
- package/dist/types/puzzles/index.d.ts +5 -5
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +5 -5
- package/dist/types/twisty/index.d.ts +5 -5
- package/package.json +23 -23
- package/src/README.md +10 -0
- package/dist/esm/chunk-ELZ5WICP.js.map +0 -7
- package/dist/esm/chunk-JXIKYWF4.js.map +0 -7
- package/dist/esm/chunk-RMIAXF22.js.map +0 -7
- package/dist/esm/chunk-SXI3BVQT.js.map +0 -7
- package/dist/esm/chunk-XNFY5XVP.js.map +0 -7
- package/dist/esm/chunk-YUBK6NHL.js.map +0 -7
- package/dist/esm/puzzles-dynamic-side-events-T2YVO2CD.js.map +0 -7
- package/dist/esm/search-dynamic-solve-4x4x4-6D3X6JPU.js.map +0 -7
- package/dist/esm/search-dynamic-solve-kilominx-ACTR53H2.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-A5J72AEN.js +0 -4068
- package/dist/esm/search-worker-inside-generated-string-A5J72AEN.js.map +0 -7
- package/dist/esm/search-worker-js-entry-6JKK757U.js +0 -17
- package/dist/esm/search-worker-js-entry-6JKK757U.js.map +0 -7
- package/dist/esm/search-worker-ts-entry-JODGBUUR.js.map +0 -7
- package/dist/esm/twsearch-PTN3QM26-XSTDBYFP.js +0 -3163
- package/dist/esm/twsearch-PTN3QM26-XSTDBYFP.js.map +0 -7
- package/dist/esm/twsearch-T6KOUE6W.js.map +0 -7
- package/dist/types/parseAlg-2dd4194b.d.ts +0 -9
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/vendor/gpl/cs0x7f/cstimer/src/js/lib/mathlib.ts", "../../src/cubing/vendor/gpl/cs0x7f/cstimer/src/js/scramble/444-solver.ts"],
|
|
4
|
+
"sourcesContent": ["const Cnk: number[][] = [];\nconst fact = [1];\nfor (let i = 0; i < 32; ++i) {\n Cnk[i] = [];\n for (let j = 0; j < 32; ++j) {\n Cnk[i][j] = 0;\n }\n}\nfor (let i = 0; i < 32; ++i) {\n Cnk[i][0] = Cnk[i][i] = 1;\n fact[i + 1] = fact[i] * (i + 1);\n for (let j = 1; j < i; ++j) {\n Cnk[i][j] = Cnk[i - 1][j - 1] + Cnk[i - 1][j];\n }\n}\n\nfunction circle(arr: number[], ...moreArgs: number[]) {\n const length = moreArgs.length;\n const temp = arr[moreArgs[length - 1]];\n for (let i = length; i > 0; i--) {\n arr[moreArgs[i]] = arr[moreArgs[i - 1]];\n }\n arr[moreArgs[0]] = temp;\n return circle;\n}\n\nfunction set8Perm(arr: number[], idx: number, n?: number, even?: number) {\n n = (n || 8) - 1;\n let val = 0x76543210;\n let prt = 0;\n even ??= 0;\n if (even < 0) {\n idx <<= 1;\n }\n for (let i = 0; i < n; ++i) {\n const p = fact[n - i];\n let v = ~~(idx / p);\n prt ^= v;\n idx %= p;\n v <<= 2;\n arr[i] = (val >> v) & 7;\n const m = (1 << v) - 1;\n val = (val & m) + ((val >> 4) & ~m);\n }\n if (even < 0 && (prt & 1) !== 0) {\n arr[n] = arr[n - 1];\n arr[n - 1] = val & 7;\n } else {\n arr[n] = val & 7;\n }\n return arr;\n}\n\nexport { Cnk, set8Perm, circle };\n", "// @ts-nocheck\n\nimport { Alg } from \"../../../../../../../alg\";\nimport { random333Scramble as getRandomScramble333 } from \"../../../../../../../search/inside/solve/puzzles/3x3x3\";\nimport { circle, Cnk, set8Perm } from \"../lib/mathlib\";\nimport { randomUIntBelow } from \"random-uint-below\";\nimport { mustBeInsideWorker } from \"../../../../../../../search/inside/inside-worker\";\n\nfunction createArray(length1: number, length2?: number) {\n const result = new Array<number[]>(length1);\n if (length2 !== undefined) {\n for (let i = 0; i < length1; i++) {\n result[i] = new Array(length2);\n }\n }\n return result;\n}\n\nlet _: any;\nconst seedTable: Record<number, any> = {};\nconst CM$ = {};\nconst Q$Object = 0;\nconst Q$Serializable = 30;\nconst Q$Center1 = 21;\nconst Q$CornerCube = 22;\nconst Q$Edge3 = 23;\nconst Q$FullCube_0 = 24;\nconst Q$FullCube_$1 = 25;\nconst Q$Comparable = 34;\nconst Q$Search_0 = 26;\nconst Q$Object_$1 = 40;\n\nfunction newSeed(id: number) {\n return new seedTable[id]();\n}\n\nfunction defineSeed(\n id: number,\n superSeed: number,\n castableTypeMap: any, // TODO\n ...moreArgs: any[]\n) {\n let seed = seedTable[id];\n if (seed && !seed.___clazz$) {\n _ = seed.prototype;\n } else {\n !seed && (seed = seedTable[id] = function () {});\n _ = seed.prototype = superSeed < 0 ? {} : newSeed(superSeed);\n _.castableTypeMap$ = castableTypeMap;\n }\n for (const arg of moreArgs) {\n arg.prototype = _;\n }\n if (seed.___clazz$) {\n _.___clazz$ = seed.___clazz$;\n seed.___clazz$ = null;\n }\n}\n\nfunction makeCastMap(a: number[]) {\n const result: Record<number, number> = {};\n for (let i_0 = 0, c = a.length; i_0 < c; ++i_0) {\n result[a[i_0]] = 1;\n }\n return result;\n}\n\ndefineSeed(1, -1, CM$);\n\n_.value = null;\n\nfunction Array_0() {}\n\nfunction createFrom(a: any, length_0: number) {\n const result = createFromSeed(0, length_0);\n initValues(a.___clazz$, a.castableTypeMap$, a.queryId$, result);\n return result;\n}\n\nfunction createFromSeed(seedType: number, length_0: number) {\n const array = new Array(length_0);\n if (seedType === 3) {\n for (let i_0 = 0; i_0 < length_0; ++i_0) {\n const value = {\n m: 0,\n l: 0,\n h: 0,\n };\n value.l = value.m = value.h = 0;\n array[i_0] = value;\n }\n } else if (seedType > 0) {\n const value = [null, 0, false][seedType];\n for (let i_0 = 0; i_0 < length_0; ++i_0) {\n array[i_0] = value;\n }\n }\n return array;\n}\n\nfunction initDim(arrayClass, castableTypeMap, queryId, length_0, seedType) {\n const result = createFromSeed(seedType, length_0);\n initValues(arrayClass, castableTypeMap, queryId, result);\n return result;\n}\n\nfunction initValues(arrayClass, castableTypeMap, queryId, array) {\n $clinit_Array$ExpandoWrapper();\n wrapArray(array, expandoNames_0, expandoValues_0);\n array.___clazz$ = arrayClass;\n array.castableTypeMap$ = castableTypeMap;\n array.queryId$ = queryId;\n return array;\n}\n\nfunction setCheck(array, index, value) {\n return (array[index] = value);\n}\n\ndefineSeed(73, 1, {}, Array_0);\n_.queryId$ = 0;\n\nlet ran$clinit_Array$ExpandoWrapper = false;\nfunction $clinit_Array$ExpandoWrapper() {\n if (ran$clinit_Array$ExpandoWrapper) {\n return;\n }\n ran$clinit_Array$ExpandoWrapper = true;\n expandoNames_0 = [];\n expandoValues_0 = [];\n initExpandos(new Array_0(), expandoNames_0, expandoValues_0);\n}\n\nfunction initExpandos(protoType, expandoNames, expandoValues) {\n let i_0 = 0;\n let value;\n for (const name_0 in protoType) {\n // rome-ignore lint/nursery/noConditionalAssignment: <explanation>\n if ((value = protoType[name_0])) {\n expandoNames[i_0] = name_0;\n expandoValues[i_0] = value;\n ++i_0;\n }\n }\n}\n\nfunction wrapArray(array, expandoNames, expandoValues) {\n $clinit_Array$ExpandoWrapper();\n for (let i_0 = 0, c = expandoNames.length; i_0 < c; ++i_0) {\n array[expandoNames[i_0]] = expandoValues[i_0];\n }\n}\n\nlet expandoNames_0;\nlet expandoValues_0;\n\nfunction canCast(src, dstId) {\n return src.castableTypeMap$ && !!src.castableTypeMap$[dstId];\n}\n\nfunction instanceOf(src, dstId) {\n return src !== null && canCast(src, dstId);\n}\n\nlet ran$clinit_Center1 = false;\nfunction $clinit_Center1() {\n if (ran$clinit_Center1) {\n return false;\n }\n ran$clinit_Center1 = true;\n ctsmv = createArray(15582, 36);\n sym2raw = createArray(15582);\n csprun = createArray(15582);\n symmult = createArray(48, 48);\n symmove = createArray(48, 36);\n syminv = createArray(48);\n finish_0 = createArray(48);\n}\n\nfunction $$init_1(this$static) {\n this$static.ct = createArray(24);\n}\n\nfunction $equals(this$static, obj) {\n let c;\n let i_0;\n if (instanceOf(obj, Q$Center1)) {\n c = obj;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n if (this$static.ct[i_0] !== c.ct[i_0]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\nfunction $get_1(this$static) {\n let i_0;\n let idx;\n let r;\n idx = 0;\n r = 8;\n for (i_0 = 23; i_0 >= 0; --i_0) {\n this$static.ct[i_0] === 1 && (idx += Cnk[i_0][r--]);\n }\n return idx;\n}\n\nfunction $getsym(this$static) {\n let cord;\n let j;\n if (raw2sym !== null) {\n return raw2sym[$get_1(this$static)];\n }\n for (j = 0; j < 48; ++j) {\n cord = raw2sym_0($get_1(this$static));\n if (cord !== -1) {\n return cord * 64 + j;\n }\n $rot(this$static, 0);\n j % 2 === 1 && $rot(this$static, 1);\n j % 8 === 7 && $rot(this$static, 2);\n j % 16 === 15 && $rot(this$static, 3);\n }\n}\n\nfunction $move(this$static, m_0) {\n const key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0: {\n swap(this$static.ct, 0, 1, 2, 3, key);\n break;\n }\n case 1: {\n swap(this$static.ct, 16, 17, 18, 19, key);\n break;\n }\n case 2: {\n swap(this$static.ct, 8, 9, 10, 11, key);\n break;\n }\n case 3: {\n swap(this$static.ct, 4, 5, 6, 7, key);\n break;\n }\n case 4: {\n swap(this$static.ct, 20, 21, 22, 23, key);\n break;\n }\n case 5: {\n swap(this$static.ct, 12, 13, 14, 15, key);\n break;\n }\n case 6: {\n swap(this$static.ct, 0, 1, 2, 3, key);\n swap(this$static.ct, 8, 20, 12, 16, key);\n swap(this$static.ct, 9, 21, 13, 17, key);\n break;\n }\n case 7: {\n swap(this$static.ct, 16, 17, 18, 19, key);\n swap(this$static.ct, 1, 15, 5, 9, key);\n swap(this$static.ct, 2, 12, 6, 10, key);\n break;\n }\n case 8: {\n swap(this$static.ct, 8, 9, 10, 11, key);\n swap(this$static.ct, 2, 19, 4, 21, key);\n swap(this$static.ct, 3, 16, 5, 22, key);\n break;\n }\n case 9: {\n swap(this$static.ct, 4, 5, 6, 7, key);\n swap(this$static.ct, 10, 18, 14, 22, key);\n swap(this$static.ct, 11, 19, 15, 23, key);\n break;\n }\n case 10: {\n swap(this$static.ct, 20, 21, 22, 23, key);\n swap(this$static.ct, 0, 8, 4, 14, key);\n swap(this$static.ct, 3, 11, 7, 13, key);\n break;\n }\n case 11: {\n swap(this$static.ct, 12, 13, 14, 15, key);\n swap(this$static.ct, 1, 20, 7, 18, key);\n swap(this$static.ct, 0, 23, 6, 17, key);\n }\n }\n}\n\nfunction $rot(this$static, r) {\n switch (r) {\n case 0: {\n $move(this$static, 19);\n $move(this$static, 28);\n break;\n }\n case 1: {\n $move(this$static, 21);\n $move(this$static, 32);\n break;\n }\n case 2: {\n swap(this$static.ct, 0, 3, 1, 2, 1);\n swap(this$static.ct, 8, 11, 9, 10, 1);\n swap(this$static.ct, 4, 7, 5, 6, 1);\n swap(this$static.ct, 12, 15, 13, 14, 1);\n swap(this$static.ct, 16, 19, 21, 22, 1);\n swap(this$static.ct, 17, 18, 20, 23, 1);\n break;\n }\n case 3: {\n $move(this$static, 18);\n $move(this$static, 29);\n $move(this$static, 24);\n $move(this$static, 35);\n }\n }\n}\n\nfunction $rotate(this$static, r) {\n let j;\n for (j = 0; j < r; ++j) {\n $rot(this$static, 0);\n j % 2 === 1 && $rot(this$static, 1);\n j % 8 === 7 && $rot(this$static, 2);\n j % 16 === 15 && $rot(this$static, 3);\n }\n}\n\nfunction $set_0(this$static, idx) {\n let i_0;\n let r;\n r = 8;\n for (i_0 = 23; i_0 >= 0; --i_0) {\n this$static.ct[i_0] = 0;\n if (idx >= Cnk[i_0][r]) {\n idx -= Cnk[i_0][r--];\n this$static.ct[i_0] = 1;\n }\n }\n}\n\nfunction $set_1(this$static, c) {\n let i_0;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this$static.ct[i_0] = c.ct[i_0];\n }\n}\n\nfunction Center1_0() {\n let i_0;\n $$init_1(this);\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this.ct[i_0] = 1;\n }\n for (i_0 = 8; i_0 < 24; ++i_0) {\n this.ct[i_0] = 0;\n }\n}\n\nfunction Center1_1(c, urf) {\n let i_0;\n $$init_1(this);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ct[i_0] = ~~(c.ct[i_0] / 2) === urf ? 1 : 0;\n }\n}\n\nfunction Center1_2(ct) {\n let i_0;\n $$init_1(this);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ct[i_0] = ct[i_0];\n }\n}\n\nfunction createMoveTable() {\n let i_0;\n let m_0;\n const c = new Center1_0();\n const d = new Center1_0();\n for (i_0 = 0; i_0 < 15582; ++i_0) {\n $set_0(d, sym2raw[i_0]);\n for (m_0 = 0; m_0 < 36; ++m_0) {\n $set_1(c, d);\n $move(c, m_0);\n ctsmv[i_0][m_0] = $getsym(c);\n }\n }\n}\n\nfunction createPrun() {\n let check;\n let depth;\n let done;\n let i_0;\n let idx;\n let inv;\n let m_0;\n let select;\n fill_0(csprun);\n csprun[0] = 0;\n depth = 0;\n done = 1;\n while (done !== 15582) {\n inv = depth > 4;\n select = inv ? -1 : depth;\n check = inv ? depth : -1;\n ++depth;\n for (i_0 = 0; i_0 < 15582; ++i_0) {\n if (csprun[i_0] !== select) {\n continue;\n }\n for (m_0 = 0; m_0 < 27; ++m_0) {\n idx = ~~ctsmv[i_0][m_0] >>> 6;\n if (csprun[idx] !== check) {\n continue;\n }\n ++done;\n if (inv) {\n csprun[i_0] = depth;\n break;\n } else {\n csprun[idx] = depth;\n }\n }\n }\n }\n}\n\nfunction getSolvedSym(cube) {\n let check;\n let i_0;\n let j;\n const c = new Center1_2(cube.ct);\n for (j = 0; j < 48; ++j) {\n check = true;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n if (c.ct[i_0] !== ~~(i_0 / 4)) {\n check = false;\n break;\n }\n }\n if (check) {\n return j;\n }\n $rot(c, 0);\n j % 2 === 1 && $rot(c, 1);\n j % 8 === 7 && $rot(c, 2);\n j % 16 === 15 && $rot(c, 3);\n }\n return -1;\n}\n\nfunction initSym_0() {\n let i_0;\n let j;\n let k_0;\n const c = new Center1_0();\n for (i_0 = 0; i_0 < 24; ++i_0) {\n c.ct[i_0] = i_0;\n }\n const d = new Center1_2(c.ct);\n const e = new Center1_2(c.ct);\n const f = new Center1_2(c.ct);\n for (i_0 = 0; i_0 < 48; ++i_0) {\n for (j = 0; j < 48; ++j) {\n for (k_0 = 0; k_0 < 48; ++k_0) {\n if ($equals(c, d)) {\n symmult[i_0][j] = k_0;\n k_0 === 0 && (syminv[i_0] = j);\n }\n $rot(d, 0);\n k_0 % 2 === 1 && $rot(d, 1);\n k_0 % 8 === 7 && $rot(d, 2);\n k_0 % 16 === 15 && $rot(d, 3);\n }\n $rot(c, 0);\n j % 2 === 1 && $rot(c, 1);\n j % 8 === 7 && $rot(c, 2);\n j % 16 === 15 && $rot(c, 3);\n }\n $rot(c, 0);\n i_0 % 2 === 1 && $rot(c, 1);\n i_0 % 8 === 7 && $rot(c, 2);\n i_0 % 16 === 15 && $rot(c, 3);\n }\n for (i_0 = 0; i_0 < 48; ++i_0) {\n $set_1(c, e);\n $rotate(c, syminv[i_0]);\n for (j = 0; j < 36; ++j) {\n $set_1(d, c);\n $move(d, j);\n $rotate(d, i_0);\n for (k_0 = 0; k_0 < 36; ++k_0) {\n $set_1(f, e);\n $move(f, k_0);\n if ($equals(f, d)) {\n symmove[i_0][j] = k_0;\n break;\n }\n }\n }\n }\n $set_0(c, 0);\n for (i_0 = 0; i_0 < 48; ++i_0) {\n finish_0[syminv[i_0]] = $get_1(c);\n $rot(c, 0);\n i_0 % 2 === 1 && $rot(c, 1);\n i_0 % 8 === 7 && $rot(c, 2);\n i_0 % 16 === 15 && $rot(c, 3);\n }\n}\n\nfunction initSym2Raw() {\n let count;\n let i_0;\n let idx;\n let j;\n const c = new Center1_0();\n const occ = createArray(22984);\n for (i_0 = 0; i_0 < 22984; i_0++) {\n occ[i_0] = 0;\n }\n count = 0;\n for (i_0 = 0; i_0 < 735471; ++i_0) {\n if ((occ[~~i_0 >>> 5] & (1 << (i_0 & 31))) === 0) {\n $set_0(c, i_0);\n for (j = 0; j < 48; ++j) {\n idx = $get_1(c);\n occ[~~idx >>> 5] |= 1 << (idx & 31);\n raw2sym !== null && (raw2sym[idx] = (count << 6) | syminv[j]);\n $rot(c, 0);\n j % 2 === 1 && $rot(c, 1);\n j % 8 === 7 && $rot(c, 2);\n j % 16 === 15 && $rot(c, 3);\n }\n sym2raw[count++] = i_0;\n }\n }\n}\n\nfunction raw2sym_0(n) {\n const m_0 = binarySearch_0(sym2raw, n);\n return m_0 >= 0 ? m_0 : -1;\n}\n\ndefineSeed(153, 1, makeCastMap([Q$Center1]), Center1_0, Center1_1, Center1_2);\n\nlet csprun;\nlet ctsmv;\nlet finish_0;\nlet raw2sym = null;\nlet sym2raw;\nlet syminv;\nlet symmove;\nlet symmult;\n\nlet ran$clinit_Center2 = false;\nfunction $clinit_Center2() {\n if (ran$clinit_Center2) {\n return;\n }\n ran$clinit_Center2 = true;\n rlmv = createArray(70, 28);\n ctmv = createArray(6435, 28);\n rlrot = createArray(70, 16);\n ctrot = createArray(6435, 16);\n ctprun = createArray(450450);\n pmv = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,\n 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,\n ];\n}\n\nfunction $getct(this$static) {\n let i_0;\n let idx;\n let r;\n idx = 0;\n r = 8;\n for (i_0 = 14; i_0 >= 0; --i_0) {\n this$static.ct[i_0] !== this$static.ct[15] && (idx += Cnk[i_0][r--]);\n }\n return idx;\n}\n\nfunction $getrl(this$static) {\n let i_0;\n let idx;\n let r;\n idx = 0;\n r = 4;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n this$static.rl[i_0] !== this$static.rl[7] && (idx += Cnk[i_0][r--]);\n }\n return idx * 2 + this$static.parity;\n}\n\nfunction $move_0(this$static, m_0) {\n this$static.parity ^= pmv[m_0];\n const key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0: {\n swap(this$static.ct, 0, 1, 2, 3, key);\n break;\n }\n case 1: {\n swap(this$static.rl, 0, 1, 2, 3, key);\n break;\n }\n case 2: {\n swap(this$static.ct, 8, 9, 10, 11, key);\n break;\n }\n case 3: {\n swap(this$static.ct, 4, 5, 6, 7, key);\n break;\n }\n case 4: {\n swap(this$static.rl, 4, 5, 6, 7, key);\n break;\n }\n case 5: {\n swap(this$static.ct, 12, 13, 14, 15, key);\n break;\n }\n case 6: {\n swap(this$static.ct, 0, 1, 2, 3, key);\n swap(this$static.rl, 0, 5, 4, 1, key);\n swap(this$static.ct, 8, 9, 12, 13, key);\n break;\n }\n case 7: {\n swap(this$static.rl, 0, 1, 2, 3, key);\n swap(this$static.ct, 1, 15, 5, 9, key);\n swap(this$static.ct, 2, 12, 6, 10, key);\n break;\n }\n case 8: {\n swap(this$static.ct, 8, 9, 10, 11, key);\n swap(this$static.rl, 0, 3, 6, 5, key);\n swap(this$static.ct, 3, 2, 5, 4, key);\n break;\n }\n case 9: {\n swap(this$static.ct, 4, 5, 6, 7, key);\n swap(this$static.rl, 3, 2, 7, 6, key);\n swap(this$static.ct, 11, 10, 15, 14, key);\n break;\n }\n case 10: {\n swap(this$static.rl, 4, 5, 6, 7, key);\n swap(this$static.ct, 0, 8, 4, 14, key);\n swap(this$static.ct, 3, 11, 7, 13, key);\n break;\n }\n case 11: {\n swap(this$static.ct, 12, 13, 14, 15, key);\n swap(this$static.rl, 1, 4, 7, 2, key);\n swap(this$static.ct, 1, 0, 7, 6, key);\n }\n }\n}\n\nfunction $rot_0(this$static, r) {\n switch (r) {\n case 0: {\n $move_0(this$static, 19);\n $move_0(this$static, 28);\n break;\n }\n case 1: {\n $move_0(this$static, 21);\n $move_0(this$static, 32);\n break;\n }\n case 2: {\n swap(this$static.ct, 0, 3, 1, 2, 1);\n swap(this$static.ct, 8, 11, 9, 10, 1);\n swap(this$static.ct, 4, 7, 5, 6, 1);\n swap(this$static.ct, 12, 15, 13, 14, 1);\n swap(this$static.rl, 0, 3, 5, 6, 1);\n swap(this$static.rl, 1, 2, 4, 7, 1);\n }\n }\n}\n\nfunction $set_2(this$static, c, edgeParity) {\n let i_0;\n for (i_0 = 0; i_0 < 16; ++i_0) {\n this$static.ct[i_0] = ~~(c.ct[i_0] / 2);\n }\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this$static.rl[i_0] = c.ct[i_0 + 16];\n }\n this$static.parity = edgeParity;\n}\n\nfunction $setct(this$static, idx) {\n let i_0;\n let r;\n r = 8;\n this$static.ct[15] = 0;\n for (i_0 = 14; i_0 >= 0; --i_0) {\n if (idx >= Cnk[i_0][r]) {\n idx -= Cnk[i_0][r--];\n this$static.ct[i_0] = 1;\n } else {\n this$static.ct[i_0] = 0;\n }\n }\n}\n\nfunction $setrl(this$static, idx) {\n let i_0;\n let r;\n this$static.parity = idx & 1;\n idx >>>= 1;\n r = 4;\n this$static.rl[7] = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n if (idx >= Cnk[i_0][r]) {\n idx -= Cnk[i_0][r--];\n this$static.rl[i_0] = 1;\n } else {\n this$static.rl[i_0] = 0;\n }\n }\n}\n\nfunction Center2_0() {\n this.rl = createArray(8);\n this.ct = createArray(16);\n}\n\nfunction init_3() {\n let ct;\n let ctx;\n let depth;\n let done;\n let i_0;\n let idx;\n let j;\n let m_0;\n let rl;\n let rlx;\n const c = new Center2_0();\n for (i_0 = 0; i_0 < 70; ++i_0) {\n for (m_0 = 0; m_0 < 28; ++m_0) {\n $setrl(c, i_0);\n $move_0(c, move2std[m_0]);\n rlmv[i_0][m_0] = $getrl(c);\n }\n }\n for (i_0 = 0; i_0 < 70; ++i_0) {\n $setrl(c, i_0);\n for (j = 0; j < 16; ++j) {\n rlrot[i_0][j] = $getrl(c);\n $rot_0(c, 0);\n j % 2 === 1 && $rot_0(c, 1);\n j % 8 === 7 && $rot_0(c, 2);\n }\n }\n for (i_0 = 0; i_0 < 6435; ++i_0) {\n $setct(c, i_0);\n for (j = 0; j < 16; ++j) {\n ctrot[i_0][j] = $getct(c) & 65535;\n $rot_0(c, 0);\n j % 2 === 1 && $rot_0(c, 1);\n j % 8 === 7 && $rot_0(c, 2);\n }\n }\n for (i_0 = 0; i_0 < 6435; ++i_0) {\n for (m_0 = 0; m_0 < 28; ++m_0) {\n $setct(c, i_0);\n $move_0(c, move2std[m_0]);\n ctmv[i_0][m_0] = $getct(c) & 65535;\n }\n }\n fill_0(ctprun);\n ctprun[0] =\n ctprun[18] =\n ctprun[28] =\n ctprun[46] =\n ctprun[54] =\n ctprun[56] =\n 0;\n depth = 0;\n done = 6;\n\n while (done !== 450450) {\n const inv = depth > 6;\n const select = inv ? -1 : depth;\n const check = inv ? depth : -1;\n ++depth;\n for (i_0 = 0; i_0 < 450450; ++i_0) {\n if (ctprun[i_0] !== select) {\n continue;\n }\n ct = ~~(i_0 / 70);\n rl = i_0 % 70;\n for (m_0 = 0; m_0 < 23; ++m_0) {\n ctx = ctmv[ct][m_0];\n rlx = rlmv[rl][m_0];\n idx = ctx * 70 + rlx;\n if (ctprun[idx] !== check) {\n continue;\n }\n ++done;\n if (inv) {\n ctprun[i_0] = depth;\n break;\n } else {\n ctprun[idx] = depth;\n }\n }\n }\n }\n}\n\ndefineSeed(154, 1, {}, Center2_0);\n_.parity = 0;\nlet ctmv;\nlet ctprun;\nlet ctrot;\nlet pmv;\nlet rlmv;\nlet rlrot;\n\nlet ran$clinit_Center3 = false;\nfunction $clinit_Center3() {\n if (ran$clinit_Center3) {\n return;\n }\n ran$clinit_Center3 = true;\n ctmove = createArray(29400, 20);\n pmove = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1];\n prun_0 = createArray(29400);\n rl2std = [0, 9, 14, 23, 27, 28, 41, 42, 46, 55, 60, 69];\n std2rl = createArray(70);\n}\n\nfunction $getct_0(this$static) {\n let i_0;\n let idx;\n let idxrl;\n let r;\n idx = 0;\n r = 4;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n this$static.ud[i_0] !== this$static.ud[7] && (idx += Cnk[i_0][r--]);\n }\n idx *= 35;\n r = 4;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n this$static.fb[i_0] !== this$static.fb[7] && (idx += Cnk[i_0][r--]);\n }\n idx *= 12;\n const check = this$static.fb[7] ^ this$static.ud[7];\n idxrl = 0;\n r = 4;\n for (i_0 = 7; i_0 >= 0; --i_0) {\n this$static.rl[i_0] !== check && (idxrl += Cnk[i_0][r--]);\n }\n return this$static.parity + 2 * (idx + std2rl[idxrl]);\n}\n\nfunction $move_1(this$static, i_0) {\n this$static.parity ^= pmove[i_0];\n switch (i_0) {\n case 0:\n case 1:\n case 2: {\n swap(this$static.ud, 0, 1, 2, 3, i_0 % 3);\n break;\n }\n case 3: {\n swap(this$static.rl, 0, 1, 2, 3, 1);\n break;\n }\n case 4:\n case 5:\n case 6: {\n swap(this$static.fb, 0, 1, 2, 3, (i_0 - 1) % 3);\n break;\n }\n case 7:\n case 8:\n case 9: {\n swap(this$static.ud, 4, 5, 6, 7, (i_0 - 1) % 3);\n break;\n }\n case 10: {\n swap(this$static.rl, 4, 5, 6, 7, 1);\n break;\n }\n case 11:\n case 12:\n case 13: {\n swap(this$static.fb, 4, 5, 6, 7, (i_0 + 1) % 3);\n break;\n }\n case 14: {\n swap(this$static.ud, 0, 1, 2, 3, 1);\n swap(this$static.rl, 0, 5, 4, 1, 1);\n swap(this$static.fb, 0, 5, 4, 1, 1);\n break;\n }\n case 15: {\n swap(this$static.rl, 0, 1, 2, 3, 1);\n swap(this$static.fb, 1, 4, 7, 2, 1);\n swap(this$static.ud, 1, 6, 5, 2, 1);\n break;\n }\n case 16: {\n swap(this$static.fb, 0, 1, 2, 3, 1);\n swap(this$static.ud, 3, 2, 5, 4, 1);\n swap(this$static.rl, 0, 3, 6, 5, 1);\n break;\n }\n case 17: {\n swap(this$static.ud, 4, 5, 6, 7, 1);\n swap(this$static.rl, 3, 2, 7, 6, 1);\n swap(this$static.fb, 3, 2, 7, 6, 1);\n break;\n }\n case 18: {\n swap(this$static.rl, 4, 5, 6, 7, 1);\n swap(this$static.fb, 0, 3, 6, 5, 1);\n swap(this$static.ud, 0, 3, 4, 7, 1);\n break;\n }\n case 19: {\n swap(this$static.fb, 4, 5, 6, 7, 1);\n swap(this$static.ud, 0, 7, 6, 1, 1);\n swap(this$static.rl, 1, 4, 7, 2, 1);\n }\n }\n}\n\nfunction $set_3(this$static, c, eXc_parity) {\n let i_0;\n const parity =\n (c.ct[0] > c.ct[8] ? 1 : 0) ^\n (c.ct[8] > c.ct[16] ? 1 : 0) ^\n (c.ct[0] > c.ct[16] ? 1 : 0)\n ? 1\n : 0;\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this$static.ud[i_0] = (c.ct[i_0] & 1) ^ 1;\n this$static.fb[i_0] = (c.ct[i_0 + 8] & 1) ^ 1;\n this$static.rl[i_0] = (c.ct[i_0 + 16] & 1) ^ 1 ^ parity;\n }\n this$static.parity = parity ^ eXc_parity;\n}\n\nfunction $setct_0(this$static, idx) {\n let i_0;\n let idxfb;\n let idxrl;\n let r;\n this$static.parity = idx & 1;\n idx >>>= 1;\n idxrl = rl2std[idx % 12];\n idx = ~~(idx / 12);\n r = 4;\n for (i_0 = 7; i_0 >= 0; --i_0) {\n this$static.rl[i_0] = 0;\n if (idxrl >= Cnk[i_0][r]) {\n idxrl -= Cnk[i_0][r--];\n this$static.rl[i_0] = 1;\n }\n }\n idxfb = idx % 35;\n idx = ~~(idx / 35);\n r = 4;\n this$static.fb[7] = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n if (idxfb >= Cnk[i_0][r]) {\n idxfb -= Cnk[i_0][r--];\n this$static.fb[i_0] = 1;\n } else {\n this$static.fb[i_0] = 0;\n }\n }\n r = 4;\n this$static.ud[7] = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n if (idx >= Cnk[i_0][r]) {\n idx -= Cnk[i_0][r--];\n this$static.ud[i_0] = 1;\n } else {\n this$static.ud[i_0] = 0;\n }\n }\n}\n\nfunction Center3_0() {\n this.ud = createArray(8);\n this.rl = createArray(8);\n this.fb = createArray(8);\n}\n\nfunction init_4() {\n let depth;\n let done;\n let i_0;\n let m_0;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n std2rl[rl2std[i_0]] = i_0;\n }\n const c = new Center3_0();\n for (i_0 = 0; i_0 < 29400; ++i_0) {\n for (m_0 = 0; m_0 < 20; ++m_0) {\n $setct_0(c, i_0);\n $move_1(c, m_0);\n ctmove[i_0][m_0] = $getct_0(c) & 65535;\n }\n }\n fill_0(prun_0);\n prun_0[0] = 0;\n depth = 0;\n done = 1;\n while (done !== 29400) {\n for (i_0 = 0; i_0 < 29400; ++i_0) {\n if (prun_0[i_0] !== depth) {\n continue;\n }\n for (m_0 = 0; m_0 < 17; ++m_0) {\n if (prun_0[ctmove[i_0][m_0]] === -1) {\n prun_0[ctmove[i_0][m_0]] = depth + 1;\n ++done;\n }\n }\n }\n ++depth;\n }\n}\n\ndefineSeed(155, 1, {}, Center3_0);\n_.parity = 0;\nlet ctmove;\nlet pmove;\nlet prun_0;\nlet rl2std;\nlet std2rl;\n\nfunction $copy_1(this$static, c) {\n let i_0;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this$static.ct[i_0] = c.ct[i_0];\n }\n}\n\nfunction $move_2(this$static, m_0) {\n const key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0: {\n swap(this$static.ct, 0, 1, 2, 3, key);\n break;\n }\n case 1: {\n swap(this$static.ct, 16, 17, 18, 19, key);\n break;\n }\n case 2: {\n swap(this$static.ct, 8, 9, 10, 11, key);\n break;\n }\n case 3: {\n swap(this$static.ct, 4, 5, 6, 7, key);\n break;\n }\n case 4: {\n swap(this$static.ct, 20, 21, 22, 23, key);\n break;\n }\n case 5: {\n swap(this$static.ct, 12, 13, 14, 15, key);\n break;\n }\n case 6: {\n swap(this$static.ct, 0, 1, 2, 3, key);\n swap(this$static.ct, 8, 20, 12, 16, key);\n swap(this$static.ct, 9, 21, 13, 17, key);\n break;\n }\n case 7: {\n swap(this$static.ct, 16, 17, 18, 19, key);\n swap(this$static.ct, 1, 15, 5, 9, key);\n swap(this$static.ct, 2, 12, 6, 10, key);\n break;\n }\n case 8: {\n swap(this$static.ct, 8, 9, 10, 11, key);\n swap(this$static.ct, 2, 19, 4, 21, key);\n swap(this$static.ct, 3, 16, 5, 22, key);\n break;\n }\n case 9: {\n swap(this$static.ct, 4, 5, 6, 7, key);\n swap(this$static.ct, 10, 18, 14, 22, key);\n swap(this$static.ct, 11, 19, 15, 23, key);\n break;\n }\n case 10: {\n swap(this$static.ct, 20, 21, 22, 23, key);\n swap(this$static.ct, 0, 8, 4, 14, key);\n swap(this$static.ct, 3, 11, 7, 13, key);\n break;\n }\n case 11: {\n swap(this$static.ct, 12, 13, 14, 15, key);\n swap(this$static.ct, 1, 20, 7, 18, key);\n swap(this$static.ct, 0, 23, 6, 17, key);\n }\n }\n}\n\nfunction CenterCube_0() {\n let i_0;\n this.ct = createArray(24);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ct[i_0] = ~~(i_0 / 4);\n }\n}\n\nfunction CenterCube_1() {\n let i_0;\n let m_0;\n let t;\n CenterCube_0.call(this);\n for (i_0 = 0; i_0 < 23; ++i_0) {\n t = i_0 + randomUIntBelow(24 - i_0);\n if (this.ct[t] !== this.ct[i_0]) {\n m_0 = this.ct[i_0];\n this.ct[i_0] = this.ct[t];\n this.ct[t] = m_0;\n }\n }\n}\n\ndefineSeed(156, 1, {}, CenterCube_0, CenterCube_1);\n\nlet ran$clinit_CornerCube = false;\nfunction $clinit_CornerCube() {\n if (ran$clinit_CornerCube) {\n return;\n }\n ran$clinit_CornerCube = true;\n moveCube_0 = createArray(18);\n initMove_0();\n}\n\nfunction $$init_2(this$static) {\n this$static.cp = [0, 1, 2, 3, 4, 5, 6, 7];\n this$static.co = [0, 0, 0, 0, 0, 0, 0, 0];\n}\n\nfunction $copy_2(this$static, c) {\n let i_0;\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this$static.cp[i_0] = c.cp[i_0];\n this$static.co[i_0] = c.co[i_0];\n }\n}\n\nfunction $move_3(this$static, idx) {\n !this$static.temps && (this$static.temps = new CornerCube_0());\n CornMult_0(this$static, moveCube_0[idx], this$static.temps);\n $copy_2(this$static, this$static.temps);\n}\n\nfunction $setTwist_0(this$static, idx) {\n let i_0;\n let twst;\n twst = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n twst += this$static.co[i_0] = idx % 3;\n idx = ~~(idx / 3);\n }\n this$static.co[7] = (15 - twst) % 3;\n}\n\nfunction CornMult_0(a, b, prod) {\n let corn;\n let ori;\n let oriA;\n let oriB;\n for (corn = 0; corn < 8; ++corn) {\n prod.cp[corn] = a.cp[b.cp[corn]];\n oriA = a.co[b.cp[corn]];\n oriB = b.co[corn];\n ori = oriA;\n ori = ori + (oriA < 3 ? oriB : 6 - oriB);\n ori = ori % 3;\n (oriA >= 3 ? 1 : 0) ^ (oriB >= 3 ? 1 : 0) && (ori = ori + 3);\n prod.co[corn] = ori;\n }\n}\n\nfunction CornerCube_0() {\n $$init_2(this);\n}\n\nfunction CornerCube_1(cperm, twist) {\n $$init_2(this);\n set8Perm(this.cp, cperm);\n $setTwist_0(this, twist);\n}\n\nfunction CornerCube_2() {\n CornerCube_1.call(this, randomUIntBelow(40320), randomUIntBelow(2187));\n}\n\nfunction initMove_0() {\n let a;\n let p_0;\n moveCube_0[0] = new CornerCube_1(15120, 0);\n moveCube_0[3] = new CornerCube_1(21021, 1494);\n moveCube_0[6] = new CornerCube_1(8064, 1236);\n moveCube_0[9] = new CornerCube_1(9, 0);\n moveCube_0[12] = new CornerCube_1(1230, 412);\n moveCube_0[15] = new CornerCube_1(224, 137);\n for (a = 0; a < 18; a += 3) {\n for (p_0 = 0; p_0 < 2; ++p_0) {\n moveCube_0[a + p_0 + 1] = new CornerCube_0();\n CornMult_0(moveCube_0[a + p_0], moveCube_0[a], moveCube_0[a + p_0 + 1]);\n }\n }\n}\n\ndefineSeed(\n 157,\n 1,\n makeCastMap([Q$CornerCube]),\n CornerCube_0,\n CornerCube_1,\n CornerCube_2,\n);\n_.temps = null;\nlet moveCube_0;\n\nlet ran$clinit_Edge3 = false;\nfunction $clinit_Edge3() {\n if (ran$clinit_Edge3) {\n return;\n }\n ran$clinit_Edge3 = true;\n eprun = createArray(1937880);\n sym2raw_0 = createArray(1538);\n symstate = createArray(1538);\n raw2sym_1 = createArray(11880);\n syminv_0 = [0, 1, 6, 3, 4, 5, 2, 7];\n mvrot = createArray(160, 12);\n mvroto = createArray(160, 12);\n factX = [\n 1, 1, 1, 3, 12, 60, 360, 2520, 20160, 181440, 1814400, 19958400, 239500800,\n ];\n FullEdgeMap = [0, 2, 4, 6, 1, 3, 7, 5, 8, 9, 10, 11];\n}\n\nfunction $circlex(this$static, a, b, c, d) {\n const temp = this$static.edgeo[d];\n this$static.edgeo[d] = this$static.edge[c];\n this$static.edge[c] = this$static.edgeo[b];\n this$static.edgeo[b] = this$static.edge[a];\n this$static.edge[a] = temp;\n}\n\nfunction $get_2(this$static, end) {\n let i_0;\n let idx;\n let v;\n let valh;\n let vall;\n this$static.isStd || $std(this$static);\n idx = 0;\n vall = 1985229328;\n valh = 47768;\n for (i_0 = 0; i_0 < end; ++i_0) {\n v = this$static.edge[i_0] << 2;\n idx *= 12 - i_0;\n if (v >= 32) {\n idx += (valh >> (v - 32)) & 15;\n valh -= 4368 << (v - 32);\n } else {\n idx += (vall >> v) & 15;\n valh -= 4369;\n vall -= 286331152 << v;\n }\n }\n return idx;\n}\n\nfunction $getsym_0(this$static) {\n let symcord1x;\n const cord1x = $get_2(this$static, 4);\n symcord1x = raw2sym_1[cord1x];\n const symx = symcord1x & 7;\n symcord1x >>= 3;\n $rotate_0(this$static, symx);\n const cord2x = $get_2(this$static, 10) % 20160;\n return symcord1x * 20160 + cord2x;\n}\n\nfunction $move_4(this$static, i_0) {\n this$static.isStd = false;\n switch (i_0) {\n case 0: {\n circle(this$static.edge, 0, 4, 1, 5);\n circle(this$static.edgeo, 0, 4, 1, 5);\n break;\n }\n case 1: {\n $swap_0(this$static.edge, 0, 4, 1, 5);\n $swap_0(this$static.edgeo, 0, 4, 1, 5);\n break;\n }\n case 2: {\n circle(this$static.edge, 0, 5, 1, 4);\n circle(this$static.edgeo, 0, 5, 1, 4);\n break;\n }\n case 3: {\n $swap_0(this$static.edge, 5, 10, 6, 11);\n $swap_0(this$static.edgeo, 5, 10, 6, 11);\n break;\n }\n case 4: {\n circle(this$static.edge, 0, 11, 3, 8);\n circle(this$static.edgeo, 0, 11, 3, 8);\n break;\n }\n case 5: {\n $swap_0(this$static.edge, 0, 11, 3, 8);\n $swap_0(this$static.edgeo, 0, 11, 3, 8);\n break;\n }\n case 6: {\n circle(this$static.edge, 0, 8, 3, 11);\n circle(this$static.edgeo, 0, 8, 3, 11);\n break;\n }\n case 7: {\n circle(this$static.edge, 2, 7, 3, 6);\n circle(this$static.edgeo, 2, 7, 3, 6);\n break;\n }\n case 8: {\n $swap_0(this$static.edge, 2, 7, 3, 6);\n $swap_0(this$static.edgeo, 2, 7, 3, 6);\n break;\n }\n case 9: {\n circle(this$static.edge, 2, 6, 3, 7);\n circle(this$static.edgeo, 2, 6, 3, 7);\n break;\n }\n case 10: {\n $swap_0(this$static.edge, 4, 8, 7, 9);\n $swap_0(this$static.edgeo, 4, 8, 7, 9);\n break;\n }\n case 11: {\n circle(this$static.edge, 1, 9, 2, 10);\n circle(this$static.edgeo, 1, 9, 2, 10);\n break;\n }\n case 12: {\n $swap_0(this$static.edge, 1, 9, 2, 10);\n $swap_0(this$static.edgeo, 1, 9, 2, 10);\n break;\n }\n case 13: {\n circle(this$static.edge, 1, 10, 2, 9);\n circle(this$static.edgeo, 1, 10, 2, 9);\n break;\n }\n case 14: {\n $swap_0(this$static.edge, 0, 4, 1, 5);\n $swap_0(this$static.edgeo, 0, 4, 1, 5);\n circle(this$static.edge, 9, 11);\n circle(this$static.edgeo, 8, 10);\n break;\n }\n case 15: {\n $swap_0(this$static.edge, 5, 10, 6, 11);\n $swap_0(this$static.edgeo, 5, 10, 6, 11);\n circle(this$static.edge, 1, 3);\n circle(this$static.edgeo, 0, 2);\n break;\n }\n case 16: {\n $swap_0(this$static.edge, 0, 11, 3, 8);\n $swap_0(this$static.edgeo, 0, 11, 3, 8);\n circle(this$static.edge, 5, 7);\n circle(this$static.edgeo, 4, 6);\n break;\n }\n case 17: {\n $swap_0(this$static.edge, 2, 7, 3, 6);\n $swap_0(this$static.edgeo, 2, 7, 3, 6);\n circle(this$static.edge, 8, 10);\n circle(this$static.edgeo, 9, 11);\n break;\n }\n case 18: {\n $swap_0(this$static.edge, 4, 8, 7, 9);\n $swap_0(this$static.edgeo, 4, 8, 7, 9);\n circle(this$static.edge, 0, 2);\n circle(this$static.edgeo, 1, 3);\n break;\n }\n case 19: {\n $swap_0(this$static.edge, 1, 9, 2, 10);\n $swap_0(this$static.edgeo, 1, 9, 2, 10);\n circle(this$static.edge, 4, 6);\n circle(this$static.edgeo, 5, 7);\n }\n }\n}\n\nfunction $rot_1(this$static, r) {\n this$static.isStd = false;\n switch (r) {\n case 0: {\n $move_4(this$static, 14);\n $move_4(this$static, 17);\n break;\n }\n case 1: {\n $circlex(this$static, 11, 5, 10, 6);\n $circlex(this$static, 5, 10, 6, 11);\n $circlex(this$static, 1, 2, 3, 0);\n $circlex(this$static, 4, 9, 7, 8);\n $circlex(this$static, 8, 4, 9, 7);\n $circlex(this$static, 0, 1, 2, 3);\n break;\n }\n case 2: {\n $swapx(this$static, 4, 5);\n $swapx(this$static, 5, 4);\n $swapx(this$static, 11, 8);\n $swapx(this$static, 8, 11);\n $swapx(this$static, 7, 6);\n $swapx(this$static, 6, 7);\n $swapx(this$static, 9, 10);\n $swapx(this$static, 10, 9);\n $swapx(this$static, 1, 1);\n $swapx(this$static, 0, 0);\n $swapx(this$static, 3, 3);\n $swapx(this$static, 2, 2);\n }\n }\n}\n\nfunction $rotate_0(this$static, r) {\n while (r >= 2) {\n r -= 2;\n $rot_1(this$static, 1);\n $rot_1(this$static, 2);\n }\n r !== 0 && $rot_1(this$static, 0);\n}\n\nfunction $set_4(this$static, idx) {\n let i_0;\n let p_0;\n let parity;\n let v;\n let vall;\n let valh;\n vall = 0x76543210;\n valh = 0xba98;\n parity = 0;\n for (i_0 = 0; i_0 < 11; ++i_0) {\n p_0 = factX[11 - i_0];\n v = ~~(idx / p_0);\n idx = idx % p_0;\n parity ^= v;\n v <<= 2;\n if (v >= 32) {\n v = v - 32;\n this$static.edge[i_0] = (valh >> v) & 15;\n const m = (1 << v) - 1;\n valh = (valh & m) + ((valh >> 4) & ~m);\n } else {\n this$static.edge[i_0] = (vall >> v) & 15;\n const m = (1 << v) - 1;\n vall = (vall & m) + ((vall >>> 4) & ~m) + (valh << 28);\n valh = valh >> 4;\n }\n }\n if ((parity & 1) === 0) {\n this$static.edge[11] = vall;\n } else {\n this$static.edge[11] = this$static.edge[10];\n this$static.edge[10] = vall;\n }\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edgeo[i_0] = i_0;\n }\n this$static.isStd = true;\n}\n\nfunction $set_5(this$static, e) {\n let i_0;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edge[i_0] = e.edge[i_0];\n this$static.edgeo[i_0] = e.edgeo[i_0];\n }\n this$static.isStd = e.isStd;\n}\n\nfunction $set_6(this$static, c) {\n let i_0;\n let parity;\n let s;\n let t;\n this$static.temp === null && (this$static.temp = createArray(12));\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.temp[i_0] = i_0;\n this$static.edge[i_0] = c.ep[FullEdgeMap[i_0] + 12] % 12;\n }\n parity = 1;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n while (this$static.edge[i_0] !== i_0) {\n t = this$static.edge[i_0];\n this$static.edge[i_0] = this$static.edge[t];\n this$static.edge[t] = t;\n s = this$static.temp[i_0];\n this$static.temp[i_0] = this$static.temp[t];\n this$static.temp[t] = s;\n parity ^= 1;\n }\n }\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edge[i_0] = this$static.temp[c.ep[FullEdgeMap[i_0]] % 12];\n }\n return parity;\n}\n\nfunction $std(this$static) {\n let i_0;\n this$static.temp === null && (this$static.temp = createArray(12));\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.temp[this$static.edgeo[i_0]] = i_0;\n }\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edge[i_0] = this$static.temp[this$static.edge[i_0]];\n this$static.edgeo[i_0] = i_0;\n }\n this$static.isStd = true;\n}\n\nfunction $swap_0(arr, a, b, c, d) {\n let temp;\n temp = arr[a];\n arr[a] = arr[c];\n arr[c] = temp;\n temp = arr[b];\n arr[b] = arr[d];\n arr[d] = temp;\n}\n\nfunction $swapx(this$static, x, y) {\n const temp = this$static.edge[x];\n this$static.edge[x] = this$static.edgeo[y];\n this$static.edgeo[y] = temp;\n}\n\nfunction Edge3_0() {\n this.edge = createArray(12);\n this.edgeo = createArray(12);\n}\n\nfunction createPrun_0() {\n let chk;\n let cord1;\n let cord1x;\n let cord2;\n let cord2x;\n let dep1m3;\n let depm3;\n let depth;\n let end;\n let find_0;\n let i_0;\n let i_;\n let idx;\n let idxx;\n let inv;\n let j;\n let m_0;\n let symState;\n let symcord1;\n let symcord1x;\n let symx;\n let val;\n const e = new Edge3_0();\n const f = new Edge3_0();\n const g = new Edge3_0();\n fill_0(eprun);\n depth = 0;\n done_0 = 1;\n setPruning_0(eprun, 0, 0);\n // var start = +new Date;\n while (done_0 !== 31006080) {\n inv = depth > 9;\n depm3 = depth % 3;\n dep1m3 = (depth + 1) % 3;\n find_0 = inv ? 3 : depm3;\n chk = inv ? depm3 : 3;\n if (depth >= 9) {\n break;\n }\n for (i_ = 0; i_ < 31006080; i_ += 16) {\n val = eprun[~~i_ >> 4];\n if (!inv && val === -1) {\n continue;\n }\n for (i_0 = i_, end = i_ + 16; i_0 < end; ++i_0, val >>= 2) {\n if ((val & 3) !== find_0) {\n continue;\n }\n symcord1 = ~~(i_0 / 20160);\n cord1 = sym2raw_0[symcord1];\n cord2 = i_0 % 20160;\n $set_4(e, cord1 * 20160 + cord2);\n for (m_0 = 0; m_0 < 17; ++m_0) {\n cord1x = getmvrot(e.edge, m_0 << 3, 4);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n cord2x = getmvrot(e.edge, (m_0 << 3) | symx, 10) % 20160;\n idx = symcord1x * 20160 + cord2x;\n if (getPruning_0(eprun, idx) !== chk) {\n continue;\n }\n setPruning_0(eprun, inv ? i_0 : idx, dep1m3);\n ++done_0;\n if (inv) {\n break;\n }\n symState = symstate[symcord1x];\n if (symState === 1) {\n continue;\n }\n $set_5(f, e);\n $move_4(f, m_0);\n $rotate_0(f, symx);\n for (j = 1; (symState = (~~symState >> 1) & 65535) !== 0; ++j) {\n if ((symState & 1) !== 1) {\n continue;\n }\n $set_5(g, f);\n $rotate_0(g, j);\n idxx = symcord1x * 20160 + ($get_2(g, 10) % 20160);\n if (getPruning_0(eprun, idxx) === chk) {\n setPruning_0(eprun, idxx, dep1m3);\n ++done_0;\n }\n }\n }\n }\n }\n ++depth;\n // console.log(depth + '\\t' + done_0 + '\\t' + (+new Date - start));\n }\n}\n\nfunction getPruning_0(table, index) {\n return (table[index >> 4] >> ((index & 15) << 1)) & 3;\n}\n\nfunction getmvrot(ep, mrIdx, end) {\n let i_0;\n let idx;\n let v;\n let valh;\n let vall;\n const movo = mvroto[mrIdx];\n const mov = mvrot[mrIdx];\n idx = 0;\n vall = 1985229328;\n valh = 47768;\n for (i_0 = 0; i_0 < end; ++i_0) {\n v = movo[ep[mov[i_0]]] << 2;\n idx *= 12 - i_0;\n if (v >= 32) {\n idx += (valh >> (v - 32)) & 15;\n valh -= 4368 << (v - 32);\n } else {\n idx += (vall >> v) & 15;\n valh -= 4369;\n vall -= 286331152 << v;\n }\n }\n return idx;\n}\n\nfunction getprun(edge) {\n let cord1;\n let cord1x;\n let cord2;\n let cord2x;\n let depm3;\n let depth;\n let idx;\n let m_0;\n let symcord1;\n let symcord1x;\n let symx;\n const e = new Edge3_0();\n depth = 0;\n depm3 = getPruning_0(eprun, edge);\n if (depm3 === 3) {\n return 10;\n }\n while (edge !== 0) {\n depm3 === 0 ? (depm3 = 2) : --depm3;\n symcord1 = ~~(edge / 20160);\n cord1 = sym2raw_0[symcord1];\n cord2 = edge % 20160;\n $set_4(e, cord1 * 20160 + cord2);\n for (m_0 = 0; m_0 < 17; ++m_0) {\n cord1x = getmvrot(e.edge, m_0 << 3, 4);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n cord2x = getmvrot(e.edge, (m_0 << 3) | symx, 10) % 20160;\n idx = symcord1x * 20160 + cord2x;\n if (getPruning_0(eprun, idx) === depm3) {\n ++depth;\n edge = idx;\n break;\n }\n }\n }\n return depth;\n}\n\nfunction getprun_0(edge, prun) {\n const depm3 = getPruning_0(eprun, edge);\n if (depm3 === 3) {\n return 10;\n }\n return (((0x49249249 << depm3) >> prun) & 3) + prun - 1;\n // (depm3 - prun + 16) % 3 + prun - 1;\n}\n\nfunction initMvrot() {\n let i_0;\n let m_0;\n let r;\n const e = new Edge3_0();\n for (m_0 = 0; m_0 < 20; ++m_0) {\n for (r = 0; r < 8; ++r) {\n $set_4(e, 0);\n $move_4(e, m_0);\n $rotate_0(e, r);\n for (i_0 = 0; i_0 < 12; ++i_0) {\n mvrot[(m_0 << 3) | r][i_0] = e.edge[i_0];\n }\n $std(e);\n for (i_0 = 0; i_0 < 12; ++i_0) {\n mvroto[(m_0 << 3) | r][i_0] = e.temp[i_0];\n }\n }\n }\n}\n\nfunction initRaw2Sym() {\n let count;\n let i_0;\n let idx;\n let j;\n const e = new Edge3_0();\n const occ = createArray(1485);\n for (i_0 = 0; i_0 < 1485; i_0++) {\n occ[i_0] = 0;\n }\n count = 0;\n for (i_0 = 0; i_0 < 11880; ++i_0) {\n if ((occ[~~i_0 >>> 3] & (1 << (i_0 & 7))) === 0) {\n $set_4(e, i_0 * factX[8]);\n for (j = 0; j < 8; ++j) {\n idx = $get_2(e, 4);\n idx === i_0 && (symstate[count] = (symstate[count] | (1 << j)) & 65535);\n occ[~~idx >> 3] = occ[~~idx >> 3] | (1 << (idx & 7));\n raw2sym_1[idx] = (count << 3) | syminv_0[j];\n $rot_1(e, 0);\n if (j % 2 === 1) {\n $rot_1(e, 1);\n $rot_1(e, 2);\n }\n }\n sym2raw_0[count++] = i_0;\n }\n }\n}\n\nfunction setPruning_0(table, index, value) {\n table[index >> 4] ^= (3 ^ value) << ((index & 15) << 1);\n}\n\ndefineSeed(158, 1, makeCastMap([Q$Edge3]), Edge3_0);\n_.isStd = true;\n_.temp = null;\nlet FullEdgeMap;\nlet done_0 = 0;\nlet eprun;\nlet factX;\nlet mvrot;\nlet mvroto;\nlet raw2sym_1;\nlet sym2raw_0;\nlet syminv_0;\nlet symstate;\n\nlet ran$clinit_EdgeCube = false;\nfunction $clinit_EdgeCube() {\n if (ran$clinit_EdgeCube) {\n return;\n }\n ran$clinit_EdgeCube = true;\n}\n\nfunction $checkEdge(this$static) {\n let ck;\n let i_0;\n let parity;\n ck = 0;\n parity = false;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n ck |= 1 << this$static.ep[i_0];\n parity = parity !== this$static.ep[i_0] >= 12;\n }\n ck &= ~~ck >> 12;\n return ck === 0 && !parity;\n}\n\nfunction $copy_3(this$static, c) {\n let i_0;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this$static.ep[i_0] = c.ep[i_0];\n }\n}\n\nfunction $move_5(this$static, m_0) {\n const key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0: {\n swap(this$static.ep, 0, 1, 2, 3, key);\n swap(this$static.ep, 12, 13, 14, 15, key);\n break;\n }\n case 1: {\n swap(this$static.ep, 11, 15, 10, 19, key);\n swap(this$static.ep, 23, 3, 22, 7, key);\n break;\n }\n case 2: {\n swap(this$static.ep, 0, 11, 6, 8, key);\n swap(this$static.ep, 12, 23, 18, 20, key);\n break;\n }\n case 3: {\n swap(this$static.ep, 4, 5, 6, 7, key);\n swap(this$static.ep, 16, 17, 18, 19, key);\n break;\n }\n case 4: {\n swap(this$static.ep, 1, 20, 5, 21, key);\n swap(this$static.ep, 13, 8, 17, 9, key);\n break;\n }\n case 5: {\n swap(this$static.ep, 2, 9, 4, 10, key);\n swap(this$static.ep, 14, 21, 16, 22, key);\n break;\n }\n case 6: {\n swap(this$static.ep, 0, 1, 2, 3, key);\n swap(this$static.ep, 12, 13, 14, 15, key);\n swap(this$static.ep, 9, 22, 11, 20, key);\n break;\n }\n case 7: {\n swap(this$static.ep, 11, 15, 10, 19, key);\n swap(this$static.ep, 23, 3, 22, 7, key);\n swap(this$static.ep, 2, 16, 6, 12, key);\n break;\n }\n case 8: {\n swap(this$static.ep, 0, 11, 6, 8, key);\n swap(this$static.ep, 12, 23, 18, 20, key);\n swap(this$static.ep, 3, 19, 5, 13, key);\n break;\n }\n case 9: {\n swap(this$static.ep, 4, 5, 6, 7, key);\n swap(this$static.ep, 16, 17, 18, 19, key);\n swap(this$static.ep, 8, 23, 10, 21, key);\n break;\n }\n case 10: {\n swap(this$static.ep, 1, 20, 5, 21, key);\n swap(this$static.ep, 13, 8, 17, 9, key);\n swap(this$static.ep, 14, 0, 18, 4, key);\n break;\n }\n case 11: {\n swap(this$static.ep, 2, 9, 4, 10, key);\n swap(this$static.ep, 14, 21, 16, 22, key);\n swap(this$static.ep, 7, 15, 1, 17, key);\n }\n }\n}\n\nfunction EdgeCube_0() {\n let i_0;\n this.ep = createArray(24);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ep[i_0] = i_0;\n }\n}\n\nfunction EdgeCube_1() {\n let i_0;\n let m_0;\n let t;\n EdgeCube_0.call(this);\n for (i_0 = 0; i_0 < 23; ++i_0) {\n t = i_0 + randomUIntBelow(24 - i_0);\n if (t !== i_0) {\n m_0 = this.ep[i_0];\n this.ep[i_0] = this.ep[t];\n this.ep[t] = m_0;\n }\n }\n}\n\ndefineSeed(159, 1, {}, EdgeCube_0, EdgeCube_1);\n\nlet ran$clinit_FullCube_0 = false;\nfunction $clinit_FullCube_0() {\n if (ran$clinit_FullCube_0) {\n return;\n }\n ran$clinit_FullCube_0 = true;\n move2rot = [35, 1, 34, 2, 4, 6, 22, 5, 19];\n}\n\nfunction $$init_3(this$static) {\n this$static.moveBuffer = createArray(60);\n}\n\nfunction $compareTo_1(this$static, c) {\n return this$static.value - c.value;\n}\n\nfunction $copy_4(this$static, c) {\n let i_0;\n $copy_3(this$static.edge, c.edge);\n $copy_1(this$static.center, c.center);\n $copy_2(this$static.corner, c.corner);\n this$static.value = c.value;\n this$static.add1 = c.add1;\n this$static.length1 = c.length1;\n this$static.length2 = c.length2;\n this$static.length3 = c.length3;\n this$static.sym = c.sym;\n for (i_0 = 0; i_0 < 60; ++i_0) {\n this$static.moveBuffer[i_0] = c.moveBuffer[i_0];\n }\n this$static.moveLength = c.moveLength;\n this$static.edgeAvail = c.edgeAvail;\n this$static.centerAvail = c.centerAvail;\n this$static.cornerAvail = c.cornerAvail;\n}\n\nfunction $getCenter(this$static) {\n while (this$static.centerAvail < this$static.moveLength) {\n $move_2(\n this$static.center,\n this$static.moveBuffer[this$static.centerAvail++],\n );\n }\n return this$static.center;\n}\n\nfunction $getCorner(this$static) {\n while (this$static.cornerAvail < this$static.moveLength) {\n $move_3(\n this$static.corner,\n this$static.moveBuffer[this$static.cornerAvail++] % 18,\n );\n }\n return this$static.corner;\n}\n\nfunction $getEdge(this$static) {\n while (this$static.edgeAvail < this$static.moveLength) {\n $move_5(this$static.edge, this$static.moveBuffer[this$static.edgeAvail++]);\n }\n return this$static.edge;\n}\n\nfunction $getMoveString(this$static) {\n let i_0;\n let idx;\n let move;\n let rot;\n let sb;\n let sym;\n const fixedMoves = new Array(\n this$static.moveLength - (this$static.add1 ? 2 : 0),\n );\n idx = 0;\n for (i_0 = 0; i_0 < this$static.length1; ++i_0) {\n fixedMoves[idx++] = this$static.moveBuffer[i_0];\n }\n sym = this$static.sym;\n for (\n i_0 = this$static.length1 + (this$static.add1 ? 2 : 0);\n i_0 < this$static.moveLength;\n ++i_0\n ) {\n if (symmove[sym][this$static.moveBuffer[i_0]] >= 27) {\n fixedMoves[idx++] = symmove[sym][this$static.moveBuffer[i_0]] - 9;\n rot = move2rot[symmove[sym][this$static.moveBuffer[i_0]] - 27];\n sym = symmult[sym][rot];\n } else {\n fixedMoves[idx++] = symmove[sym][this$static.moveBuffer[i_0]];\n }\n }\n const finishSym = symmult[syminv[sym]][getSolvedSym($getCenter(this$static))];\n sb = \"\";\n sym = finishSym;\n for (i_0 = idx - 1; i_0 >= 0; --i_0) {\n move = fixedMoves[i_0];\n move = ~~(move / 3) * 3 + (2 - (move % 3));\n if (symmove[sym][move] >= 27) {\n sb = `${sb}${move2str_1[symmove[sym][move] - 9]} `;\n rot = move2rot[symmove[sym][move] - 27];\n sym = symmult[sym][rot];\n } else {\n sb = `${sb}${move2str_1[symmove[sym][move]]} `;\n }\n }\n return sb;\n}\n\nfunction $move_6(this$static, m_0) {\n this$static.moveBuffer[this$static.moveLength++] = m_0;\n return;\n}\n\nfunction FullCube_3() {\n $$init_3(this);\n this.edge = new EdgeCube_0();\n this.center = new CenterCube_0();\n this.corner = new CornerCube_0();\n}\n\nfunction FullCube_4(c) {\n FullCube_3.call(this);\n $copy_4(this, c);\n}\n\nfunction FullCube_5() {\n $$init_3(this);\n this.edge = new EdgeCube_1();\n this.center = new CenterCube_1();\n this.corner = new CornerCube_2();\n}\n\ndefineSeed(\n 160,\n 1,\n makeCastMap([Q$FullCube_0, Q$Comparable]),\n FullCube_3,\n FullCube_4,\n FullCube_5,\n);\n_.compareTo$ = function compareTo_1(c) {\n return $compareTo_1(this, c);\n};\n_.add1 = false;\n_.center = null;\n_.centerAvail = 0;\n_.corner = null;\n_.cornerAvail = 0;\n_.edge = null;\n_.edgeAvail = 0;\n_.length1 = 0;\n_.length2 = 0;\n_.length3 = 0;\n_.moveLength = 0;\n_.sym = 0;\n_.value = 0;\nlet move2rot;\n\nfunction $compare(c1, c2) {\n return c2.value - c1.value;\n}\n\nfunction $compare_0(c1, c2) {\n return $compare(c1, c2);\n}\n\nfunction FullCube$ValueComparator_0() {}\n\ndefineSeed(161, 1, {}, FullCube$ValueComparator_0);\n_.compare = function compare(c1, c2) {\n return $compare_0(c1, c2);\n};\n\nlet ran$clinit_Moves = false;\nfunction $clinit_Moves() {\n if (ran$clinit_Moves) {\n return;\n }\n ran$clinit_Moves = true;\n let i_0;\n let j;\n move2str_1 = [\n \"U \",\n \"U2 \",\n \"U' \",\n \"R \",\n \"R2 \",\n \"R' \",\n \"F \",\n \"F2 \",\n \"F' \",\n \"D \",\n \"D2 \",\n \"D' \",\n \"L \",\n \"L2 \",\n \"L' \",\n \"B \",\n \"B2 \",\n \"B' \",\n \"Uw \",\n \"Uw2\",\n \"Uw'\",\n \"Rw \",\n \"Rw2\",\n \"Rw'\",\n \"Fw \",\n \"Fw2\",\n \"Fw'\",\n \"Dw \",\n \"Dw2\",\n \"Dw'\",\n \"Lw \",\n \"Lw2\",\n \"Lw'\",\n \"Bw \",\n \"Bw2\",\n \"Bw'\",\n ];\n move2std = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22,\n 23, 25, 28, 30, 31, 32, 34, 36,\n ];\n move3std = [\n 0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 13, 15, 16, 17, 19, 22, 25, 28, 31, 34, 36,\n ];\n std2move = createArray(37);\n std3move = createArray(37);\n ckmv = createArray(37, 36);\n ckmv2_0 = createArray(29, 28);\n ckmv3 = createArray(21, 20);\n skipAxis = createArray(36);\n skipAxis2 = createArray(28);\n skipAxis3 = createArray(20);\n for (i_0 = 0; i_0 < 29; ++i_0) {\n std2move[move2std[i_0]] = i_0;\n }\n for (i_0 = 0; i_0 < 21; ++i_0) {\n std3move[move3std[i_0]] = i_0;\n }\n for (i_0 = 0; i_0 < 36; ++i_0) {\n for (j = 0; j < 36; ++j) {\n ckmv[i_0][j] =\n ~~(i_0 / 3) === ~~(j / 3) ||\n (~~(i_0 / 3) % 3 === ~~(j / 3) % 3 && i_0 > j);\n }\n ckmv[36][i_0] = false;\n }\n for (i_0 = 0; i_0 < 29; ++i_0) {\n for (j = 0; j < 28; ++j) {\n ckmv2_0[i_0][j] = ckmv[move2std[i_0]][move2std[j]];\n }\n }\n for (i_0 = 0; i_0 < 21; ++i_0) {\n for (j = 0; j < 20; ++j) {\n ckmv3[i_0][j] = ckmv[move3std[i_0]][move3std[j]];\n }\n }\n for (i_0 = 0; i_0 < 36; ++i_0) {\n skipAxis[i_0] = 36;\n for (j = i_0; j < 36; ++j) {\n if (!ckmv[i_0][j]) {\n skipAxis[i_0] = j - 1;\n break;\n }\n }\n }\n for (i_0 = 0; i_0 < 28; ++i_0) {\n skipAxis2[i_0] = 28;\n for (j = i_0; j < 28; ++j) {\n if (!ckmv2_0[i_0][j]) {\n skipAxis2[i_0] = j - 1;\n break;\n }\n }\n }\n for (i_0 = 0; i_0 < 20; ++i_0) {\n skipAxis3[i_0] = 20;\n for (j = i_0; j < 20; ++j) {\n if (!ckmv3[i_0][j]) {\n skipAxis3[i_0] = j - 1;\n break;\n }\n }\n }\n}\n\nlet ckmv;\nlet ckmv2_0;\nlet ckmv3;\nlet move2std;\nlet move2str_1;\nlet move3std;\nlet skipAxis;\nlet skipAxis2;\nlet skipAxis3;\nlet std2move;\nlet std3move;\n\nfunction $doSearch(this$static) {\n let MAX_LENGTH2;\n let MAX_LENGTH3;\n let ct;\n let edge;\n let eparity;\n let i_0;\n let index;\n let length12;\n let length123;\n let prun;\n let s2ct;\n let s2rl;\n this$static.solution = \"\";\n const ud = $getsym(new Center1_1($getCenter(this$static.c), 0));\n const fb = $getsym(new Center1_1($getCenter(this$static.c), 1));\n const rl = $getsym(new Center1_1($getCenter(this$static.c), 2));\n const udprun = csprun[~~ud >> 6];\n const fbprun = csprun[~~fb >> 6];\n const rlprun = csprun[~~rl >> 6];\n this$static.p1SolsCnt = 0;\n this$static.arr2idx = 0;\n $clear(this$static.p1sols.heap);\n for (\n this$static.length1 =\n (udprun < fbprun ? udprun : fbprun) < rlprun\n ? udprun < fbprun\n ? udprun\n : fbprun\n : rlprun;\n this$static.length1 < 100;\n ++this$static.length1\n ) {\n if (\n (rlprun <= this$static.length1 &&\n $search1(\n this$static,\n ~~rl >>> 6,\n rl & 63,\n this$static.length1,\n -1,\n 0,\n )) ||\n (udprun <= this$static.length1 &&\n $search1(\n this$static,\n ~~ud >>> 6,\n ud & 63,\n this$static.length1,\n -1,\n 0,\n )) ||\n (fbprun <= this$static.length1 &&\n $search1(this$static, ~~fb >>> 6, fb & 63, this$static.length1, -1, 0))\n ) {\n break;\n }\n }\n const p1SolsArr = $toArray_1(\n this$static.p1sols,\n initDim(\n _3Lcs_threephase_FullCube_2_classLit,\n makeCastMap([Q$FullCube_$1, Q$Serializable, Q$Object_$1]),\n Q$FullCube_0,\n 0,\n 0,\n ),\n );\n\n p1SolsArr.sort(function (a, b) {\n return a.value - b.value;\n });\n MAX_LENGTH2 = 9;\n do {\n OUT: for (length12 = p1SolsArr[0].value; length12 < 100; ++length12) {\n for (i_0 = 0; i_0 < p1SolsArr.length; ++i_0) {\n if (p1SolsArr[i_0].value > length12) {\n break;\n }\n if (length12 - p1SolsArr[i_0].length1 > MAX_LENGTH2) {\n continue;\n }\n $copy_4(this$static.c1, p1SolsArr[i_0]);\n $set_2(\n this$static.ct2,\n $getCenter(this$static.c1),\n parity_0($getEdge(this$static.c1).ep),\n );\n s2ct = $getct(this$static.ct2);\n s2rl = $getrl(this$static.ct2);\n this$static.length1 = p1SolsArr[i_0].length1;\n this$static.length2 = length12 - p1SolsArr[i_0].length1;\n if ($search2(this$static, s2ct, s2rl, this$static.length2, 28, 0)) {\n break OUT;\n }\n }\n }\n ++MAX_LENGTH2;\n } while (length12 === 100);\n this$static.arr2.sort(function (a, b) {\n return a.value - b.value;\n });\n index = 0;\n MAX_LENGTH3 = 13;\n do {\n OUT2: for (\n length123 = this$static.arr2[0].value;\n length123 < 100;\n ++length123\n ) {\n for (i_0 = 0; i_0 < Math.min(this$static.arr2idx, 100); ++i_0) {\n if (this$static.arr2[i_0].value > length123) {\n break;\n }\n if (\n length123 -\n this$static.arr2[i_0].length1 -\n this$static.arr2[i_0].length2 >\n MAX_LENGTH3\n ) {\n continue;\n }\n eparity = $set_6(this$static.e12, $getEdge(this$static.arr2[i_0]));\n $set_3(\n this$static.ct3,\n $getCenter(this$static.arr2[i_0]),\n eparity ^ parity_0($getCorner(this$static.arr2[i_0]).cp),\n );\n ct = $getct_0(this$static.ct3);\n edge = $get_2(this$static.e12, 10);\n prun = getprun($getsym_0(this$static.e12));\n if (\n prun <=\n length123 -\n this$static.arr2[i_0].length1 -\n this$static.arr2[i_0].length2 &&\n $search3(\n this$static,\n edge,\n ct,\n prun,\n length123 -\n this$static.arr2[i_0].length1 -\n this$static.arr2[i_0].length2,\n 20,\n 0,\n )\n ) {\n index = i_0;\n break OUT2;\n }\n }\n }\n ++MAX_LENGTH3;\n } while (length123 === 100);\n const solcube = new FullCube_4(this$static.arr2[index]);\n this$static.length1 = solcube.length1;\n this$static.length2 = solcube.length2;\n const length_0 = length123 - this$static.length1 - this$static.length2;\n for (i_0 = 0; i_0 < length_0; ++i_0) {\n $move_6(solcube, move3std[this$static.move3[i_0]]);\n }\n this$static.solution = $getMoveString(solcube);\n}\n\nfunction $init2_0(this$static, sym) {\n let i_0;\n let next;\n $copy_4(this$static.c1, this$static.c);\n for (i_0 = 0; i_0 < this$static.length1; ++i_0) {\n $move_6(this$static.c1, this$static.move1[i_0]);\n }\n switch (finish_0[sym]) {\n case 0: {\n $move_6(this$static.c1, 24);\n $move_6(this$static.c1, 35);\n this$static.move1[this$static.length1] = 24;\n this$static.move1[this$static.length1 + 1] = 35;\n this$static.add1 = true;\n sym = 19;\n break;\n }\n case 12869: {\n $move_6(this$static.c1, 18);\n $move_6(this$static.c1, 29);\n this$static.move1[this$static.length1] = 18;\n this$static.move1[this$static.length1 + 1] = 29;\n this$static.add1 = true;\n sym = 34;\n break;\n }\n case 735470: {\n this$static.add1 = false;\n sym = 0;\n }\n }\n $set_2(\n this$static.ct2,\n $getCenter(this$static.c1),\n parity_0($getEdge(this$static.c1).ep),\n );\n const s2ct = $getct(this$static.ct2);\n const s2rl = $getrl(this$static.ct2);\n const ctp = ctprun[s2ct * 70 + s2rl];\n this$static.c1.value = ctp + this$static.length1;\n this$static.c1.length1 = this$static.length1;\n this$static.c1.add1 = this$static.add1;\n this$static.c1.sym = sym;\n ++this$static.p1SolsCnt;\n if (this$static.p1sols.heap.size < 500) {\n next = new FullCube_4(this$static.c1);\n } else {\n next = $poll(this$static.p1sols);\n next.value > this$static.c1.value && $copy_4(next, this$static.c1);\n }\n $add(this$static.p1sols, next);\n return this$static.p1SolsCnt === 10000;\n}\n\nfunction $init3(this$static) {\n let i_0;\n $copy_4(this$static.c2, this$static.c1);\n for (i_0 = 0; i_0 < this$static.length2; ++i_0) {\n $move_6(this$static.c2, this$static.move2[i_0]);\n }\n if (!$checkEdge($getEdge(this$static.c2))) {\n return false;\n }\n const eparity = $set_6(this$static.e12, $getEdge(this$static.c2));\n $set_3(\n this$static.ct3,\n $getCenter(this$static.c2),\n eparity ^ parity_0($getCorner(this$static.c2).cp),\n );\n const ct = $getct_0(this$static.ct3);\n $get_2(this$static.e12, 10);\n const prun = getprun($getsym_0(this$static.e12));\n !this$static.arr2[this$static.arr2idx]\n ? (this$static.arr2[this$static.arr2idx] = new FullCube_4(this$static.c2))\n : $copy_4(this$static.arr2[this$static.arr2idx], this$static.c2);\n this$static.arr2[this$static.arr2idx].value =\n this$static.length1 + this$static.length2 + Math.max(prun, prun_0[ct]);\n this$static.arr2[this$static.arr2idx].length2 = this$static.length2;\n ++this$static.arr2idx;\n return this$static.arr2idx === this$static.arr2.length;\n}\n\nfunction $randomState(this$static) {\n init_5();\n this$static.c = new FullCube_5();\n $doSearch(this$static);\n return this$static.solution;\n}\n\nfunction $search1(this$static, ct, sym, maxl, lm, depth) {\n let axis;\n let ctx;\n let m_0;\n let power;\n let prun;\n let symx;\n if (ct === 0) {\n return maxl === 0 && $init2_0(this$static, sym);\n }\n for (axis = 0; axis < 27; axis += 3) {\n if (axis === lm || axis === lm - 9 || axis === lm - 18) {\n continue;\n }\n for (power = 0; power < 3; ++power) {\n m_0 = axis + power;\n ctx = ctsmv[ct][symmove[sym][m_0]];\n prun = csprun[~~ctx >>> 6];\n if (prun >= maxl) {\n if (prun > maxl) {\n break;\n }\n continue;\n }\n symx = symmult[sym][ctx & 63];\n ctx >>>= 6;\n this$static.move1[depth] = m_0;\n if ($search1(this$static, ctx, symx, maxl - 1, axis, depth + 1)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction $search2(this$static, ct, rl, maxl, lm, depth) {\n let ctx;\n let m_0;\n let prun;\n let rlx;\n if (ct === 0 && ctprun[rl] === 0) {\n return maxl === 0 && $init3(this$static);\n }\n for (m_0 = 0; m_0 < 23; ++m_0) {\n if (ckmv2_0[lm][m_0]) {\n m_0 = skipAxis2[m_0];\n continue;\n }\n ctx = ctmv[ct][m_0];\n rlx = rlmv[rl][m_0];\n prun = ctprun[ctx * 70 + rlx];\n if (prun >= maxl) {\n prun > maxl && (m_0 = skipAxis2[m_0]);\n continue;\n }\n this$static.move2[depth] = move2std[m_0];\n if ($search2(this$static, ctx, rlx, maxl - 1, m_0, depth + 1)) {\n return true;\n }\n }\n return false;\n}\n\nfunction $search3(this$static, edge, ct, prun, maxl, lm, depth) {\n let cord1x;\n let cord2x;\n let ctx;\n let edgex;\n let m_0;\n let prun1;\n let prunx;\n let symcord1x;\n let symx;\n if (maxl === 0) {\n return edge === 0 && ct === 0;\n }\n $set_4(this$static.tempe[depth], edge);\n for (m_0 = 0; m_0 < 17; ++m_0) {\n if (ckmv3[lm][m_0]) {\n m_0 = skipAxis3[m_0];\n continue;\n }\n ctx = ctmove[ct][m_0];\n prun1 = prun_0[ctx];\n if (prun1 >= maxl) {\n prun1 > maxl && m_0 < 14 && (m_0 = skipAxis3[m_0]);\n continue;\n }\n edgex = getmvrot(this$static.tempe[depth].edge, m_0 << 3, 10);\n cord1x = ~~(edgex / 20160);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n cord2x =\n getmvrot(this$static.tempe[depth].edge, (m_0 << 3) | symx, 10) % 20160;\n prunx = getprun_0(symcord1x * 20160 + cord2x, prun);\n if (prunx >= maxl) {\n prunx > maxl && m_0 < 14 && (m_0 = skipAxis3[m_0]);\n continue;\n }\n if ($search3(this$static, edgex, ctx, prunx, maxl - 1, m_0, depth + 1)) {\n this$static.move3[depth] = m_0;\n return true;\n }\n }\n return false;\n}\n\nfunction Search_4() {\n let i_0;\n this.p1sols = new PriorityQueue_0(new FullCube$ValueComparator_0());\n this.move1 = createArray(15);\n this.move2 = createArray(20);\n this.move3 = createArray(20);\n this.c1 = new FullCube_3();\n this.c2 = new FullCube_3();\n this.ct2 = new Center2_0();\n this.ct3 = new Center3_0();\n this.e12 = new Edge3_0();\n this.tempe = createArray(20);\n this.arr2 = createArray(100);\n for (i_0 = 0; i_0 < 20; ++i_0) {\n this.tempe[i_0] = new Edge3_0();\n }\n}\n\nfunction init_5() {\n if (inited_2) {\n return;\n }\n initSym_0();\n raw2sym = createArray(735471);\n initSym2Raw();\n createMoveTable();\n raw2sym = null;\n createPrun();\n init_3();\n init_4();\n initMvrot();\n initRaw2Sym();\n createPrun_0();\n inited_2 = true;\n}\n\ndefineSeed(163, 1, makeCastMap([Q$Search_0]), Search_4);\n_.add1 = false;\n_.arr2idx = 0;\n_.c = null;\n_.length1 = 0;\n_.length2 = 0;\n_.p1SolsCnt = 0;\n_.solution = \"\";\nlet inited_2 = false;\n\nlet ran$clinit_Util_0 = false;\nfunction $clinit_Util_0() {\n if (ran$clinit_Util_0) {\n return;\n }\n ran$clinit_Util_0 = true;\n}\n\nfunction parity_0(arr) {\n let i_0;\n let j;\n let len;\n let parity;\n parity = 0;\n for (i_0 = 0, len = arr.length; i_0 < len; ++i_0) {\n for (j = i_0; j < len; ++j) {\n arr[i_0] > arr[j] && (parity ^= 1);\n }\n }\n return parity;\n}\n\nfunction swap(arr, a, b, c, d, key) {\n let temp;\n switch (key) {\n case 0: {\n temp = arr[d];\n arr[d] = arr[c];\n arr[c] = arr[b];\n arr[b] = arr[a];\n arr[a] = temp;\n return;\n }\n case 1: {\n temp = arr[a];\n arr[a] = arr[c];\n arr[c] = temp;\n temp = arr[b];\n arr[b] = arr[d];\n arr[d] = temp;\n return;\n }\n case 2: {\n temp = arr[a];\n arr[a] = arr[b];\n arr[b] = arr[c];\n arr[c] = arr[d];\n arr[d] = temp;\n return;\n }\n }\n}\n\nfunction Class_0() {}\n\nfunction createForArray(packageName, className, seedId, componentType) {\n const clazz = new Class_0();\n clazz.typeName = packageName + className;\n isInstantiable(seedId !== 0 ? -seedId : 0) &&\n setClassLiteral(seedId !== 0 ? -seedId : 0, clazz);\n clazz.modifiers = 4;\n clazz.superclass = Ljava_lang_Object_2_classLit;\n clazz.componentType = componentType;\n return clazz;\n}\n\nfunction createForClass(packageName, className, seedId, superclass) {\n const clazz = new Class_0();\n clazz.typeName = packageName + className;\n isInstantiable(seedId) && setClassLiteral(seedId, clazz);\n clazz.superclass = superclass;\n return clazz;\n}\n\nfunction getSeedFunction(clazz) {\n const func = seedTable[clazz.seedId];\n clazz = null;\n return func;\n}\n\nfunction isInstantiable(seedId) {\n return typeof seedId === \"number\" && seedId > 0;\n}\n\nfunction setClassLiteral(seedId, clazz) {\n let proto;\n clazz.seedId = seedId;\n if (seedId === 2) {\n proto = String.prototype;\n } else {\n if (seedId > 0) {\n let seed = getSeedFunction(clazz);\n if (seed) {\n proto = seed.prototype;\n } else {\n seed = seedTable[seedId] = function () {};\n seed.___clazz$ = clazz;\n return;\n }\n } else {\n return;\n }\n }\n proto.___clazz$ = clazz;\n}\n\n_.val$outerIter = null;\n\nfunction $add(this$static, o) {\n if ($offer(this$static, o)) {\n return true;\n }\n}\n\nfunction $$init_6(this$static) {\n this$static.array = initDim(\n _3Ljava_lang_Object_2_classLit,\n makeCastMap([Q$Serializable, Q$Object_$1]),\n Q$Object,\n 0,\n 0,\n );\n}\n\nfunction $add_0(this$static, o) {\n setCheck(this$static.array, this$static.size++, o);\n return true;\n}\n\nfunction $clear(this$static) {\n this$static.array = initDim(\n _3Ljava_lang_Object_2_classLit,\n makeCastMap([Q$Serializable, Q$Object_$1]),\n Q$Object,\n 0,\n 0,\n );\n this$static.size = 0;\n}\n\nfunction $get_4(this$static, index) {\n return this$static.array[index];\n}\n\nfunction $remove_0(this$static, index) {\n const previous = this$static.array[index];\n splice_0(this$static.array, index, 1);\n --this$static.size;\n return previous;\n}\n\nfunction $set_7(this$static, index, o) {\n const previous = this$static.array[index];\n setCheck(this$static.array, index, o);\n return previous;\n}\n\nfunction $toArray_0(this$static, out) {\n let i_0;\n out.length < this$static.size && (out = createFrom(out, this$static.size));\n for (i_0 = 0; i_0 < this$static.size; ++i_0) {\n setCheck(out, i_0, this$static.array[i_0]);\n }\n out.length > this$static.size && setCheck(out, this$static.size, null);\n return out;\n}\n\nfunction ArrayList_1() {\n $$init_6(this);\n this.array.length = 500;\n}\n\nfunction splice_0(array, index, deleteCount) {\n array.splice(index, deleteCount);\n}\n_.size = 0;\n\nfunction binarySearch_0(sortedArray, key) {\n let high;\n let low;\n let mid;\n let midVal;\n low = 0;\n high = sortedArray.length - 1;\n while (low <= high) {\n mid = low + (~~(high - low) >> 1);\n midVal = sortedArray[mid];\n if (midVal < key) {\n low = mid + 1;\n } else if (midVal > key) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n return -low - 1;\n}\n\nfunction fill_0(a) {\n fill_1(a, a.length);\n}\n\nfunction fill_1(a, toIndex) {\n let i_0;\n for (i_0 = 0; i_0 < toIndex; ++i_0) {\n a[i_0] = -1;\n }\n}\n\nfunction $mergeHeaps(this$static, node) {\n let smallestChild;\n let leftChild;\n let rightChild;\n let smallestChild_0;\n const heapSize = this$static.heap.size;\n const value = $get_4(this$static.heap, node);\n while (node * 2 + 1 < heapSize) {\n smallestChild =\n ((leftChild = 2 * node + 1),\n (rightChild = leftChild + 1),\n (smallestChild_0 = leftChild),\n rightChild < heapSize &&\n $compare_0(\n $get_4(this$static.heap, rightChild),\n $get_4(this$static.heap, leftChild),\n ) < 0 &&\n (smallestChild_0 = rightChild),\n smallestChild_0);\n if ($compare_0(value, $get_4(this$static.heap, smallestChild)) < 0) {\n break;\n }\n $set_7(this$static.heap, node, $get_4(this$static.heap, smallestChild));\n node = smallestChild;\n }\n $set_7(this$static.heap, node, value);\n}\n\nfunction $offer(this$static, e) {\n let childNode;\n let node;\n node = this$static.heap.size;\n $add_0(this$static.heap, e);\n while (node > 0) {\n childNode = node;\n node = ~~((node - 1) / 2);\n if ($compare_0($get_4(this$static.heap, node), e) <= 0) {\n $set_7(this$static.heap, childNode, e);\n return true;\n }\n $set_7(this$static.heap, childNode, $get_4(this$static.heap, node));\n }\n $set_7(this$static.heap, node, e);\n return true;\n}\n\nfunction $poll(this$static) {\n if (this$static.heap.size === 0) {\n return null;\n }\n const value = $get_4(this$static.heap, 0);\n $removeAtIndex(this$static);\n return value;\n}\n\nfunction $removeAtIndex(this$static) {\n const lastValue = $remove_0(this$static.heap, this$static.heap.size - 1);\n if (0 < this$static.heap.size) {\n $set_7(this$static.heap, 0, lastValue);\n $mergeHeaps(this$static, 0);\n }\n}\n\nfunction $toArray_1(this$static, a) {\n return $toArray_0(this$static.heap, a);\n}\n\nfunction PriorityQueue_0(cmp) {\n this.heap = new ArrayList_1();\n this.cmp = cmp;\n}\n\ndefineSeed(239, 1, {}, PriorityQueue_0);\n_.cmp = null;\n_.heap = null;\n\nconst Ljava_lang_Object_2_classLit = createForClass(\n \"java.lang.\",\n \"Object\",\n 1,\n null,\n);\nconst _3Ljava_lang_Object_2_classLit = createForArray(\n \"[Ljava.lang.\",\n \"Object;\",\n 356,\n Ljava_lang_Object_2_classLit,\n);\nconst Lcs_threephase_FullCube_2_classLit = createForClass(\n \"cs.threephase.\",\n \"FullCube\",\n 160,\n Ljava_lang_Object_2_classLit,\n);\nconst _3Lcs_threephase_FullCube_2_classLit = createForArray(\n \"[Lcs.threephase.\",\n \"FullCube;\",\n 381,\n Lcs_threephase_FullCube_2_classLit,\n);\n\nlet searcher;\n\nlet raninit = false;\nfunction init() {\n if (raninit) {\n return;\n }\n raninit = true;\n $clinit_Moves();\n $clinit_Util_0();\n $clinit_Center1();\n $clinit_Center2();\n $clinit_Center3();\n $clinit_Edge3();\n $clinit_CornerCube();\n $clinit_EdgeCube();\n $clinit_FullCube_0();\n searcher = new Search_4();\n}\n\nexport function initialize(): void {\n init();\n init_5();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n mustBeInsideWorker();\n init();\n const suffix = Alg.fromString($randomState(searcher));\n return (await getRandomScramble333()).concat(suffix);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/esm/{search-dynamic-solve-fto-L5CX2BTQ.js → search-dynamic-solve-fto-JJ32OJVM.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/cubing/vendor/xyzzy/fto-solver.js
|
|
1
|
+
// src/cubing/vendor/mpl/xyzzy/fto-solver.js
|
|
2
2
|
import { randomUIntBelow } from "random-uint-below";
|
|
3
3
|
function factorial(n) {
|
|
4
4
|
if (n < 2) {
|
|
@@ -1743,4 +1743,4 @@ function randomFTOScrambleString() {
|
|
|
1743
1743
|
export {
|
|
1744
1744
|
randomFTOScrambleString
|
|
1745
1745
|
};
|
|
1746
|
-
//# sourceMappingURL=search-dynamic-solve-fto-
|
|
1746
|
+
//# sourceMappingURL=search-dynamic-solve-fto-JJ32OJVM.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/cubing/vendor/xyzzy/fto-solver.js"],
|
|
3
|
+
"sources": ["../../src/cubing/vendor/mpl/xyzzy/fto-solver.js"],
|
|
4
4
|
"sourcesContent": ["/* ftosolver.js - An FTO solver\nversion 0.5.1 (2021-04-20)\n\nCopyright (c) 2016, 2020, 2021\n\nFrom https://gist.github.com/torchlight/9a5c53da09d8e090756a228f4b5f3471\nOriginally MIT licensed, added to `cubing.js` under the GPL license by permission from the author (@torchlight/xyzzy).\n\nCompatibility note:\nThis is targeted at Firefox / Spidermonkey releases from 2019 and onwards. It might not run on older\nJavaScript engines. Recent Chrome / Node releases should also work, but are not tested as much.\n*/\n\nimport { randomUIntBelow } from \"random-uint-below\";\n\n/* Helper functions */\n\nfunction counter(A) {\n let counts = [];\n for (let a of A) {\n counts[a] = (counts[a] || 0) + 1;\n }\n return counts;\n}\n\n/* Combinatoric functions */\n\nfunction factorial(n) {\n if (n < 2) {\n return n;\n }\n let f = 1;\n for (let i = 2; i <= n; i++) {\n f *= i;\n }\n return f;\n}\n\nfunction C(n, k) {\n if (k < 0 || k > n) {\n return 0;\n }\n if (k === 0 || k === n) {\n return 1;\n }\n let c = 1;\n for (let i = 0; i < k; i++) {\n c = ((c * (n - i)) / (i + 1)) | 0;\n }\n return c;\n}\n\nfunction C4(n, k0, k1, k2, k3 = n - k0 - k1 - k2) {\n return C(n, k0 + k1) * C(k0 + k1, k0) * C(k2 + k3, k2);\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]) {\n parity ^= 1;\n }\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]) {\n perm[j]++;\n } else {\n parity ^= 1;\n }\n }\n }\n if (parity === 1) {\n [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];\n }\n return perm;\n}\n\nfunction evenpermutation_to_index(perm) {\n return permutation_to_index(perm) >> 1;\n}\n\nlet [evenpermutation8_to_index, index_to_evenpermutation8] = (() => {\n let index_in_set_bits = new Int8Array(256 * 8);\n let look_up_set_bits = new Int8Array(256 * 8);\n for (let i = 0; i < 256; i++) {\n for (let j = 0, counter = 0; j < 8; j++) {\n if (((i >>> j) & 1) === 0) {\n continue;\n }\n index_in_set_bits[(j << 8) | i] = counter;\n look_up_set_bits[(counter << 8) | i] = j;\n counter++;\n }\n }\n\n function evenpermutation8_to_index(perm) {\n let unused = 0xff; // track which values in 0..7 haven't been used so far\n let f = 2520; // = 7!/2\n let ind = 0;\n for (let i = 0; i < 6; i++) {\n let v = perm[i];\n ind += index_in_set_bits[unused | (v << 8)] * f;\n unused &= ~(1 << v);\n f /= 7 - i;\n }\n return ind;\n }\n\n // note: this is *not* a drop-in replacement for index_to_evenpermutation!\n function index_to_evenpermutation8(ind, perm) {\n let unused = 0xff;\n let f = 2520; // = 7!/2\n let parity = 0;\n for (let i = 0; i < 6; i++) {\n let a = (ind / f) | 0;\n ind -= a * f;\n parity ^= a & 1;\n let v = look_up_set_bits[unused | (a << 8)];\n perm[i] = v;\n unused &= ~(1 << v);\n f /= 7 - i;\n }\n // the last two elements are uniquely determined by the others\n perm[6] = look_up_set_bits[unused | (parity << 8)];\n perm[7] = look_up_set_bits[unused | ((parity ^ 1) << 8)];\n return perm;\n }\n\n return [evenpermutation8_to_index, index_to_evenpermutation8];\n})();\n\nfunction random_permutation(n) {\n let p = [0];\n for (let i = 1; i < n; i++) {\n let r = randomUIntBelow(i + 1);\n p[i] = p[r];\n p[r] = i;\n }\n return p;\n}\n\nfunction random_even_permutation(n) {\n let p = random_permutation(n);\n if (permutation_parity(p) === 1) {\n [p[0], p[1]] = [p[1], p[0]];\n }\n return p;\n}\n\nfunction comb_to_index(l) {\n let bits = l.length;\n let ones = 0;\n for (let i = 0; i < bits; i++) {\n ones += +(l[i] === 1);\n }\n let zeros = bits - ones;\n if (zeros === 0 || ones === 0 || bits === 1) {\n return 0;\n }\n let b = C(bits - 1, ones);\n let ind = 0;\n for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {\n bits--;\n if (l[i] === 0) {\n b = (b * --zeros) / bits;\n } else {\n // l[i] === 1\n ind += b;\n b = (b * ones--) / bits;\n }\n }\n return ind;\n}\n\nfunction index_to_comb(ind, ones, bits) {\n let zeros = bits - ones;\n let b = C(bits - 1, ones);\n let l = [];\n let n = bits - 1;\n for (let i = 0; i < n; i++) {\n bits--;\n if (ind < b) {\n l.push(0);\n b = (b * --zeros) / bits;\n } else {\n l.push(1);\n ind -= b;\n b = (b * ones--) / bits;\n }\n }\n l.push(ones);\n return l;\n}\n\n// this is \"incorrect\" for n=0 but that's out of scope\nfunction ctz(n) {\n n |= 0;\n return 31 - Math.clz32(n ^ (n - 1));\n}\n\nlet comb_lookup_tables = {};\nfunction generate_comb_lookup_tables(n, k) {\n // 2 <= n <= 28, 0 <= k <= n\n n |= 0;\n k |= 0;\n let key = `${n} ${k}`;\n if (comb_lookup_tables[key]) {\n return comb_lookup_tables[key];\n }\n let total = C(n, k);\n let index_to_comb_table = new Uint32Array(total);\n let comb_to_index_table = new Uint32Array(1 << n).fill(-1);\n for (let i = 0, c = (1 << k) - 1; i < total; i++) {\n index_to_comb_table[i] = c;\n comb_to_index_table[c] = i;\n let t = c | (c - 1);\n c = (t + 1) | (((~t & -~t) - 1) >> (ctz(c) + 1));\n }\n return (comb_lookup_tables[key] = [index_to_comb_table, comb_to_index_table]);\n}\n\nfunction popcount(n) {\n n |= 0;\n let c = 0;\n while (n !== 0) {\n n &= n - 1;\n c++;\n }\n return c;\n}\n\nfunction spread_bits(n) {\n n &= 0xffff;\n n = (n | (n << 8)) & 0x00ff00ff;\n n = (n | (n << 4)) & 0x0f0f0f0f;\n n = (n | (n << 2)) & 0x33333333;\n n = (n | (n << 1)) & 0x55555555;\n return n;\n}\n\nfunction interleave_bits(x, y) {\n return spread_bits(x) | (spread_bits(y) << 1);\n}\n\nlet comb4_lookup_tables = {};\nfunction generate_comb4_lookup_tables(n, k0, k1, k2, k3) {\n // 3 <= n <= 14\n // 0 <= k0,k1,k2,k3 <= n\n // n = k0 + k1 + k2 + k3\n // WARNING: This does not return the combinations in sorted order.\n // (but if only two of k0,k1,k2,k3 are nonzero, then they will be sorted)\n n |= 0;\n k0 |= 0;\n k1 |= 0;\n k2 |= 0;\n k3 |= 0;\n if (n !== k0 + k1 + k2 + k3) {\n throw new Error(\"generate_comb4_lookup_tables: invalid parameters\");\n }\n let key = [n, k0, k1, k2, k3].join(\" \");\n if (comb4_lookup_tables[key]) {\n return comb4_lookup_tables[key];\n }\n let [itcl, ctil] = generate_comb_lookup_tables(n, k1 + k3);\n let [itch, ctih] = generate_comb_lookup_tables(n, k2 + k3);\n let total = C4(n, k0, k1, k2, k3);\n let index_to_comb4_table = new Uint32Array(total);\n let comb4_to_index_table = new Uint32Array(4 ** n).fill(-1);\n for (let i = 0, index = 0; i < itch.length; i++) {\n let ch = itch[i];\n for (let j = 0; j < itcl.length; j++) {\n let cl = itcl[j];\n if (popcount(cl & ch) === k3) {\n let c = interleave_bits(cl, ch);\n index_to_comb4_table[index] = c;\n comb4_to_index_table[c] = index;\n index++;\n }\n }\n }\n return (comb4_lookup_tables[key] = [\n index_to_comb4_table,\n comb4_to_index_table,\n ]);\n}\n\nfunction compose(A, B) {\n let C = [];\n for (let i = 0; i < B.length; i++) {\n C[i] = A[B[i]];\n }\n return C;\n}\n\nfunction compose3(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 compose_o(A, B) {\n let p = compose(A[0], B[0]);\n let o = [];\n let n = B[0].length;\n for (let i = 0; i < n; i++) {\n o[i] = A[1][B[0][i]] ^ B[1][i];\n }\n return [p, o];\n}\n\n/*\nfunction permutation_from_cycle(cycle, n)\n{\n\tlet perm = [];\n\tfor (let i = 0; i < n; i++) {perm[i] = i};\n\tfor (let i = 0; i < cycle.length; i++)\n\t{\n\t\tperm[cycle[i]] = cycle[(i + 1) % cycle.length];\n\t}\n\treturn perm;\n}\n*/\n\nfunction permutation_from_cycles(cycles, n) {\n let perm = [];\n for (let i = 0; i < n; i++) {\n perm[i] = i;\n }\n for (let cycle of cycles) {\n for (let i = 0; i < cycle.length; i++) {\n perm[cycle[i]] = cycle[(i + 1) % cycle.length];\n }\n }\n return perm;\n}\n\nfunction reduce_permutation(perm, keep) {\n // perm: a permutation\n // keep: array of booleans, of the same length as perm\n let n = perm.length;\n let count = Array(n).fill(0);\n for (let i = 1; i < n; i++) {\n count[i] = count[i - 1] + keep[i - 1];\n }\n let nn = count[n - 1] + keep[n - 1];\n let reduced = Array(nn);\n for (let i = 0; i < n; i++) {\n if (keep[i]) {\n reduced[count[i]] = count[perm[i]];\n }\n }\n return reduced;\n}\n\nfunction invert_permutation(perm) {\n let n = perm.length;\n let inverse = Array(n);\n for (let i = 0; i < n; i++) {\n inverse[perm[i]] = i;\n }\n return inverse;\n}\n\nfunction gcd(a, b) {\n while (a && b) {\n [a, b] = [b % a, a];\n }\n return Math.abs(a + b);\n}\n\nfunction lcm(a, b) {\n return (a * b) / gcd(a, b);\n}\n\nfunction permutation_order(perm) {\n let order = 1;\n let n = perm.length;\n let visited = Array(n).fill(false);\n let i = -1;\n while (true) {\n i = visited.indexOf(false, i + 1);\n if (i === -1) {\n break;\n }\n let cycle_length = 0;\n let j = i;\n while (!visited[j]) {\n visited[j] = true;\n j = perm[j];\n cycle_length++;\n }\n //console.log(cycle_length);\n order = lcm(order, cycle_length);\n }\n return order;\n}\n\n/*\nFacelet layout:\n\t\t\t\tU\t\t\t\t\t\t\t\t\tB\n\t\t8\t7\t6\t5\t4\t\t\t\t\t67\t68\t69\t70\t71\n\t44\t\t3\t2\t1\t\t49\t\t\t22\t\t64\t65\t66\t\t35\n\t43\t39\t\t0\t\t46\t50\t\t\t23\t19\t\t63\t\t30\t34\nL\t42\t38\t36\t\t45\t47\t51\tR\tBR\t24\t20\t18\t\t27\t29\t33\tBL\n\t41\t37\t\t9\t\t48\t52\t\t\t25\t21\t\t54\t\t28\t32\n\t40\t\t10\t11\t12\t\t53\t\t\t26\t\t57\t56\t55\t\t31\n\t\t13\t14\t15\t16\t17\t\t\t\t\t62\t61\t60\t59\t58\n\t\t\t\tF\t\t\t\t\t\t\t\t\tD\n\nWe'll be using the facelet permutations as the underlying representation. This specific labelling\ngives us three symmetries that can be written very compactly, and this turns out to be enough to\ngenerate any face move from any other face move.\n\nWhich is nice, because I don't have an FTO and it would be very error prone if I were to write out\nevery move individually.\n\nX = T2\nY = Ro Lo' (I think)\nZ = mirroring so that U swaps with L and F swaps with R\n\nFaces / colours (Lanlan colour scheme):\n0: U (white)\n1: F (red)\n2: BR (grey)\n3: BL (orange)\n4: L (purple)\n5: R (green)\n6: D (yellow)\n7: B (blue)\n*/\n\nlet solved_state = Array(72)\n .fill()\n .map((_, i) => (i / 9) | 0);\n\nlet move_U = permutation_from_cycles(\n [\n [0, 4, 8],\n [1, 6, 3],\n [2, 5, 7],\n [9, 22, 35],\n [45, 67, 44],\n [47, 68, 43],\n [46, 69, 39],\n [50, 70, 38],\n [49, 71, 36],\n ],\n 72,\n);\nlet move_Ui = compose(move_U, move_U);\n\nlet move_X = Array(72)\n .fill()\n .map((_, i) => ((i / 18) | 0) * 18 + ((i + 9) % 18));\nlet move_Y = Array(72)\n .fill()\n .map((_, i) => ((i / 36) | 0) * 36 + ((i + 18) % 36));\nlet move_Z = Array(72)\n .fill()\n .map((_, i) => (i + 36) % 72);\n\n// Z changes sign, so this is really setting up to U' rather than U\nlet move_L = compose3(move_Z, move_Ui, move_Z);\nlet move_F = compose3(move_X, move_U, move_X);\nlet move_R = compose3(move_X, move_L, move_X);\n\n//let move_BR = compose3(move_Y, move_U, move_Y);\n//let move_BL = compose3(move_Y, move_F, move_Y);\n//let move_B = compose3(move_Y, move_R, move_Y);\n//let move_D = compose3(move_Y, move_L, move_Y);\n\nlet move_Us = permutation_from_cycles(\n [\n [10, 24, 30],\n [11, 23, 34],\n [12, 19, 33],\n [42, 48, 64],\n [41, 52, 65],\n [37, 51, 66],\n ],\n 72,\n);\nlet move_Uw = compose(move_U, move_Us);\nlet move_Uwi = compose(move_Uw, move_Uw);\n\nlet move_Lw = compose3(move_Z, move_Uwi, move_Z);\nlet move_Fw = compose3(move_X, move_Uw, move_X);\nlet move_Rw = compose3(move_X, move_Lw, move_X);\n\nlet colour_map = Array(72)\n .fill()\n .map((_, i) => (i / 9) | 0);\n\nlet corner_piece_facelets = [\n [0, 45, 9, 36], // U-F\n [4, 67, 22, 49], // U-BR\n [8, 44, 35, 71], // U-BL\n [13, 58, 31, 40], // F-BL\n [17, 53, 26, 62], // F-BR\n [18, 63, 27, 54], // BR-BL\n];\n\nlet edge_piece_facelets = [\n [1, 46], // U-R\n [3, 39], // U-L\n [6, 69], // U-B\n [10, 37], // F-L\n [33, 42], // BL-L\n [12, 48], // F-R *\n [15, 60], // F-D *\n [24, 51], // BR-R *\n [19, 64], // BR-B **\n [28, 55], // BL-D **\n [30, 66], // BL-B **\n [21, 57], // BR-D **\n];\n\nlet centreA_piece_facelets = Array(12)\n .fill()\n .map((_, i) => ((i / 3) | 0) * 9 + [2, 5, 7][i % 3]);\nlet centreB_piece_facelets = centreA_piece_facelets.map((x) => x + 36);\n\n/*\nfacelet definition sanity test:\nall corner facelets are 0,4,8 mod 9; facelet order is always in U,R,U,R orbits\nall edge facelets are 1,3,6 mod 9; facelet order is always in U,R orbits\nall centre facelets are 2,5,7 mod 9\n\nfunction facelet_sanity_test()\n{\nif (corner_piece_facelets.length !== 6) {console.log('wrong number of corner pieces'); return;}\nif (edge_piece_facelets.length !== 12) {console.log('wrong number of edge pieces'); return;}\nif (!corner_piece_facelets.every(x => {return x.every(y => y % 9 % 4 === 0) && x[0] < 36 && x[2] < 36 && x[1] >= 36 && x[3] >= 36;}))\n{\n\tconsole.log('corner pieces weird');\n\treturn;\n}\nif (!edge_piece_facelets.every(x => {return x.every(y => [1,3,6].indexOf(y % 9) !== -1) && x[0] < 36 && x[1] >= 36;}))\n{\n\tconsole.log('edge pieces weird');\n\treturn;\n}\n}\n\n*/\n\nfunction identify_corner_piece(colourA, colourB) {\n // return a 2-tuple [p, o] where\n // p in {0,1,2,3,4,5} is the corner piece's ID and\n // o in {0,1} is its orientation\n for (let i = 0; i < 6; i++) {\n if (\n colourA === colour_map[corner_piece_facelets[i][0]] &&\n colourB === colour_map[corner_piece_facelets[i][2]]\n ) {\n return [i, 0];\n } else if (\n colourA === colour_map[corner_piece_facelets[i][2]] &&\n colourB === colour_map[corner_piece_facelets[i][0]]\n ) {\n return [i, 1];\n }\n }\n throw new Error(\"unknown corner piece\");\n}\n\nfunction identify_edge_piece(colourA, colourB) {\n // return p in {0..11} the edge piece's ID\n // (edges are not flippable on the FTO)\n for (let i = 0; i < 12; i++) {\n if (\n colourA === colour_map[edge_piece_facelets[i][0]] &&\n colourB === colour_map[edge_piece_facelets[i][1]]\n ) {\n return i;\n }\n if (\n colourB === colour_map[edge_piece_facelets[i][0]] &&\n colourA === colour_map[edge_piece_facelets[i][1]]\n ) {\n return i;\n }\n }\n throw new Error(\"unknown edge piece\");\n}\n\nfunction get_corner_piece(facelets, location) {\n return identify_corner_piece(\n facelets[corner_piece_facelets[location][0]],\n facelets[corner_piece_facelets[location][2]],\n );\n}\n\nfunction get_edge_piece(facelets, location) {\n return identify_edge_piece(\n facelets[edge_piece_facelets[location][0]],\n facelets[edge_piece_facelets[location][1]],\n );\n}\n\nfunction set_corner_piece(facelets, location, value, orientation) {\n let indices = corner_piece_facelets[location];\n let colours = corner_piece_facelets[value].map((x) => colour_map[x]);\n if (orientation % 2 !== 0) {\n colours = [colours[2], colours[3], colours[0], colours[1]];\n }\n for (let i = 0; i < 4; i++) {\n facelets[indices[i]] = colours[i];\n }\n}\n\nfunction set_edge_piece(facelets, location, value) {\n let indices = edge_piece_facelets[location];\n let colours = edge_piece_facelets[value].map((x) => colour_map[x]);\n for (let i = 0; i < 2; i++) {\n facelets[indices[i]] = colours[i];\n }\n}\n\nfunction convert_move_to_permutations(move) {\n let state = move.map((x) => colour_map[x]);\n //console.log(state);\n let cp_raw = Array(6)\n .fill()\n .map((_, i) => get_corner_piece(state, i));\n let cp_half = cp_raw.map(([p, o]) => p + 6 * o);\n let cp = cp_half.concat(cp_half.map((x) => (x + 6) % 12));\n let ep = Array(12)\n .fill()\n .map((_, i) => get_edge_piece(state, i));\n let ap = Array(12)\n .fill()\n .map((_, i) =>\n centreA_piece_facelets.indexOf(move[centreA_piece_facelets[i]]),\n );\n let bp = Array(12)\n .fill()\n .map((_, i) =>\n centreB_piece_facelets.indexOf(move[centreB_piece_facelets[i]]),\n );\n return { cp: cp, ep: ep, ap: ap, bp: bp };\n}\n\nlet moves = [\n move_U,\n move_L,\n move_F,\n move_R,\n move_Uw,\n move_Lw,\n move_Fw,\n move_Rw,\n];\nlet move_names = [\"U\", \"L\", \"F\", \"R\", \"u\", \"l\", \"f\", \"r\"];\n\nlet move_permutations = moves.map(convert_move_to_permutations);\n\n/*\nlet commute_table = (function () {\n\tlet n = moves.length;\n\tlet t = Array(n);\n\tfor (let i = 0; i < n; i++)\n\t{\n\t\tt[i] = Array(n);\n\t\tfor (let j = 0; j < n; j++)\n\t\t{\n\t\t\tlet a = compose(moves[i], moves[j]);\n\t\t\tlet b = compose(moves[j], moves[i]);\n\t\t\tt[i][j] = (a.join(' ') === b.join(' '));\n\t\t}\n\t}\n\treturn t;\n})();\n*/\n\n// generate a random state with the BR-BL corner solved\nfunction random_state() {\n let facelets = Array(72);\n let cp = random_even_permutation(5);\n cp.push(5);\n let co = Array(4)\n .fill()\n .map((_) => randomUIntBelow(2));\n co.push(co.reduce((x, y) => x ^ y));\n co.push(0);\n for (let i = 0; i < 6; i++) {\n set_corner_piece(facelets, i, cp[i], co[i]);\n }\n\n let ep = random_even_permutation(12);\n for (let i = 0; i < 12; i++) {\n set_edge_piece(facelets, i, ep[i]);\n }\n\n let a = random_permutation(12).map((x) => (x / 3) | 0);\n let b = random_permutation(12).map((x) => 4 + ((x / 3) | 0));\n for (let i = 0; i < 12; i++) {\n facelets[centreA_piece_facelets[i]] = a[i];\n facelets[centreB_piece_facelets[i]] = b[i];\n }\n return facelets;\n}\n\nfunction stringify_move_sequence(move_sequence, no_wide = false) {\n if (no_wide) {\n const U = 0;\n const L = 1;\n const F = 2;\n const R = 3;\n const D = 4;\n const BR = 5;\n const B = 6;\n const BL = 7;\n move_sequence = move_sequence.map((x) => x.slice());\n let ordering = [U, L, F, R, D, BR, B, BL];\n let rotations = [\n [U, R, BR, B, D, BL, L, F],\n [BL, L, U, B, R, BR, D, F],\n [BL, D, F, L, R, U, B, BR],\n [F, D, BR, R, B, U, L, BL],\n ];\n rotations = rotations.concat(rotations.map((p) => invert_permutation(p)));\n for (let i = 0; i < move_sequence.length; i++) {\n if (move_sequence[i][0] < 4) {\n // it's already a single-layer turn\n move_sequence[i][0] = ordering[move_sequence[i][0]];\n } else {\n // it's a double-layer turn and we need to Do Stuff\n let m = ordering[move_sequence[i][0]];\n let r = move_sequence[i][1];\n move_sequence[i][0] = m;\n ordering = compose(r === 1 ? rotations[m ^ 4] : rotations[m], ordering);\n //console.log(ordering);\n }\n }\n }\n let names = no_wide ? \"U L F R D BR B BL\".split(\" \") : move_names; // WARNING: this ordering is _not_ the same as the facelet colours\n let suffixes = [\"0\", \"\", \"'\"];\n let s = move_sequence.map(([m, r]) => 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 apply_move_sequence(state, move_sequence) {\n for (let [m, r] of move_sequence) {\n for (let i = 0; i < r; i++) {\n state = compose(state, moves[m]);\n }\n }\n return state;\n}\n\nfunction invert_move_sequence(move_sequence) {\n return move_sequence.map(([m, r]) => [m, (3 - r) % 3]).reverse();\n}\n\nfunction simplify_move_sequence(move_sequence, make_noise = false) {\n if (move_sequence.length === 0) {\n return [];\n }\n let simplified = [];\n let last_move = undefined;\n for (let [m, r] of move_sequence) {\n if (last_move && last_move[0] === m) {\n // turn of the same face\n last_move[1] += r;\n last_move[1] %= 3;\n if (last_move[1] === 0) {\n simplified.pop();\n last_move =\n simplified.length === 0\n ? undefined\n : simplified[simplified.length - 1];\n }\n } else if (\n simplified.length >= 2 &&\n (last_move[0] ^ m) === 4 &&\n simplified[simplified.length - 2][0] === m\n ) {\n // turn of the opposite face\n simplified[simplified.length - 2][1] += r;\n simplified[simplified.length - 2][1] %= 3;\n if (simplified[simplified.length - 2][1] === 0) {\n simplified.splice(simplified.length - 2, 1);\n }\n } else {\n last_move = [m, r];\n simplified.push(last_move);\n }\n }\n if (make_noise && `${move_sequence}` !== `${simplified}`) {\n console.log(`simplified ${move_sequence} to ${simplified}`);\n }\n return simplified;\n}\n\nfunction generate_random_state_scramble() {\n return stringify_move_sequence(\n invert_move_sequence(solve(random_state(), true)),\n true,\n );\n}\n\nfunction generate_multiple_random_state_scrambles(n) {\n let scrambles = [];\n for (let i = 0; i < n; i++) {\n scrambles[i] = generate_random_state_scramble();\n }\n return scrambles;\n}\n\n/*\nActual solver logic goes here.\n\nUnlike most of the earlier random-state scramblers I've written before, this one comes with a slight\ncomplication: the FTO's states are _not_ a group. In other words, we can't skip inverting the\nsolution to get the scramble. Not a big deal.\n\nWe assume the D-BR-B-BL corner is solved. (If not, rotate puzzle accordingly.)\n\nPhase 1: Solve a small pyramid around the D-BR-B-BL corner.\n- centres #6, #9 in orbit A and #6, #9 in orbit B\n- edges #8, #9, #10, #11\nReduction: (132/9)**2 * (12*11*10*9) = 2555520\n\nPhase 2: Reduce to LU 2-gen.\n- remaining BR, D centres, one each of F, R centres (#5, #7, #8 in each orbit)\n- edges F-R, F-D, R-BR (#5, #6, #7)\n- corner F-BR (#4)\n- corner orientation constraint on the other four corners\nReduction: 120**2 * (8*7*6) * 10 * 4 = 193536000\n\nPhase 3: Finish solve.\n- remaining centres (#0..#4, #10, #11 in each orbit)\n- edges #0..#4\n- corners #0..#3\nReduction: 210**2 * (5!/2) * (4!/2*2) = 63504000\n\n\n*/\n\nfunction generate_mtable_comb_generic(n, k, permutations) {\n let N = C(n, k);\n let nmoves = permutations.length;\n let [itc, cti] = generate_comb_lookup_tables(n, k);\n let mtable = Array(nmoves)\n .fill()\n .map(() => new Uint32Array(N));\n for (let i = 0; i < N; i++) {\n let c = itc[i];\n let arr = Array(n);\n for (let j = 0; j < n; j++) {\n arr[j] = (c >> j) & 1;\n }\n for (let m = 0; m < nmoves; m++) {\n let arr2 = compose(arr, permutations[m]);\n let c2 = arr2.reduce((acc, x, j) => acc | (x << j), 0);\n mtable[m][i] = cti[c2];\n }\n }\n return mtable;\n}\n\nfunction generate_mtable_comb4_generic(n, k0, k1, k2, k3, permutations) {\n let N = C4(n, k0, k1, k2, k3);\n let nmoves = permutations.length;\n let [itc, cti] = generate_comb4_lookup_tables(n, k0, k1, k2, k3);\n let mtable = Array(nmoves)\n .fill()\n .map(() => new Uint32Array(N));\n for (let i = 0; i < N; i++) {\n let c = itc[i];\n let arr = Array(n);\n for (let j = 0; j < n; j++) {\n arr[j] = (c >> (2 * j)) & 3;\n }\n for (let m = 0; m < nmoves; m++) {\n let arr2 = compose(arr, permutations[m]);\n let c2 = arr2.reduce((acc, x, j) => acc | (x << (2 * j)), 0);\n mtable[m][i] = cti[c2];\n }\n }\n return mtable;\n}\n\nfunction generate_mtable_single_generic(permutations) {\n let n = permutations[0].length;\n let nmoves = permutations.length;\n let mtable = Array(nmoves)\n .fill()\n .map(() => new Uint32Array(n));\n for (let i = 0; i < n; i++) {\n for (let m = 0; m < nmoves; m++) {\n mtable[m][permutations[m][i]] = i;\n // we're using right-action convention here,\n // so we use the *inverse* of the permutation\n // to track how pieces move.\n }\n }\n return mtable;\n}\n\nfunction combine_mtables(mtable0, mtable1) {\n let n0 = mtable0[0].length;\n let n1 = mtable1[0].length;\n let nmoves = mtable0.length;\n let combined = Array(nmoves)\n .fill()\n .map(() => new Uint32Array(n0 * n1));\n for (let j = 0; j < n1; j++) {\n for (let i = 0; i < n0; i++) {\n let index = i + n0 * j;\n for (let m = 0; m < nmoves; m++) {\n combined[m][index] = mtable0[m][i] + n0 * mtable1[m][j];\n }\n }\n }\n return combined;\n}\n\nfunction trim_unreachable(mtable, origin) {\n // input: mtable\n // output: [trimmed mtable, map]\n let nmoves = mtable.length;\n let n = mtable[0].length;\n let reachable = new Uint8Array(n);\n reachable[origin] = 1;\n let done = false;\n while (!done) {\n done = true;\n for (let i = 0; i < n; i++) {\n if (!reachable[i]) {\n continue;\n }\n for (let m = 0; m < nmoves; m++) {\n if (!reachable[mtable[m][i]]) {\n reachable[mtable[m][i]] = 1;\n done = false;\n }\n }\n }\n }\n let map = new Int32Array(n).fill(-1);\n for (let i = 0, counter = 0; i < n; i++) {\n if (!reachable[i]) {\n continue;\n }\n map[i] = counter;\n counter++;\n }\n return [mtable.map((entry) => reduce_permutation(entry, reachable)), map];\n}\n\nfunction reduce_to_quotient(mtable, origins) {\n let nmoves = mtable.length;\n let n = mtable[0].length;\n let quotient_map = new Int32Array(n).fill(-1);\n origins.forEach((x) => {\n quotient_map[x] = 0;\n });\n let preimages = [origins];\n for (let image = 0; image < preimages.length; image++) {\n let equiv_class = preimages[image];\n for (let m = 0; m < nmoves; m++) {\n let j = mtable[m][equiv_class[0]];\n if (quotient_map[j] !== -1) {\n continue;\n } // already looked at those nodes\n let new_equiv_class = equiv_class.map((x) => mtable[m][x]);\n let new_image = preimages.length;\n preimages.push(new_equiv_class);\n for (let x of new_equiv_class) {\n if (quotient_map[x] !== -1) {\n throw new Error(\"quotienting failed\");\n }\n quotient_map[x] = new_image;\n }\n }\n }\n let n_quot = preimages.length;\n let mtable_quot = Array(nmoves)\n .fill()\n .map(() => new Int32Array(n_quot));\n for (let m = 0; m < nmoves; m++) {\n for (let i = 0; i < n_quot; i++) {\n mtable_quot[m][i] = quotient_map[mtable[m][preimages[i][0]]];\n }\n }\n return [mtable_quot, quotient_map];\n}\n\nfunction generate_mirrored_coordinate_table(mtable, a, b) {\n let n = mtable[0].length;\n let nmoves = mtable.length;\n let mirror_map = new Int32Array(n).fill(-1);\n mirror_map[a] = b;\n mirror_map[b] = a;\n let done = false;\n while (!done) {\n done = true;\n for (let i = 0; i < n; i++) {\n if (mirror_map[i] === -1) {\n continue;\n }\n let I = mirror_map[i];\n for (let m = 0; m < nmoves; m++) {\n let M = m ^ 1;\n let new_i = mtable[m][i];\n let new_I = mtable[M][mtable[M][I]];\n // convert moves according to this table:\n // U -> L2\n // L -> U2\n // F -> R2\n // R -> F2\n if (mirror_map[new_i] === -1) {\n done = false;\n mirror_map[new_i] = new_I;\n mirror_map[new_I] = new_i;\n } else if (mirror_map[new_i] !== new_I) {\n throw new Error(\"mirroring failed - is the initial map correct?\");\n }\n }\n }\n }\n return mirror_map;\n}\n\nfunction bfs(mtable, goal_states) {\n let N = mtable[0].length;\n let nmoves = mtable.length;\n let ptable = new Int8Array(N).fill(-1);\n for (let state of goal_states) {\n ptable[state] = 0;\n }\n let depth = 0;\n let done = false;\n while (!done) {\n done = true;\n for (let state = 0; state < N; state++) {\n if (ptable[state] !== depth) {\n continue;\n }\n for (let move_index = 0; move_index < nmoves; move_index++) {\n let new_state = mtable[move_index][state];\n while (new_state !== state) {\n if (ptable[new_state] === -1) {\n done = false;\n ptable[new_state] = depth + 1;\n }\n new_state = mtable[move_index][new_state];\n }\n }\n }\n depth++;\n }\n return ptable;\n}\n\nfunction* ida_solve_gen(indices, mtables, ptables, moves_left, commute) {\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 }\n while (bound <= moves_left) {\n //console.log(`searching depth ${bound}`);\n yield* ida_search_gen(indices, mtables, ptables, bound, -1, commute);\n bound++;\n }\n}\n\nfunction* ida_search_gen(indices, mtables, ptables, bound, last, commute) {\n let ncoords = indices.length;\n let nmoves = mtables[0].length;\n let heuristic = 0;\n for (let i = 0; i < ncoords; i++) {\n heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n }\n if (heuristic > bound) {\n return;\n }\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) {\n return;\n }\n for (let m = 0; m < nmoves; m++) {\n if (m === last) {\n continue;\n }\n if (m < last && commute[m][last]) {\n continue;\n }\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][m][indices[c]];\n }\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 commute,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) {\n break;\n }\n yield [[m, r]].concat(subpath);\n }\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][m][new_indices[c]];\n }\n r++;\n }\n }\n}\n\nfunction solve(facelets, readable = false) {\n let phase1sol = solve_phase1_gen(facelets).next().value;\n let facelets2 = apply_move_sequence(facelets, phase1sol);\n let phase2sol = (\n readable ? solve_phase2_and_phase3_readable : solve_phase2_and_phase3_fast\n )(facelets2);\n let solution = simplify_move_sequence(phase1sol.concat(phase2sol), false);\n if (\n apply_move_sequence(facelets, solution).join(\"\") !== solved_state.join(\"\")\n ) {\n console.log(\"solving failed!\");\n console.log(facelets);\n console.log(phase1sol);\n console.log(facelets2);\n console.log(phase2sol);\n console.log(apply_move_sequence(facelets, solution));\n }\n return solution;\n}\n\nlet cached_mtables = {};\nlet cached_ptables = {};\n\n/* Phase 1 stuff */\n\nlet phase1_centre_colour_map = [0, 0, 2, 3, 0, 0, 2, 3];\nfunction index_phase1(facelets) {\n let [itc, cti] = generate_comb4_lookup_tables(12, 6, 0, 3, 3);\n let ep = Array(12)\n .fill()\n .map((_, i) => get_edge_piece(facelets, i));\n let edge_coord =\n ep.indexOf(8) +\n 12 * ep.indexOf(9) +\n 12 ** 2 * ep.indexOf(10) +\n 12 ** 3 * ep.indexOf(11);\n let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(\n (facelet_indices) => {\n let arr = facelet_indices.map(\n (x) => phase1_centre_colour_map[facelets[x]],\n );\n return cti[arr.reduce((acc, x, j) => acc | (x << (2 * j)), 0)];\n },\n );\n return [edge_coord, a_coord, b_coord];\n}\n\nfunction generate_phase1_edge_mtable() {\n if (cached_mtables.phase1_edge) {\n return cached_mtables.phase1_edge;\n }\n let m1 = generate_mtable_single_generic(move_permutations.map((x) => x.ep));\n let m2 = combine_mtables(m1, m1);\n let m4 = combine_mtables(m2, m2);\n return (cached_mtables.phase1_edge = m4);\n}\n\nfunction generate_phase1_edge_ptable() {\n if (cached_ptables.phase1_edge) {\n return cached_ptables.phase1_edge;\n }\n return (cached_ptables.phase1_edge = bfs(generate_phase1_edge_mtable(), [\n 8 + 12 * 9 + 12 ** 2 * 10 + 12 ** 3 * 11,\n ]));\n}\n\nfunction generate_phase1_centreA_mtable() {\n if (cached_mtables.phase1_centreA) {\n return cached_mtables.phase1_centreA;\n }\n return (cached_mtables.phase1_centreA = generate_mtable_comb4_generic(\n 12,\n 6,\n 0,\n 3,\n 3,\n move_permutations.map((x) => x.ap),\n ));\n}\n\nfunction generate_phase1_centreB_mtable() {\n if (cached_mtables.phase1_centreB) {\n return cached_mtables.phase1_centreB;\n }\n return (cached_mtables.phase1_centreB = generate_mtable_comb4_generic(\n 12,\n 6,\n 0,\n 3,\n 3,\n move_permutations.map((x) => x.bp),\n ));\n}\n\nfunction generate_phase1_centre_ptable() {\n // the pruning tables for the two centre orbits are identical due to the specific facelet\n // labelling we're using.\n if (cached_ptables.phase1_centre) {\n return cached_ptables.phase1_centre;\n }\n let [itc, cti] = generate_comb4_lookup_tables(12, 6, 0, 3, 3);\n let goal_states = itc\n .filter((x) => {\n let x6 = (x >> 12) & 3;\n let x9 = (x >> 18) & 3;\n return x6 === 2 && x9 === 3;\n })\n .map((x) => cti[x]);\n return (cached_ptables.phase1_centre = bfs(\n generate_phase1_centreB_mtable(),\n goal_states,\n ));\n}\n\nfunction* solve_phase1_gen(facelets) {\n let mtables = [\n generate_phase1_edge_mtable(),\n generate_phase1_centreA_mtable(),\n generate_phase1_centreB_mtable(),\n ];\n let ptables = [\n generate_phase1_edge_ptable(),\n generate_phase1_centre_ptable(),\n generate_phase1_centre_ptable(),\n ];\n yield* phase1_ida_solve_gen(index_phase1(facelets), mtables, ptables, 15);\n}\n\nfunction* phase1_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 }\n while (bound <= moves_left) {\n //console.log(`searching depth ${bound}`);\n yield* phase1_ida_search_gen(indices, mtables, ptables, bound, -1);\n bound++;\n }\n}\n\nfunction* phase1_ida_search_gen(indices, mtables, ptables, bound, last) {\n let ncoords = 3; //indices.length;\n let nmoves = 8; //mtables[0].length;\n let heuristic = Math.max(\n ptables[0][indices[0]],\n ptables[1][indices[1]],\n ptables[2][indices[2]],\n ); //0;\n //for (let i = 0; i < ncoords; i++) heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n if (heuristic > bound) {\n return;\n }\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) {\n return;\n }\n for (let m = 0; m < nmoves; m++) {\n if (m === last) {\n continue;\n }\n if (m === last - 4) {\n continue;\n }\n let new_indices = [];\n new_indices[0] = mtables[0][m][indices[0]];\n new_indices[1] = mtables[1][m][indices[1]];\n new_indices[2] = mtables[2][m][indices[2]];\n let r = 1;\n while (indices.some((_, i) => indices[i] !== new_indices[i])) {\n let subpath_gen = phase1_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) {\n break;\n }\n yield [[m, r]].concat(subpath);\n }\n new_indices[0] = mtables[0][m][new_indices[0]];\n new_indices[1] = mtables[1][m][new_indices[1]];\n new_indices[2] = mtables[2][m][new_indices[2]];\n r++;\n }\n }\n}\n\n/* Phase 2 stuff */\n\nlet phase2_centre_colour_map = [0, 1, 2, 0, 0, 1, 2, 0];\n// we don't care about swapping U and BL centres in phase 2\n\nlet phase2_centre_indices = [0, 1, 2, 3, 4, 5, 7, 8, 10, 11]; // 6 and 9 are already solved in phase 1\nlet phase2_keep = [\n true,\n true,\n true,\n true,\n true,\n true,\n false,\n true,\n true,\n false,\n true,\n true,\n];\nlet phase2_corner_keep = [\n true,\n true,\n true,\n true,\n true,\n false,\n true,\n true,\n true,\n true,\n true,\n false,\n];\n\nfunction index_phase2(facelets) {\n let [itc, cti] = generate_comb4_lookup_tables(10, 5, 3, 2, 0);\n let ep = Array(8)\n .fill()\n .map((_, i) => get_edge_piece(facelets, i));\n let edge_coord = ep.indexOf(5) + 8 * ep.indexOf(6) + 8 ** 2 * ep.indexOf(7);\n let corners = Array(5)\n .fill()\n .map((_, i) => get_corner_piece(facelets, i));\n let cp_inverse_full = invert_permutation(\n corners\n .map(([p, o]) => p + 5 * o)\n .concat(corners.map(([p, o]) => p + 5 * (o ^ 1))),\n );\n let cp_inverse = cp_inverse_full.slice(0, 5).map((x) => x % 5);\n let co_inverse = cp_inverse_full.slice(0, 5).map((x) => (x / 5) | 0);\n let corner_coord =\n evenpermutation_to_index(cp_inverse) * 8 +\n (co_inverse[0] ^ co_inverse[2]) +\n 2 * (co_inverse[0] ^ co_inverse[3]) +\n 4 * co_inverse[4];\n let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(\n (facelet_indices) => {\n let arr = compose(facelet_indices, phase2_centre_indices).map(\n (x) => phase2_centre_colour_map[facelets[x]],\n );\n return cti[arr.reduce((acc, x, j) => acc | (x << (2 * j)), 0)];\n },\n );\n // we don't need these move tables, but we do need the reduction maps\n // that are computed with these (and stored in global vars, yikes)\n generate_phase2_edge_mtable();\n generate_phase2_corner_mtable_compact();\n return [\n a_coord,\n b_coord,\n phase2_corner_reduction_map[corner_coord] +\n 40 * phase2_edge_reduction_map[edge_coord],\n ];\n}\n\nfunction* solve_phase2_gen(facelets) {\n yield* phase2_ida_solve_gen(index_phase2(facelets), 30);\n}\n\nfunction solve_phase2(facelets) {\n return solve_phase2_gen(facelets).next().value;\n}\n\nfunction generate_phase2_centre_mtables() {\n if (cached_mtables.phase2_centre) {\n return cached_mtables.phase2_centre;\n }\n let a = generate_mtable_comb4_generic(\n 10,\n 5,\n 3,\n 2,\n 0,\n move_permutations\n .slice(0, 4)\n .map((x) => reduce_permutation(x.ap, phase2_keep)),\n );\n let b = generate_mtable_comb4_generic(\n 10,\n 5,\n 3,\n 2,\n 0,\n move_permutations\n .slice(0, 4)\n .map((x) => reduce_permutation(x.bp, phase2_keep)),\n );\n return (cached_mtables.phase2_centre = [a, b]);\n}\n\nlet phase2_edge_reduction_map;\nfunction generate_phase2_edge_mtable() {\n if (cached_mtables.phase2_edge) {\n return cached_mtables.phase2_edge;\n }\n let e = generate_mtable_single_generic(\n move_permutations.slice(0, 4).map((x) => x.ep.slice(0, 8)),\n );\n let eee = combine_mtables(e, combine_mtables(e, e));\n let eee_trimmed;\n [eee_trimmed, phase2_edge_reduction_map] = trim_unreachable(eee, 0o765);\n return (cached_mtables.phase2_edge = eee_trimmed);\n}\n\nfunction generate_phase2_corner_mtable() {\n if (cached_mtables.phase2_corner) {\n return cached_mtables.phase2_corner;\n }\n const HALFFACT5 = factorial(5) / 2; // = 60\n const N = HALFFACT5 * 8; // = 480\n const keep = [\n true,\n true,\n true,\n true,\n true,\n false,\n true,\n true,\n true,\n true,\n true,\n false,\n ];\n // ignore the sixth and twelfth entries, which encode corner #5's state\n let mtable = Array(4)\n .fill()\n .map(() => new Uint32Array(N));\n let permutations = move_permutations\n .slice(0, 4)\n .map((x) => invert_permutation(reduce_permutation(x.cp, keep)));\n // using the left-action convention here, so take inverses\n for (let i = 0; i < N; i++) {\n let p = index_to_evenpermutation(i >> 3, 5);\n let o = [0, 0, i & 1, (i >> 1) & 1, (i >> 2) & 1];\n o[1] = o[2] ^ o[3] ^ o[4];\n let cp = Array(10);\n for (let j = 0; j < 5; j++) {\n cp[j] = p[j] + 5 * o[j];\n cp[j + 5] = p[j] + 5 * (o[j] ^ 1);\n }\n for (let m = 0; m < 4; m++) {\n let cp2 = compose(permutations[m], cp);\n let p2 = cp2.slice(0, 5).map((x) => x % 5);\n let o2 = cp2.slice(0, 5).map((x) => (x / 5) | 0);\n let orientation_index = (o2[0] ^ o2[2]) + 2 * (o2[0] ^ o2[3]) + 4 * o2[4];\n mtable[m][i] = evenpermutation_to_index(p2) * 8 + orientation_index;\n }\n }\n return (cached_mtables.phase2_corner = mtable);\n /*\n\tfar as I can tell, there's no clean way to index the cosets of the corner subgroup in this\n\tphase. so we just do it the dirty way (see `reduce_to_quotient`).\n\t*/\n}\n\nlet phase2_corner_reduction_map;\nfunction generate_phase2_corner_mtable_compact() {\n if (cached_mtables.phase2_corner_compact) {\n return cached_mtables.phase2_corner_compact;\n }\n [cached_mtables.phase2_corner_compact, phase2_corner_reduction_map] =\n reduce_to_quotient(\n generate_phase2_corner_mtable(),\n phase2_corner_goal_states(),\n );\n return cached_mtables.phase2_corner_compact;\n}\n\nfunction generate_phase2_ce_mtable() {\n if (cached_mtables.phase2_ce) {\n return cached_mtables.phase2_ce;\n }\n let c = generate_phase2_corner_mtable_compact();\n let e = generate_phase2_edge_mtable();\n return (cached_mtables.phase2_ce = combine_mtables(c, e));\n}\n\nlet phase2_ce_mirror_map;\nfunction generate_phase2_ce_mirror_map() {\n if (phase2_ce_mirror_map) {\n return phase2_ce_mirror_map;\n }\n const ce_solved = index_phase2(solved_state)[2];\n return (phase2_ce_mirror_map = generate_mirrored_coordinate_table(\n generate_phase2_ce_mtable(),\n ce_solved,\n ce_solved,\n ));\n}\n\nfunction phase2_centre_goal_states() {\n let [itc, cti] = generate_comb4_lookup_tables(10, 5, 3, 2, 0);\n return itc.filter((x) => ((x >> 10) & 63) === 41).map((x) => cti[x]);\n /*\n\tthe combination tracks the centre pieces at indices\n\t0, 1, 2, 3, 4, 5, 7, 8, 10, 11\n\tin little endian order.\n\tright-shifting 10 bits changes this to\n\t5, 7, 8, 10, 11\n\tand masking by 63 keeps only the three least significant digits\n\t5, 7, 8\n\twhich are exactly the pieces we're solving in this phase.\n\t1 + 4 * 2 + 4**2 * 2 = 41\n\tWARNING: this needs to be adjusted if the centre indexing is changed\n\t(also, this returns a Uint32Array, but nothing we do here can possibly cause overflow so\n\tthat's not a problem)\n\t*/\n}\n\nfunction phase2_corner_goal_states() {\n let mtable = generate_phase2_corner_mtable();\n let N = mtable[0].length;\n let flags = Array(N).fill(false);\n flags[0] = true; /* index 0 is the solved state */\n let done = false;\n while (!done) {\n done = true;\n for (let i = 0; i < N; i++) {\n if (flags[i]) {\n if (!flags[mtable[0][i]]) {\n done = false;\n flags[mtable[0][i]] = true;\n }\n if (!flags[mtable[1][i]]) {\n done = false;\n flags[mtable[1][i]] = true;\n }\n }\n }\n }\n return flags.map((_, i) => i).filter((i) => flags[i]);\n}\n\nfunction generate_phase2_ace_ptable() {\n if (cached_ptables.phase2_ace) {\n return cached_ptables.phase2_ace;\n }\n const [mtable_a, mtable_b] = generate_phase2_centre_mtables();\n const mtable_ce = generate_phase2_ce_mtable();\n const Na = 2520;\n const Nce = 40 * 336;\n const N = Na * Nce; // = 33868800\n const ce_solved = index_phase2(solved_state)[2];\n const max_depth = 9;\n let ptable = new Int8Array(N).fill(max_depth);\n for (let a_solved of phase2_centre_goal_states()) {\n ptable[a_solved + Na * ce_solved] = 0;\n }\n for (let depth = 0; depth < max_depth - 1; depth++) {\n for (\n let state = ptable.indexOf(depth);\n state !== -1;\n state = ptable.indexOf(depth, state + 1)\n ) {\n let a = state % Na;\n let ce = (state / Na) | 0;\n for (let move_index = 0; move_index < 4; move_index++) {\n let new_a = mtable_a[move_index][a];\n let new_ce = mtable_ce[move_index][ce];\n let new_state = new_a + Na * new_ce;\n if (ptable[new_state] === max_depth) {\n ptable[new_state] = depth + 1;\n }\n new_a = mtable_a[move_index][new_a];\n new_ce = mtable_ce[move_index][new_ce];\n new_state = new_a + Na * new_ce;\n if (ptable[new_state] === max_depth) {\n ptable[new_state] = depth + 1;\n }\n }\n }\n }\n // don't bother filling in the table for depth >=10; this saves a substantial amount of time\n // on startup at a slight cost of pruning effectiveness\n return (cached_ptables.phase2_ace = ptable);\n}\n\nfunction* phase2_ida_solve_gen(indices, moves_left) {\n let [mtable_a, mtable_b] = generate_phase2_centre_mtables();\n let mtable_ce = generate_phase2_ce_mtable();\n let ptable_ace = generate_phase2_ace_ptable();\n let mirror_map = generate_phase2_ce_mirror_map();\n let [a, b, ce] = indices;\n let ce_mirror = mirror_map[ce];\n let bound = Math.max(\n ptable_ace[a + 2520 * ce],\n ptable_ace[b + 2520 * ce_mirror],\n );\n while (bound <= moves_left) {\n //console.log(`searching depth ${bound}`);\n yield* phase2_ida_search_gen(\n a,\n b,\n ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ptable_ace,\n mirror_map,\n bound,\n -1,\n );\n bound++;\n }\n}\n\nfunction* phase2_ida_search_gen(\n a,\n b,\n ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ptable_ace,\n mirror_map,\n bound,\n last,\n) {\n let h = Math.max(\n ptable_ace[a + 2520 * ce],\n ptable_ace[b + 2520 * mirror_map[ce]],\n );\n if (h > bound) {\n return;\n }\n if (bound === 0) {\n yield [];\n return;\n } else if (h === 0) {\n return;\n }\n for (let m = 0; m < 4; m++) {\n if (m === last) {\n continue;\n }\n let new_a = a;\n let new_b = b;\n let new_ce = ce;\n for (let r = 1; r <= 2; r++) {\n new_a = mtable_a[m][new_a];\n new_b = mtable_b[m][new_b];\n new_ce = mtable_ce[m][new_ce];\n let subpath_gen = phase2_ida_search_gen(\n new_a,\n new_b,\n new_ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ptable_ace,\n mirror_map,\n bound - 1,\n m,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) {\n break;\n }\n yield [[m, r]].concat(subpath);\n }\n }\n }\n}\n\n/* Phase 3 mostly-2-gen stuff */\n\nlet phase3_2gen_centre_indices = [0, 1, 2, 3, 4, 10, 11];\n\nlet phase3_2gen_keep = [\n true,\n true,\n true,\n true,\n true,\n false,\n false,\n false,\n false,\n false,\n true,\n true,\n];\n\nlet phase3_2gen_move_seqs = [\n [[0, 1]], // U\n [[1, 1]], // L\n\n // F U R U' R' F'\n [\n [2, 1],\n [0, 1],\n [3, 1],\n [0, 2],\n [3, 2],\n [2, 2],\n ],\n [\n [3, 2],\n [1, 2],\n [2, 2],\n [1, 1],\n [2, 1],\n [3, 1],\n ],\n [\n [6, 1],\n [0, 1],\n [3, 1],\n [0, 2],\n [3, 2],\n [6, 2],\n ],\n [\n [7, 2],\n [1, 2],\n [2, 2],\n [1, 1],\n [2, 1],\n [7, 1],\n ],\n\n // F U F' U F U F'\n [\n [2, 1],\n [0, 1],\n [2, 2],\n [0, 1],\n [2, 1],\n [0, 1],\n [2, 2],\n ],\n [\n [3, 2],\n [1, 1],\n [3, 1],\n [1, 1],\n [3, 2],\n [1, 1],\n [3, 1],\n ],\n\n // F R F' L' U' F R F'\n [\n [2, 1],\n [3, 1],\n [2, 2],\n [1, 2],\n [0, 2],\n [2, 1],\n [3, 1],\n [2, 2],\n ],\n [\n [3, 2],\n [2, 2],\n [3, 1],\n [0, 1],\n [1, 1],\n [3, 2],\n [2, 2],\n [3, 1],\n ],\n [\n [6, 1],\n [0, 1],\n [6, 2],\n [0, 2],\n [1, 2],\n [6, 1],\n [0, 1],\n [6, 2],\n ],\n [\n [7, 2],\n [1, 2],\n [7, 1],\n [1, 1],\n [0, 1],\n [7, 2],\n [1, 2],\n [7, 1],\n ],\n\n // F R' F' R U F' L F\n [\n [2, 1],\n [3, 2],\n [2, 2],\n [3, 1],\n [0, 1],\n [2, 2],\n [1, 1],\n [2, 1],\n ],\n [\n [3, 2],\n [2, 1],\n [3, 1],\n [2, 2],\n [1, 2],\n [3, 1],\n [0, 2],\n [3, 2],\n ],\n [\n [6, 1],\n [0, 2],\n [6, 2],\n [7, 1],\n [6, 1],\n [1, 2],\n [7, 1],\n [6, 1],\n ],\n [\n [7, 2],\n [1, 1],\n [7, 1],\n [6, 2],\n [7, 2],\n [0, 1],\n [6, 2],\n [7, 2],\n ],\n\n // F' L' F' R' F' R' U' R'\n [\n [2, 2],\n [1, 2],\n [2, 2],\n [3, 2],\n [2, 2],\n [3, 2],\n [0, 2],\n [3, 2],\n ],\n [\n [6, 2],\n [7, 2],\n [1, 2],\n [0, 2],\n [1, 2],\n [0, 2],\n [6, 2],\n [7, 2],\n ],\n /*\n[[2,1], [0,2], [2,2], [0,2], [2,1], [3,1], [0,2], [3,2], [2,2]], // F U' F' U' F R U' R' F'\n[[3,2], [1,1], [3,1], [1,1], [3,2], [2,2], [1,1], [2,1], [3,1]], // R' L R L R' F' L F R\n[[6,1], [3,2], [6,2], [1,2], [6,1], [0,1], [3,2], [0,2], [6,2]], // f R' f' L' f U R' U' f'\n[[7,2], [2,1], [7,1], [0,1], [7,2], [1,2], [2,1], [1,1], [7,1]], // r' F r U r' L' F L r\n[[2,1], [0,1], [3,1], [0,2], [3,2], [0,1], [3,1], [0,2], [3,2], [2,2]], // F (U R U' R')2 F'\n[[3,2], [1,2], [2,2], [1,1], [2,1], [1,2], [2,2], [1,1], [2,1], [3,1]], // R' (L' F' L F)2 R\n[[6,1], [0,1], [3,1], [0,2], [3,2], [0,1], [3,1], [0,2], [3,2], [6,2]], // f (U R U' R')2 f'\n[[7,2], [1,2], [2,2], [1,1], [2,1], [1,2], [2,2], [1,1], [2,1], [7,1]], // r' (L' F' L F)2 r\n*/\n];\nphase3_2gen_move_seqs = phase3_2gen_move_seqs.concat(\n phase3_2gen_move_seqs.map((seq) => invert_move_sequence(seq)),\n);\nlet phase3_2gen_nmoves = phase3_2gen_move_seqs.length; // = 36\n/*\nThe moves we're using for this phase:\nU\nL\nF U R U' R' F'\nR' L' F' L F R\nf U R U' R' f'\nr' L' F' L F r\nF U F' U F U F' (= F' U F U F' U F = r' F r U r' F r = r l U' l F l r')\nR' L R L R' L R (= R L R' L R L R' = f R f' L f R f' = f' u R u L' u f)\n\nF R F' L' U' F R F'\nR' F' R U L R' F' R\nf U f' U' L' f U f'\nr' L' r L U r' L' r\n\nF R' F' R U F' L F\nR' F R F' L' R U' R'\nf U' f' r f L' r f\nr' L r f' r' U f' r'\n\nF' L' F' R' F' R' U' R'\nf' r' L' U' L' U' f' r'\n\nand the inverses of the above\n\nThese are the atomic 4-gen move sequences of length <= 8 where the induced permutations lie in the\n<U,L> group (verified with GAP, barring transcription errors).\n\nTemporarily going out of LU 2-gen can sometimes save _many_ moves, e.g. the F R U R' U' F' scramble\nobviously has a 6-move 4-gen solution (F U R U' R' F'), but the optimal 2-gen solution is 24 moves:\nU L' U L' U' L' U' L U' L U L' U L' U L U L' U' L U' L U L'.\n*/\n\nlet phase3_2gen_facelet_permutations = phase3_2gen_move_seqs.map((seq) =>\n apply_move_sequence(permutation_from_cycles([], 72), seq),\n);\nlet phase3_2gen_piece_permutations = phase3_2gen_facelet_permutations.map(\n convert_move_to_permutations,\n);\nlet phase3_2gen_move_orders =\n phase3_2gen_facelet_permutations.map(permutation_order);\n\nfunction index_phase3_2gen(facelets) {\n let [itc, cti] = generate_comb4_lookup_tables(7, 3, 2, 0, 2);\n let ep = Array(5)\n .fill()\n .map((_, i) => get_edge_piece(facelets, i));\n let edge_coord = evenpermutation_to_index(ep);\n let corners = Array(4)\n .fill()\n .map((_, i) => get_corner_piece(facelets, i));\n let corner_coord =\n evenpermutation_to_index(corners.map((x) => x[0])) * 2 +\n corners.find((x) => x[0] === 0)[1];\n let [a_coord, b_coord] = [centreA_piece_facelets, centreB_piece_facelets].map(\n (facelet_indices) => {\n let arr = compose(facelet_indices, phase3_2gen_centre_indices).map(\n (x) => facelets[x] % 4,\n );\n return cti[arr.reduce((acc, x, j) => acc | (x << (2 * j)), 0)];\n },\n );\n return [a_coord + 210 * b_coord, corner_coord + 24 * edge_coord];\n}\n\nfunction generate_phase3_2gen_edge_mtable() {\n if (cached_mtables.phase3_2gen_edge) {\n return cached_mtables.phase3_2gen_edge;\n }\n const HALFFACT5 = factorial(5) / 2; // = 60\n let mtable = Array(phase3_2gen_nmoves)\n .fill()\n .map(() => new Uint32Array(HALFFACT5));\n let permutations = phase3_2gen_piece_permutations.map((x) =>\n x.ep.slice(0, 5),\n );\n for (let i = 0; i < HALFFACT5; i++) {\n let p = index_to_evenpermutation(i, 5);\n for (let m = 0; m < phase3_2gen_nmoves; m++) {\n mtable[m][i] = evenpermutation_to_index(compose(p, permutations[m]));\n }\n }\n return (cached_mtables.phase3_2gen_edge = mtable);\n}\n\n// the group of corner states is the binary tetrahedral group 2T, where |2T| = 24\nfunction generate_phase3_2gen_corner_mtable() {\n if (cached_mtables.phase3_2gen_corner) {\n return cached_mtables.phase3_2gen_corner;\n }\n const HALFFACT4 = factorial(4) / 2; // = 12\n const N = HALFFACT4 * 2; // = 24\n const keep = [\n true,\n true,\n true,\n true,\n false,\n false,\n true,\n true,\n true,\n true,\n false,\n false,\n ];\n let mtable = Array(phase3_2gen_nmoves)\n .fill()\n .map(() => new Uint32Array(N));\n let permutations = phase3_2gen_piece_permutations.map((x) =>\n reduce_permutation(x.cp, keep).slice(0, 4),\n );\n for (let i = 0; i < N; i += 2) {\n let p = index_to_evenpermutation(i >> 1, 4);\n let cp = p.concat(p.map((x) => x + 4));\n for (let m = 0; m < phase3_2gen_nmoves; m++) {\n let cp2 = compose(cp, permutations[m]);\n let p2 = cp2.map((x) => x % 4);\n let o2 = cp2.find((x) => x % 4 === 0) >> 2;\n mtable[m][i] = evenpermutation_to_index(p2) * 2 + o2;\n mtable[m][i + 1] = evenpermutation_to_index(p2) * 2 + (o2 ^ 1);\n }\n }\n return (cached_mtables.phase3_2gen_corner = mtable);\n}\n\nfunction generate_phase3_2gen_corneredge_mtable() {\n if (cached_mtables.phase3_2gen_corneredge) {\n return cached_mtables.phase3_2gen_corneredge;\n }\n return (cached_mtables.phase3_2gen_corneredge = combine_mtables(\n generate_phase3_2gen_corner_mtable(),\n generate_phase3_2gen_edge_mtable(),\n ));\n}\n\nfunction generate_phase3_2gen_centre_mtable() {\n if (cached_mtables.phase3_2gen_centre) {\n return cached_mtables.phase3_2gen_centre;\n }\n let mtable_a = generate_mtable_comb4_generic(\n 7,\n 3,\n 2,\n 0,\n 2,\n phase3_2gen_piece_permutations.map((x) =>\n reduce_permutation(x.ap, phase3_2gen_keep),\n ),\n );\n let mtable_b = generate_mtable_comb4_generic(\n 7,\n 3,\n 2,\n 0,\n 2,\n phase3_2gen_piece_permutations.map((x) =>\n reduce_permutation(x.bp, phase3_2gen_keep),\n ),\n );\n cached_mtables.phase3_2gen_centreA = mtable_a;\n cached_mtables.phase3_2gen_centreB = mtable_b;\n return (cached_mtables.phase3_2gen_centre = combine_mtables(\n mtable_a,\n mtable_b,\n ));\n}\n\nlet phase3_2gen_depth_table;\nfunction generate_phase3_2gen_depth_table() {\n if (phase3_2gen_depth_table) {\n return phase3_2gen_depth_table;\n }\n const mtable_ab = generate_phase3_2gen_centre_mtable();\n const mtable_ce = generate_phase3_2gen_corneredge_mtable();\n const Nab = mtable_ab[0].length; // = 44100\n const Nce = mtable_ce[0].length; // = 1440\n const N = Nab * Nce; // = 63504000\n const max_depth = 25; // pre-determined; hard-coding this makes the algorithm a bit faster\n const all_weights = phase3_2gen_move_seqs.map((seq) => seq.length);\n const table = new Int8Array(N).fill(max_depth);\n const solved_indices = index_phase3_2gen(solved_state);\n table[solved_indices[0] + Nab * solved_indices[1]] = 0;\n let depth = 0;\n let done = false;\n while (!done && depth < max_depth - 1) {\n done = true;\n //console.log(`scanning depth ${depth}`);\n let move_indices = Array(phase3_2gen_nmoves)\n .fill()\n .map((x, i) => i)\n .filter((m) => all_weights[m] + depth < max_depth);\n move_indices.sort((m, mm) => all_weights[m] - all_weights[mm]);\n let weights = compose(all_weights, move_indices);\n let mtable_ab_pruned = compose(mtable_ab, move_indices);\n let mtable_ce_pruned = compose(mtable_ce, move_indices);\n let nmoves = move_indices.length;\n //console.log(move_indices);\n for (\n let state = table.indexOf(depth);\n state !== -1;\n state = table.indexOf(depth, state + 1)\n ) {\n let ab = state % Nab;\n let ce = (state / Nab) | 0;\n for (let mi = 0; mi < nmoves; mi++) {\n let weight = weights[mi];\n let new_ab = mtable_ab_pruned[mi][ab];\n let new_ce = mtable_ce_pruned[mi][ce];\n let new_state = new_ab + Nab * new_ce;\n if (table[new_state] > depth + weight) {\n done = false;\n table[new_state] = depth + weight;\n }\n }\n }\n depth++;\n }\n return (phase3_2gen_depth_table = table);\n}\n\nlet phase3_2gen_ace_table;\nfunction generate_phase3_2gen_ace_table() {\n if (phase3_2gen_ace_table) {\n return phase3_2gen_ace_table;\n }\n const mtable_ab = generate_phase3_2gen_centre_mtable();\n const mtable_a = cached_mtables.phase3_2gen_centreA;\n const mtable_ce = generate_phase3_2gen_corneredge_mtable();\n const Na = mtable_a[0].length; // = 210\n const Nce = mtable_ce[0].length; // = 1440\n const N = Na * Nce; // = 302400\n const max_depth = 25; // pre-determined; hard-coding this makes the algorithm a bit faster\n const all_weights = phase3_2gen_move_seqs.map((seq) => seq.length);\n const table = new Int8Array(N).fill(max_depth);\n const solved_indices = index_phase3_2gen(solved_state);\n table[(solved_indices[0] % Na) + Na * solved_indices[1]] = 0;\n let depth = 0;\n let done = false;\n while (!done && depth < max_depth - 1) {\n done = true;\n //console.log(`scanning depth ${depth}`);\n let move_indices = Array(phase3_2gen_nmoves)\n .fill()\n .map((x, i) => i)\n .filter((m) => all_weights[m] + depth < max_depth);\n move_indices.sort((m, mm) => all_weights[m] - all_weights[mm]);\n let weights = compose(all_weights, move_indices);\n let mtable_a_pruned = compose(mtable_a, move_indices);\n let mtable_ce_pruned = compose(mtable_ce, move_indices);\n let nmoves = move_indices.length;\n //console.log(move_indices);\n for (\n let state = table.indexOf(depth);\n state !== -1;\n state = table.indexOf(depth, state + 1)\n ) {\n let a = state % Na;\n let ce = (state / Na) | 0;\n for (let mi = 0; mi < nmoves; mi++) {\n let weight = weights[mi];\n let new_a = mtable_a_pruned[mi][a];\n let new_ce = mtable_ce_pruned[mi][ce];\n let new_state = new_a + Na * new_ce;\n if (table[new_state] > depth + weight) {\n done = false;\n table[new_state] = depth + weight;\n }\n }\n }\n depth++;\n }\n return (phase3_2gen_ace_table = table);\n}\n\nlet phase3_2gen_ce_mirror_map;\nfunction generate_phase3_2gen_ce_mirror_map() {\n if (phase3_2gen_ce_mirror_map) {\n return phase3_2gen_ce_mirror_map;\n }\n const mtable_ce = generate_phase3_2gen_corneredge_mtable().slice(0, 2);\n const solved_indices = index_phase3_2gen(solved_state);\n return (phase3_2gen_ce_mirror_map = generate_mirrored_coordinate_table(\n mtable_ce,\n solved_indices[1],\n solved_indices[1],\n ));\n}\n\n/*\nfunction solve_phase3_2gen(facelets, indices=index_phase3_2gen(facelets), simplify=true)\n{\n\tlet [ab, ce] = indices;\n\tlet Nab = 44100;\n\tlet mtable_ab = generate_phase3_2gen_centre_mtable();\n\tlet mtable_ce = generate_phase3_2gen_corneredge_mtable();\n\tlet depth_table = generate_phase3_2gen_depth_table();\n\tlet seq = [];\n\twhile (depth_table[ab + Nab*ce] > 0)\n\t{\n\t\tlet distance = depth_table[ab + Nab*ce];\n\t\tfor (let m = 0; m < phase3_2gen_nmoves; m++)\n\t\t{\n\t\t\tlet new_ab = mtable_ab[m][ab];\n\t\t\tlet new_ce = mtable_ce[m][ce];\n\t\t\tlet new_distance = depth_table[new_ab + Nab*new_ce];\n\t\t\tif (new_distance === distance-phase3_2gen_move_seqs[m].length)\n\t\t\t{\n\t\t\t\tseq = seq.concat(phase3_2gen_move_seqs[m]);\n\t\t\t\tab = new_ab;\n\t\t\t\tce = new_ce;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplify ? simplify_move_sequence(seq) : seq;\n}\n*/\n\nfunction solve_phase3_2gen(facelets, indices = index_phase3_2gen(facelets)) {\n //const THRESHOLD = 31;\n let [ab, ce] = indices;\n let a = ab % 210;\n let b = Math.floor(ab / 210);\n let mtable_ab = generate_phase3_2gen_centre_mtable();\n let mtable_a = cached_mtables.phase3_2gen_centreA;\n let mtable_b = cached_mtables.phase3_2gen_centreB;\n let mtable_ce = generate_phase3_2gen_corneredge_mtable();\n let ace_table = generate_phase3_2gen_ace_table();\n let mirror_map_ce = generate_phase3_2gen_ce_mirror_map();\n let bound = 0;\n while (true) {\n let gen = solve_phase3_2gen_ida(\n a,\n b,\n ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ace_table,\n mirror_map_ce,\n bound,\n );\n for (let solution of gen) {\n return solution.map((m) => phase3_2gen_move_seqs[m]).flat();\n }\n bound++;\n }\n}\n\nfunction solve_phase3_2gen_readable(\n facelets,\n indices = index_phase3_2gen(facelets),\n) {\n //const THRESHOLD = 31;\n let [ab, ce] = indices;\n let a = ab % 210;\n let b = Math.floor(ab / 210);\n let mtable_ab = generate_phase3_2gen_centre_mtable();\n let mtable_a = cached_mtables.phase3_2gen_centreA;\n let mtable_b = cached_mtables.phase3_2gen_centreB;\n let mtable_ce = generate_phase3_2gen_corneredge_mtable();\n //let depth_table = generate_phase3_2gen_depth_table();\n let ace_table = generate_phase3_2gen_ace_table();\n let mirror_map_ce = generate_phase3_2gen_ce_mirror_map();\n let initial = solve_phase3_2gen(facelets).length;\n let best_score = Infinity;\n let best_solution;\n //console.log(`initial: ${initial}`);\n for (let bound = initial; bound <= initial + 0; bound++) {\n let gen = solve_phase3_2gen_ida(\n a,\n b,\n ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ace_table,\n mirror_map_ce,\n bound,\n );\n for (let solution of gen) {\n let expanded = solution.map((m) => phase3_2gen_move_seqs[m]).flat();\n let simplified = simplify_move_sequence(expanded);\n let score = grade_readability(simplified);\n if (score < best_score) {\n best_score = score;\n best_solution = simplified;\n //console.log(`${score} ${stringify_move_sequence(simplified, true)}`);\n //if (score <= THRESHOLD) {break search;}\n }\n }\n }\n return best_solution;\n}\n\nfunction alternation_penalty(x) {\n return ((x - 1) * (x - 2)) / 2;\n // A B A B A costs 1\n // A B A B A B costs 3\n // A B A B A B A costs 6\n // A B A B A B A B costs 10\n // etc.\n // this should be chosen to be a convex function\n}\n\nfunction grade_readability(seq) {\n let nowide = stringify_move_sequence(seq, true).replace(/'/g, \"\").split(\" \");\n return (\n seq.length +\n alternations(nowide)\n .map(alternation_penalty)\n .reduce((x, y) => x + y, 0)\n );\n}\n\nfunction alternations(seq) {\n // return a list of \"alternating\" run lengths\n // convention:\n // A B does not count\n // A B A counts as length 1\n // A B A B counts as length 2\n // A B A B A counts as length 3\n // etc.\n if (seq.length < 3) {\n return [];\n }\n let n = seq.length;\n let a = [];\n for (let i = 0; i < n - 2; i++) {\n a[i] = seq[i] === seq[i + 2];\n }\n a.push(false);\n let i = -1;\n let runs = [];\n while (i < n - 2) {\n i = a.indexOf(true, i + 1);\n if (i === -1) {\n break;\n }\n let j = a.indexOf(false, i + 1);\n runs.push(j - i);\n i = j;\n }\n return runs;\n}\n\nfunction* solve_phase3_2gen_ida(\n a,\n b,\n ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ace_table,\n mirror_map_ce,\n bound,\n last = -1,\n) {\n let h_ace = ace_table[a + 210 * ce];\n let h_bce = ace_table[b + 210 * mirror_map_ce[ce]];\n let h = Math.max(h_ace, h_bce);\n //console.log(h_ace, h_bce, bound);\n if (h > bound) {\n return;\n }\n if (bound === 0) {\n yield [];\n return;\n }\n if (h === 0) {\n return;\n } // this solution includes redundant moves\n for (let m = 0; m < phase3_2gen_nmoves; m++) {\n if (m === last && phase3_2gen_move_orders[m] <= 3) {\n continue;\n }\n let new_a = mtable_a[m][a];\n let new_b = mtable_b[m][b];\n let new_ce = mtable_ce[m][ce];\n let new_bound = bound - phase3_2gen_move_seqs[m].length;\n if (new_bound < 0) {\n continue;\n }\n let subpath_gen = solve_phase3_2gen_ida(\n new_a,\n new_b,\n new_ce,\n mtable_a,\n mtable_b,\n mtable_ce,\n ace_table,\n mirror_map_ce,\n new_bound,\n m,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) {\n break;\n }\n yield [m].concat(subpath);\n }\n }\n}\n\n/* Some glue code */\n\nfunction solve_phase2_and_phase3_fast(\n facelets,\n phase2_attempts = 200,\n cap = 24,\n) {\n let pool = [];\n let gen = solve_phase2_gen(facelets);\n let facelets_t2 = compose(facelets, move_X).map((x) => x ^ 1);\n let gen_t2 = solve_phase2_gen(facelets_t2);\n let best = Array(1000);\n // phase 2 always takes <= 15 moves and phase 3 <= 25 moves, so this is a safe upper bound\n for (let i = 0; i < phase2_attempts; i++) {\n {\n let { value, done } = gen.next();\n if (!done) {\n let intermediate_facelets = apply_move_sequence(facelets, value);\n let solution = value.concat(solve_phase3_2gen(intermediate_facelets));\n if (solution.length <= cap) {\n return solution;\n } else if (solution.length < best.length) {\n best = solution;\n }\n }\n }\n {\n let { value, done } = gen_t2.next();\n if (!done) {\n let intermediate_facelets = apply_move_sequence(facelets_t2, value);\n let solution = value\n .concat(solve_phase3_2gen(intermediate_facelets))\n .map(([m, r]) => [m ^ 2, r]);\n if (solution.length <= cap) {\n return solution;\n } else if (solution.length < best.length) {\n best = solution;\n }\n }\n }\n }\n return best;\n}\n\nfunction solve_phase2_and_phase3_readable(\n facelets,\n phase2_attempts = 20,\n cap = 30,\n) {\n let pool = [];\n let gen = solve_phase2_gen(facelets);\n let facelets_t2 = compose(facelets, move_X).map((x) => x ^ 1);\n let gen_t2 = solve_phase2_gen(facelets_t2);\n let best;\n let best_score = Infinity;\n for (let i = 0; i < phase2_attempts; i++) {\n {\n let { value, done } = gen.next();\n if (!done) {\n let intermediate_facelets = apply_move_sequence(facelets, value);\n let solution = simplify_move_sequence(\n value.concat(solve_phase3_2gen_readable(intermediate_facelets)),\n );\n let score = grade_readability(solution);\n if (score <= cap) {\n return solution;\n } else if (score < best_score) {\n best = solution;\n best_score = score;\n }\n }\n }\n {\n let { value, done } = gen_t2.next();\n if (!done) {\n let intermediate_facelets = apply_move_sequence(facelets_t2, value);\n let solution = simplify_move_sequence(\n value.concat(solve_phase3_2gen_readable(intermediate_facelets)),\n );\n solution = solution.map(([m, r]) => [m ^ 2, r]);\n let score = grade_readability(solution);\n if (score <= cap) {\n return solution;\n } else if (score < best_score) {\n best = solution;\n best_score = score;\n }\n }\n }\n }\n return best;\n}\n\nexport function randomFTOScrambleString() {\n return generate_random_state_scramble();\n}\n"],
|
|
5
5
|
"mappings": "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IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,EACP;AAAA,EAGA;AAAA,IACE,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,EACP;AAAA,EACA;AAAA,IACE,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,EACP;AAAA,EACA;AAAA,IACE,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,EACP;AAAA,EACA;AAAA,IACE,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,EACP;AAAA,EAGA;AAAA,IACE,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,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",
|
|
6
6
|
"names": ["evenpermutation8_to_index", "index_to_evenpermutation8", "C", "i"]
|