@rednaxela101/cubing 0.63.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -0
- package/alg/index.d.ts +1 -0
- package/bluetooth/index.d.ts +1 -0
- package/dist/bin/chunks/chunk-22VWCGBC.js +13 -0
- package/dist/bin/chunks/chunk-22VWCGBC.js.map +7 -0
- package/dist/bin/order.js +59 -0
- package/dist/bin/order.js.map +7 -0
- package/dist/bin/puzzle-geometry-bin.js +407 -0
- package/dist/bin/puzzle-geometry-bin.js.map +7 -0
- package/dist/bin/scramble.js +188 -0
- package/dist/bin/scramble.js.map +7 -0
- package/dist/bin/svg.js +56 -0
- package/dist/bin/svg.js.map +7 -0
- package/dist/lib/cubing/alg/index.d.ts +2 -0
- package/dist/lib/cubing/alg/index.js +43 -0
- package/dist/lib/cubing/alg/index.js.map +7 -0
- package/dist/lib/cubing/bluetooth/index.d.ts +189 -0
- package/dist/lib/cubing/bluetooth/index.js +2271 -0
- package/dist/lib/cubing/bluetooth/index.js.map +7 -0
- package/dist/lib/cubing/chunks/big-puzzle-orientation-BA6QHO5C.js +68 -0
- package/dist/lib/cubing/chunks/big-puzzle-orientation-BA6QHO5C.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-2VJB4TMH.js +1774 -0
- package/dist/lib/cubing/chunks/chunk-2VJB4TMH.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-52ZXJEUO.js +665 -0
- package/dist/lib/cubing/chunks/chunk-52ZXJEUO.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-56VZAEPF.js +274 -0
- package/dist/lib/cubing/chunks/chunk-56VZAEPF.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-7GUL3OBQ.js +9 -0
- package/dist/lib/cubing/chunks/chunk-7GUL3OBQ.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-7L7BJSIM.js +21 -0
- package/dist/lib/cubing/chunks/chunk-7L7BJSIM.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-AESPJKN6.js +265 -0
- package/dist/lib/cubing/chunks/chunk-AESPJKN6.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-C2Q347XS.js +89 -0
- package/dist/lib/cubing/chunks/chunk-C2Q347XS.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-CGBMJBU3.js +1195 -0
- package/dist/lib/cubing/chunks/chunk-CGBMJBU3.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-HZQONEMD.js +249 -0
- package/dist/lib/cubing/chunks/chunk-HZQONEMD.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-IAGCVPL3.js +1069 -0
- package/dist/lib/cubing/chunks/chunk-IAGCVPL3.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-NAPITA3L.js +1 -0
- package/dist/lib/cubing/chunks/chunk-NAPITA3L.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-XPDJUSZ7.js +1876 -0
- package/dist/lib/cubing/chunks/chunk-XPDJUSZ7.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-YSI6PF35.js +619 -0
- package/dist/lib/cubing/chunks/chunk-YSI6PF35.js.map +7 -0
- package/dist/lib/cubing/chunks/inside-LG2EAKCL.js +557 -0
- package/dist/lib/cubing/chunks/inside-LG2EAKCL.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-2x2x2-JYJJXB4V.js +142 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-2x2x2-JYJJXB4V.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-3x3x3-FYXD7SIU.js +365 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-3x3x3-FYXD7SIU.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js +132 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-5x5x5-JUNRX27W.js +277 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-5x5x5-JUNRX27W.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-clock-USGQTDPO.js +836 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-clock-USGQTDPO.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-fto-WJHMLYCJ.js +100 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-fto-WJHMLYCJ.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-megaminx-2LVHIDL4.js +224 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-megaminx-2LVHIDL4.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-pyraminx-7UWX4HHI.js +93 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-pyraminx-7UWX4HHI.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-square1-PQEKBPFN.js +842 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-square1-PQEKBPFN.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-2x2x2-XFKQ4VJS.js +125 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-2x2x2-XFKQ4VJS.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-megaminx-ZDOOLEDW.js +1564 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-megaminx-ZDOOLEDW.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-pyraminx-W6UJWBYY.js +108 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-pyraminx-W6UJWBYY.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-skewb-FXGKV4KD.js +125 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-skewb-FXGKV4KD.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-YK6HA7BK.js +644 -0
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-YK6HA7BK.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-3x3x3-DLMAGPXS.js +2549 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-3x3x3-DLMAGPXS.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NONXQHOJ.js +2923 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NONXQHOJ.js.map +7 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-3GQ2HLSW.js +1405 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-3GQ2HLSW.js.map +7 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js +19 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js.map +7 -0
- package/dist/lib/cubing/chunks/square1-stickerings-W2ZLZWIN.js +73 -0
- package/dist/lib/cubing/chunks/square1-stickerings-W2ZLZWIN.js.map +7 -0
- package/dist/lib/cubing/chunks/twips-2RNTWYNZ.js +433 -0
- package/dist/lib/cubing/chunks/twips-2RNTWYNZ.js.map +7 -0
- package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-23XTPLIK.js +10 -0
- package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-23XTPLIK.js.map +7 -0
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-JO6OGKOF.js +2424 -0
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-JO6OGKOF.js.map +7 -0
- package/dist/lib/cubing/index-BX6f56uo.d.ts +76 -0
- package/dist/lib/cubing/index-CcRu94bx.d.ts +2622 -0
- package/dist/lib/cubing/kpuzzle/index.d.ts +2 -0
- package/dist/lib/cubing/kpuzzle/index.js +12 -0
- package/dist/lib/cubing/kpuzzle/index.js.map +7 -0
- package/dist/lib/cubing/notation/index.d.ts +32 -0
- package/dist/lib/cubing/notation/index.js +20 -0
- package/dist/lib/cubing/notation/index.js.map +7 -0
- package/dist/lib/cubing/outside-BCzgSYQ_.d.ts +38 -0
- package/dist/lib/cubing/protocol/index.d.ts +28 -0
- package/dist/lib/cubing/protocol/index.js +20 -0
- package/dist/lib/cubing/protocol/index.js.map +7 -0
- package/dist/lib/cubing/puzzle-geometry/index.d.ts +2 -0
- package/dist/lib/cubing/puzzle-geometry/index.js +5024 -0
- package/dist/lib/cubing/puzzle-geometry/index.js.map +7 -0
- package/dist/lib/cubing/puzzles/index.d.ts +2 -0
- package/dist/lib/cubing/puzzles/index.js +23 -0
- package/dist/lib/cubing/puzzles/index.js.map +7 -0
- package/dist/lib/cubing/scramble/index.d.ts +2 -0
- package/dist/lib/cubing/scramble/index.js +16 -0
- package/dist/lib/cubing/scramble/index.js.map +7 -0
- package/dist/lib/cubing/search/index.d.ts +7 -0
- package/dist/lib/cubing/search/index.js +37 -0
- package/dist/lib/cubing/search/index.js.map +7 -0
- package/dist/lib/cubing/stream/index.d.ts +2 -0
- package/dist/lib/cubing/stream/index.js +111 -0
- package/dist/lib/cubing/stream/index.js.map +7 -0
- package/dist/lib/cubing/twisty/index.d.ts +2 -0
- package/dist/lib/cubing/twisty/index.js +6236 -0
- package/dist/lib/cubing/twisty/index.js.map +7 -0
- package/experimental-json-schema/kpuzzle/KPatternData.schema.json +34 -0
- package/experimental-json-schema/kpuzzle/KPuzzleDefinition.schema.json +97 -0
- package/experimental-json-schema/kpuzzle/KTransformationData.schema.json +27 -0
- package/kpuzzle/index.d.ts +1 -0
- package/notation/index.d.ts +1 -0
- package/package.json +146 -0
- package/protocol/index.d.ts +1 -0
- package/puzzle-geometry/index.d.ts +1 -0
- package/puzzles/index.d.ts +1 -0
- package/scramble/index.d.ts +1 -0
- package/search/index.d.ts +1 -0
- package/stream/index.d.ts +1 -0
- package/twisty/index.d.ts +1 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cubing/vendor/mit/cs0x7f/fto/scramble_fto_standalone.js"],
|
|
4
|
+
"sourcesContent": ["// @ts-nocheck\r\n\r\n// From https://gist.github.com/cs0x7f/1579492aa43c794d529057386c489702\r\n\r\n\"use strict\";\r\n\r\nimport { randomUIntBelow } from \"random-uint-below\";\r\nimport { Alg } from \"../../../../../cubing/alg\";\r\n\r\n/*\r\nMIT Licence\r\n\r\nCopyright (c) 2024 Chen Shuang\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\n\r\n/*\r\n\r\n*/\r\nvar DEBUG = false;\r\n\r\nvar mathlib = (function() {\r\n\tvar fact = [1];\r\n\tfor (var i = 0; i < 32; ++i) {\r\n\t\tfact[i + 1] = fact[i] * (i + 1);\r\n\t}\r\n\r\n\tfunction circle(arr) {\r\n\t\tvar length = arguments.length - 1,\r\n\t\t\ttemp = arr[arguments[length]];\r\n\t\tfor (var i = length; i > 1; i--) {\r\n\t\t\tarr[arguments[i]] = arr[arguments[i - 1]];\r\n\t\t}\r\n\t\tarr[arguments[1]] = temp;\r\n\t\treturn circle;\r\n\t}\r\n\r\n\tfunction getPruning(table, index) {\r\n\t\treturn table[index >> 3] >> ((index & 7) << 2) & 15;\r\n\t}\r\n\r\n\tfunction setNPerm(arr, idx, n, even) {\r\n\t\tvar prt = 0;\r\n\t\tif (even < 0) {\r\n\t\t\tidx <<= 1;\r\n\t\t}\r\n\t\tif (n >= 16) {\r\n\t\t\tarr[n - 1] = 0;\r\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\r\n\t\t\t\tarr[i] = idx % (n - i);\r\n\t\t\t\tprt ^= arr[i];\r\n\t\t\t\tidx = ~~(idx / (n - i));\r\n\t\t\t\tfor (var j = i + 1; j < n; j--) {\r\n\t\t\t\t\tarr[j] >= arr[i] && arr[j]++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (even < 0 && (prt & 1) != 0) {\r\n\t\t\t\tvar tmp = arr[n - 1];\r\n\t\t\t\tarr[n - 1] = arr[n - 2];\r\n\t\t\t\tarr[n - 2] = tmp;\r\n\t\t\t}\r\n\t\t\treturn arr;\r\n\t\t}\r\n\t\tvar vall = 0x76543210;\r\n\t\tvar valh = 0xfedcba98;\r\n\t\tfor (var i = 0; i < n - 1; i++) {\r\n\t\t\tvar p = fact[n - 1 - i];\r\n\t\t\tvar v = idx / p;\r\n\t\t\tidx = idx % p;\r\n\t\t\tprt ^= v;\r\n\t\t\tv <<= 2;\r\n\t\t\tif (v >= 32) {\r\n\t\t\t\tv = v - 32;\r\n\t\t\t\tarr[i] = valh >> v & 0xf;\r\n\t\t\t\tvar m = (1 << v) - 1;\r\n\t\t\t\tvalh = (valh & m) + ((valh >> 4) & ~m);\r\n\t\t\t} else {\r\n\t\t\t\tarr[i] = vall >> v & 0xf;\r\n\t\t\t\tvar m = (1 << v) - 1;\r\n\t\t\t\tvall = (vall & m) + ((vall >>> 4) & ~m) + (valh << 28);\r\n\t\t\t\tvalh = valh >> 4;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (even < 0 && (prt & 1) != 0) {\r\n\t\t\tarr[n - 1] = arr[n - 2];\r\n\t\t\tarr[n - 2] = vall & 0xf;\r\n\t\t} else {\r\n\t\t\tarr[n - 1] = vall & 0xf;\r\n\t\t}\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tfunction getNPerm(arr, n, even) {\r\n\t\tn = n || arr.length;\r\n\t\tvar idx = 0;\r\n\t\tif (n >= 16) {\r\n\t\t\tfor (var i = 0; i < n - 1; i++) {\r\n\t\t\t\tidx *= n - i;\r\n\t\t\t\tfor (var j = i + 1; j < n; j++) {\r\n\t\t\t\t\tarr[j] < arr[i] && idx++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn even < 0 ? (idx >> 1) : idx;\r\n\t\t}\r\n\t\tvar vall = 0x76543210;\r\n\t\tvar valh = 0xfedcba98;\r\n\t\tfor (var i = 0; i < n - 1; i++) {\r\n\t\t\tvar v = arr[i] << 2;\r\n\t\t\tidx *= n - i;\r\n\t\t\tif (v >= 32) {\r\n\t\t\t\tidx += (valh >> (v - 32)) & 0xf;\r\n\t\t\t\tvalh -= 0x11111110 << (v - 32);\r\n\t\t\t} else {\r\n\t\t\t\tidx += (vall >> v) & 0xf;\r\n\t\t\t\tvalh -= 0x11111111;\r\n\t\t\t\tvall -= 0x11111110 << v;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn even < 0 ? (idx >> 1) : idx;\r\n\t}\r\n\r\n\tfunction getNParity(idx, n) {\r\n\t\tvar i, p;\r\n\t\tp = 0;\r\n\t\tfor (i = n - 2; i >= 0; --i) {\r\n\t\t\tp ^= idx % (n - i);\r\n\t\t\tidx = ~~(idx / (n - i));\r\n\t\t}\r\n\t\treturn p & 1;\r\n\t}\r\n\r\n\tfunction getNOri(arr, n, evenbase) {\r\n\t\tvar base = Math.abs(evenbase);\r\n\t\tvar idx = evenbase < 0 ? 0 : arr[0] % base;\r\n\t\tfor (var i = n - 1; i > 0; i--) {\r\n\t\t\tidx = idx * base + arr[i] % base;\r\n\t\t}\r\n\t\treturn idx;\r\n\t}\r\n\r\n\tfunction setNOri(arr, idx, n, evenbase) {\r\n\t\tvar base = Math.abs(evenbase);\r\n\t\tvar parity = base * n;\r\n\t\tfor (var i = 1; i < n; i++) {\r\n\t\t\tarr[i] = idx % base;\r\n\t\t\tparity -= arr[i];\r\n\t\t\tidx = ~~(idx / base);\r\n\t\t}\r\n\t\tarr[0] = (evenbase < 0 ? parity : idx) % base;\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tfunction bitCount(x) {\r\n\t\tx -= (x >> 1) & 0x55555555;\r\n\t\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\r\n\t\treturn ((x + (x >> 4) & 0xf0f0f0f) * 0x1010101) >> 24;\r\n\t}\r\n\r\n\tfunction getMPerm(arr, n, cnts, cums) {\r\n\t\tvar seen = ~0;\r\n\t\tvar idx = 0;\r\n\t\tvar x = 1;\r\n\t\tfor (var i = 0; i < n; i++) {\r\n\t\t\tvar pi = arr[i];\r\n\t\t\tidx = idx * (n - i) + bitCount(seen & ((1 << cums[pi]) - 1)) * x;\r\n\t\t\tx = x * cnts[pi]--;\r\n\t\t\tseen &= ~(1 << (cums[pi] + cnts[pi]));\r\n\t\t}\r\n\t\treturn Math.round(idx / x);\r\n\t}\r\n\r\n\tfunction setMPerm(arr, idx, n, cnts, x) {\r\n\t\tfor (var i = 0; i < n; i++) {\r\n\t\t\tfor (var j = 0; j < cnts.length; j++) {\r\n\t\t\t\tif (cnts[j] == 0) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tvar x2 = ~~(x * cnts[j] / (n - i));\r\n\t\t\t\tif (idx < x2) {\r\n\t\t\t\t\tcnts[j]--;\r\n\t\t\t\t\tarr[i] = j;\r\n\t\t\t\t\tx = x2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tidx -= x2;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn arr;\r\n\t}\r\n\r\n\t// type: 'p' (permutation), 'o' (orientation), 'c' (combination)\r\n\t// evenbase: base for ori, sign for even parity, cnts for combination\r\n\tfunction Coord(type, length, evenbase) {\r\n\t\tthis.length = length;\r\n\t\tthis.evenbase = evenbase;\r\n\t\tif (type == 'p') {\r\n\t\t\tthis.get = function(arr) {\r\n\t\t\t\treturn getNPerm(arr, this.length, this.evenbase);\r\n\t\t\t};\r\n\t\t\tthis.set = function(arr, idx) {\r\n\t\t\t\treturn setNPerm(arr, idx, this.length, this.evenbase);\r\n\t\t\t};\r\n\t\t} else if (type == 'o') {\r\n\t\t\tthis.get = function(arr) {\r\n\t\t\t\treturn getNOri(arr, this.length, this.evenbase);\r\n\t\t\t};\r\n\t\t\tthis.set = function(arr, idx) {\r\n\t\t\t\treturn setNOri(arr, idx, this.length, this.evenbase);\r\n\t\t\t};\r\n\t\t} else if (type == 'c') {\r\n\t\t\tvar cnts = evenbase;\r\n\t\t\tthis.cnts = cnts.slice();\r\n\t\t\tthis.cntn = this.cnts.length;\r\n\t\t\tthis.cums = [0];\r\n\t\t\tfor (var i = 1; i <= this.cntn; i++) {\r\n\t\t\t\tthis.cums[i] = this.cums[i - 1] + cnts[i - 1];\r\n\t\t\t}\r\n\t\t\tthis.n = this.cums[this.cntn];\r\n\t\t\tvar n = this.n;\r\n\t\t\tvar x = 1;\r\n\t\t\tfor (var i = 0; i < this.cntn; i++) {\r\n\t\t\t\tfor (var j = 1; j <= cnts[i]; j++, n--) {\r\n\t\t\t\t\tx *= n / j;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.x = Math.round(x);\r\n\t\t\tthis.get = function(arr) {\r\n\t\t\t\treturn getMPerm(arr, this.n, this.cnts.slice(), this.cums);\r\n\t\t\t};\r\n\t\t\tthis.set = function(arr, idx) {\r\n\t\t\t\treturn setMPerm(arr, idx, this.n, this.cnts.slice(), this.x);\r\n\t\t\t};\r\n\t\t} else { // invalid type\r\n\t\t\tdebugger;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillFacelet(facelets, f, perm, ori, divcol) {\r\n\t\tfor (var i = 0; i < facelets.length; i++) {\r\n\t\t\tvar cubie = facelets[i];\r\n\t\t\tvar p = perm[i] === undefined ? i : perm[i];\r\n\t\t\tif (typeof(cubie) == 'number') {\r\n\t\t\t\tf[cubie] = ~~(facelets[p] / divcol);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvar o = ori[i] || 0;\r\n\t\t\tfor (var j = 0; j < cubie.length; j++) {\r\n\t\t\t\tf[cubie[(j + o) % cubie.length]] = ~~(facelets[p][j] / divcol);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction detectFacelet(facelets, f, perm, ori, divcol) {\r\n\t\tfor (var i = 0; i < facelets.length; i++) {\r\n\t\t\tvar n_ori = facelets[i].length;\r\n\t\t\touter_loop: for (var j = 0; j < facelets.length + 1; j++) {\r\n\t\t\t\tif (j == facelets.length) { // not matched\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if (facelets[j].length != n_ori) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tfor (var o = 0; o < n_ori; o++) {\r\n\t\t\t\t\tvar isMatch = true;\r\n\t\t\t\t\tfor (var t = 0; t < n_ori; t++) {\r\n\t\t\t\t\t\tif (~~(facelets[j][t] / divcol) != f[facelets[i][(t + o) % n_ori]]) {\r\n\t\t\t\t\t\t\tisMatch = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (isMatch) {\r\n\t\t\t\t\t\tperm[i] = j;\r\n\t\t\t\t\t\tori[i] = o;\r\n\t\t\t\t\t\tbreak outer_loop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfunction createMoveHash(initState, validMoves, hashFunc, moveFunc) {\r\n\t\tvar states = [initState];\r\n\t\tvar hash2idx = {};\r\n\t\tvar depthEnds = [];\r\n\t\thash2idx[hashFunc(initState)] = 0;\r\n\t\tdepthEnds[0] = 1;\r\n\t\tvar moveTable = [];\r\n\t\tfor (var m = 0; m < validMoves.length; m++) {\r\n\t\t\tmoveTable[m] = [];\r\n\t\t}\r\n\t\tvar tt = +new Date;\r\n\t\tfor (var i = 0; i < states.length; i++) {\r\n\t\t\tif (i == depthEnds[depthEnds.length - 1]) {\r\n\t\t\t\tdepthEnds.push(states.length);\r\n\t\t\t}\r\n\t\t\tif (i % 10000 == 9999) {\r\n\t\t\t\tDEBUG && console.log(i, 'states scanned, tt=', +new Date - tt);\r\n\t\t\t}\r\n\t\t\tvar curState = states[i];\r\n\t\t\tfor (var m = 0; m < validMoves.length; m++) {\r\n\t\t\t\tvar newState = moveFunc(curState, validMoves[m]);\r\n\t\t\t\tif (!newState) {\r\n\t\t\t\t\tmoveTable[m][i] = -1;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tvar newHash = hashFunc(newState);\r\n\t\t\t\tif (!(newHash in hash2idx)) {\r\n\t\t\t\t\thash2idx[newHash] = states.length;\r\n\t\t\t\t\tstates.push(newState);\r\n\t\t\t\t}\r\n\t\t\t\tmoveTable[m][i] = hash2idx[newHash];\r\n\t\t\t}\r\n\t\t}\r\n\t\tDEBUG && console.log('[move hash] ' + states.length + ' states generated, tt=', +new Date - tt, JSON.stringify(depthEnds));\r\n\t\treturn [moveTable, hash2idx];\r\n\t}\r\n\r\n\tfunction createPrun(prun, init, size, maxd, doMove, N_MOVES, N_POWER, N_INV) {\r\n\t\tvar isMoveTable = Array.isArray(doMove);\r\n\t\tN_MOVES = N_MOVES || 6;\r\n\t\tN_POWER = N_POWER || 3;\r\n\t\tN_INV = N_INV || 256;\r\n\t\tmaxd = maxd || 256;\r\n\t\tfor (var i = 0, len = (size + 7) >>> 3; i < len; i++) {\r\n\t\t\tprun[i] = -1;\r\n\t\t}\r\n\t\tif (!Array.isArray(init)) {\r\n\t\t\tinit = [init];\r\n\t\t}\r\n\t\tfor (var i = 0; i < init.length; i++) {\r\n\t\t\tprun[init[i] >> 3] ^= 15 << ((init[i] & 7) << 2);\r\n\t\t}\r\n\t\tvar val = 0;\r\n\t\t// var t = +new Date;\r\n\t\tfor (var l = 0; l <= maxd; l++) {\r\n\t\t\tvar done = 0;\r\n\t\t\tvar inv = l >= N_INV;\r\n\t\t\tvar fill = (l + 1) ^ 15;\r\n\t\t\tvar find = inv ? 0xf : l;\r\n\t\t\tvar check = inv ? l : 0xf;\r\n\r\n\t\t\touter_loop: for (var p = 0; p < size; p++, val >>= 4) {\r\n\t\t\t\tif ((p & 7) == 0) {\r\n\t\t\t\t\tval = prun[p >> 3];\r\n\t\t\t\t\tif (!inv && val == -1) {\r\n\t\t\t\t\t\tp += 7;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif ((val & 0xf) != find) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tfor (var m = 0; m < N_MOVES; m++) {\r\n\t\t\t\t\tvar q = p;\r\n\t\t\t\t\tfor (var c = 0; c < N_POWER; c++) {\r\n\t\t\t\t\t\tq = isMoveTable ? doMove[m][q] : doMove(q, m);\r\n\t\t\t\t\t\tif (q < 0) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (getPruning(prun, q) != check) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t++done;\r\n\t\t\t\t\t\tif (inv) {\r\n\t\t\t\t\t\t\tprun[p >> 3] ^= fill << ((p & 7) << 2);\r\n\t\t\t\t\t\t\tcontinue outer_loop;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tprun[q >> 3] ^= fill << ((q & 7) << 2);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (done == 0) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tDEBUG && console.log('[prun]', done);\r\n\t\t}\r\n\t}\r\n\r\n\t// ida search algorithm\r\n\t// isSolved(state) -> boolean, in case isSolved = null, getPrun(idx) == 0 is used\r\n\t// getPrun(state) -> int\r\n\t// doMove(state) -> newState\r\n\t// if ckmv[last_move] >> cur_move & 1, cur_move is skipped\r\n\tfunction Searcher(isSolved, getPrun, doMove, N_AXIS, N_POWER, ckmv) {\r\n\t\tthis.isSolved = isSolved || function() { return true; };\r\n\t\tthis.getPrun = getPrun;\r\n\t\tthis.doMove = doMove;\r\n\t\tthis.N_AXIS = N_AXIS;\r\n\t\tthis.N_POWER = N_POWER;\r\n\t\tthis.ckmv = ckmv || valuedArray(N_AXIS, function(i) { return 1 << i; } );\r\n\t}\r\n\r\n\tvar _ = Searcher.prototype;\r\n\r\n\t_.solve = function(idx, minl, MAXL, callback) {\r\n\t\tvar sols = this.solveMulti([idx], minl, MAXL, callback);\r\n\t\treturn sols == null ? null : sols[0];\r\n\t};\r\n\r\n\t_.solveMulti = function(idxs, minl, MAXL, callback) {\r\n\t\tthis.callback = callback || function() { return true; };\r\n\t\tvar sol = [];\r\n\t\touter_loop: for (var l = minl; l <= MAXL; l++) {\r\n\t\t\tfor (var s = 0; s < idxs.length; s++) {\r\n\t\t\t\tthis.sidx = s;\r\n\t\t\t\tif (this.idaSearch(idxs[s], l, -1, sol) == 0) {\r\n\t\t\t\t\tbreak outer_loop;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.sidx = -1;\r\n\t\t}\r\n\t\treturn this.sidx == -1 ? null : [sol, this.sidx];\r\n\t};\r\n\r\n\t_.idaSearch = function(idx, maxl, lm, sol) {\r\n\t\tvar prun = this.getPrun(idx);\r\n\t\tif (prun > maxl) {\r\n\t\t\treturn prun > maxl + 1 ? 2 : 1;\r\n\t\t}\r\n\t\tif (maxl == 0) {\r\n\t\t\treturn this.isSolved(idx) && this.callback(sol, this.sidx) ? 0 : 1;\r\n\t\t}\r\n\t\tif (prun == 0 && this.isSolved(idx) && maxl == 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tfor (var axis = 0; axis < this.N_AXIS; axis++) {\r\n\t\t\tif (this.ckmv[lm] >> axis & 1) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvar idx1 = Array.isArray(idx) ? idx.slice() : idx;\r\n\t\t\tfor (var pow = 0; pow < this.N_POWER; pow++) {\r\n\t\t\t\tidx1 = this.doMove(idx1, axis);\r\n\t\t\t\tif (idx1 == null) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tsol.push([axis, pow]);\r\n\t\t\t\tvar ret = this.idaSearch(idx1, maxl - 1, axis, sol);\r\n\t\t\t\tif (ret == 0) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\tsol.pop();\r\n\t\t\t\tif (ret == 2) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 1;\r\n\t};\r\n\r\n\tfunction rn(n) {\r\n\t\treturn randomUIntBelow(n)\r\n\t}\r\n\r\n\tfunction rndPerm(n, isEven) {\r\n\t\tvar p = 0;\r\n\t\tvar arr = [];\r\n\t\tfor (var i = 0; i < n; i++) {\r\n\t\t\tarr[i] = i;\r\n\t\t}\r\n\t\tfor (var i = 0; i < n - 1; i++) {\r\n\t\t\tvar k = rn(n - i);\r\n\t\t\tcircle(arr, i, i + k);\r\n\t\t\tp ^= k != 0;\r\n\t\t}\r\n\t\tif (isEven && p) {\r\n\t\t\tcircle(arr, 0, 1);\r\n\t\t}\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tfunction valuedArray(len, val) {\r\n\t\tvar ret = [];\r\n\t\tvar isFun = typeof val == 'function';\r\n\t\tfor (var i = 0; i < len; i++) {\r\n\t\t\tret[i] = isFun ? val(i) : val;\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tfunction permOriMult(p1, p2, prod, o1, o2, ori, oriMod) {\r\n\t\tfor (var i = 0; i < p2.length; i++) {\r\n\t\t\tif (oriMod) {\r\n\t\t\t\tori[i] = (o1[p2[i]] + o2[i]) % oriMod;\r\n\t\t\t}\r\n\t\t\tprod[i] = p1[p2[i]];\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tbitCount: bitCount,\r\n\t\tgetPruning: getPruning,\r\n\t\tsetNOri: setNOri,\r\n\t\tgetNOri: getNOri,\r\n\t\tgetNPerm: getNPerm,\r\n\t\tgetNParity: getNParity,\r\n\t\tCoord: Coord,\r\n\t\tcreateMoveHash: createMoveHash,\r\n\t\tcreatePrun: createPrun,\r\n\t\tfillFacelet: fillFacelet,\r\n\t\tdetectFacelet: detectFacelet,\r\n\t\trn: rn,\r\n\t\tvaluedArray: valuedArray,\r\n\t\tSearcher: Searcher,\r\n\t\trndPerm: rndPerm,\r\n\t\tpermOriMult: permOriMult,\r\n\t};\r\n})();\r\n\r\nvar ftosolver = (function() {\r\n\t//face-turning octahedron cube w/o identical pieces\r\n\tfunction FtoCubie(cp, co, ep, uf, rl) {\r\n\t\tthis.cp = (cp && cp.slice()) || [0, 1, 2, 3, 4, 5];\r\n\t\tthis.co = (co && co.slice()) || [0, 0, 0, 0, 0, 0];\r\n\t\tthis.ep = (ep && ep.slice()) || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\r\n\t\tthis.uf = (uf && uf.slice()) || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\r\n\t\tthis.rl = (rl && rl.slice()) || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\r\n\t}\r\n\r\n\tvar U = 0, F = 9, r = 18, l = 27, D = 36, B = 45, R = 54, L = 63;\r\n\r\n\tvar cornFacelets = [\r\n\t\t[U + 0, R + 0, F + 0, L + 0],\r\n\t\t[U + 4, B + 8, r + 4, R + 8],\r\n\t\t[U + 8, L + 4, l + 8, B + 4],\r\n\t\t[l + 0, D + 0, r + 0, B + 0],\r\n\t\t[F + 4, D + 8, l + 4, L + 8],\r\n\t\t[r + 8, D + 4, F + 8, R + 4]\r\n\t];\r\n\r\n\tvar edgeFacelets = [\r\n\t\t[U + 1, R + 3], [U + 3, L + 1], [U + 6, B + 6],\r\n\t\t[l + 1, D + 3], [r + 3, D + 1], [F + 6, D + 6],\r\n\t\t[F + 3, R + 1], [F + 1, L + 3], [l + 6, L + 6],\r\n\t\t[l + 3, B + 1], [r + 1, B + 3], [r + 6, R + 6]\r\n\t];\r\n\r\n\tvar ctufFacelets = [\r\n\t\tU + 2, U + 5, U + 7,\r\n\t\tF + 2, F + 5, F + 7,\r\n\t\tr + 2, r + 5, r + 7,\r\n\t\tl + 2, l + 5, l + 7\r\n\t];\r\n\r\n\tvar ctrlFacelets = [\r\n\t\tD + 2, D + 5, D + 7,\r\n\t\tB + 2, B + 5, B + 7,\r\n\t\tL + 2, L + 5, L + 7,\r\n\t\tR + 2, R + 5, R + 7\r\n\t];\r\n\r\n\tFtoCubie.prototype.isEqual = function(fc) {\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tif (this.ep[i] != fc.ep[i] || this.uf[i] != fc.uf[i] || this.rl[i] != fc.rl[i]\r\n\t\t\t\t\t|| i < 6 && (this.cp[i] != fc.cp[i] || this.co[i] != fc.co[i])) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tFtoCubie.prototype.toFaceCube = function(todiv) {\r\n\t\tvar f = [];\r\n\t\ttodiv = todiv || 9;\r\n\t\tvar co = [];\r\n\t\tfor (var i = 0; i < 6; i++) {\r\n\t\t\tco[i] = this.co[i] * 2;\r\n\t\t}\r\n\t\tmathlib.fillFacelet(cornFacelets, f, this.cp, co, todiv);\r\n\t\tmathlib.fillFacelet(edgeFacelets, f, this.ep, [], todiv);\r\n\t\tmathlib.fillFacelet(ctufFacelets, f, this.uf, null, todiv);\r\n\t\tmathlib.fillFacelet(ctrlFacelets, f, this.rl, null, todiv);\r\n\t\treturn f;\r\n\t}\r\n\r\n\tFtoCubie.prototype.fromFacelet = function(facelet) {\r\n\t\tvar count = 0;\r\n\t\tvar f = [];\r\n\t\tfor (var i = 0; i < 72; ++i) {\r\n\t\t\tf[i] = facelet[i];\r\n\t\t\tcount += Math.pow(16, f[i]);\r\n\t\t}\r\n\t\tif (count != 0x99999999) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\tvar co = [];\r\n\t\tif (mathlib.detectFacelet(cornFacelets, f, this.cp, co, 9) == -1\r\n\t\t\t\t|| mathlib.detectFacelet(edgeFacelets, f, this.ep, [], 9) == -1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\tvar parity = 0;\r\n\t\tfor (var i = 0; i < 6; i++) {\r\n\t\t\tthis.co[i] = co[i] >> 1;\r\n\t\t\tparity ^= this.co[i];\r\n\t\t}\r\n\t\tif (parity != 0\r\n\t\t\t\t|| mathlib.getNParity(mathlib.getNPerm(this.cp, 6), 6) != 0\r\n\t\t\t\t|| mathlib.getNParity(mathlib.getNPerm(this.ep, 12), 12) != 0) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\tvar remainCnts = [3, 3, 3, 3];\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tvar col = f[ctufFacelets[i]];\r\n\t\t\tif (!(remainCnts[col] > 0)) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tthis.uf[i] = col * 3 + 3 - remainCnts[col];\r\n\t\t\tremainCnts[col]--;\r\n\t\t}\r\n\t\tremainCnts = [3, 3, 3, 3];\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tvar col = [0, 1, 3, 2][f[ctrlFacelets[i]] - 4];\r\n\t\t\tif (!(remainCnts[col] > 0)) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tthis.rl[i] = col * 3 + 3 - remainCnts[col];\r\n\t\t\tremainCnts[col]--;\r\n\t\t}\r\n\t\tif (mathlib.getNParity(mathlib.getNPerm(this.uf, 12), 12) != 0) {\r\n\t\t\tfor (var i = 0; i < 12; i++) { // swap 0 and 1 to fix parity\r\n\t\t\t\tthis.uf[i] ^= this.uf[i] < 2 ? 1 : 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (mathlib.getNParity(mathlib.getNPerm(this.rl, 12), 12) != 0) {\r\n\t\t\tfor (var i = 0; i < 12; i++) { // swap 0 and 1 to fix parity\r\n\t\t\t\tthis.rl[i] ^= this.rl[i] < 2 ? 1 : 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\tFtoCubie.prototype.toString = function(todiv) {\r\n\t\tvar f = this.toFaceCube(todiv);\r\n\t\tvar ret = '' +\r\n\t\t\t' U8 U7 U6 U5 U4 B8 B7 B6 B5 B4\\n' +\r\n\t\t\t'L4 U3 U2 U1 R8 r4 B3 B2 B1 l8\\n' +\r\n\t\t\t'L5 L1 U0 R3 R7 r5 r1 B0 l3 l7\\n' +\r\n\t\t\t'L6 L2 L0 R0 R2 R6 r6 r2 r0 l0 l2 l6\\n' +\r\n\t\t\t'L7 L3 F0 R1 R5 r7 r3 D0 l1 l5\\n' +\r\n\t\t\t'L8 F1 F2 F3 R4 r8 D1 D2 D3 l4\\n' +\r\n\t\t\t' F4 F5 F6 F7 F8 D4 D5 D6 D7 D8';\r\n\t\tret = ret.replace(/([UFrlDBRL])([0-8])/g, function(m, p1, p2) {\r\n\t\t\tvar i = 'UFrlDBRL'.indexOf(p1) * 9 + (~~p2);\r\n\t\t\treturn 'UFrlDBRL' [~~(f[i] / 9)] + (f[i] % 9);\r\n\t\t});\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tFtoCubie.FtoMult = function() {\r\n\t\tvar prod = arguments[arguments.length - 1] || new FtoCubie();\r\n\t\tfor (var k = 0; k < arguments.length; k++) {\r\n\t\t\tvar a = arguments[arguments.length - 1 - k];\r\n\t\t\tfor (var i = 0; i < 6; i++) {\r\n\t\t\t\tprod.co[i] = k == 0 ? 0 : (a.co[prod.cp[i]] ^ prod.co[i]);\r\n\t\t\t\tprod.cp[i] = k == 0 ? i : a.cp[prod.cp[i]];\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\t\tprod.ep[i] = k == 0 ? i : a.ep[prod.ep[i]];\r\n\t\t\t\tprod.uf[i] = k == 0 ? i : a.uf[prod.uf[i]];\r\n\t\t\t\tprod.rl[i] = k == 0 ? i : a.rl[prod.rl[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn prod;\r\n\t}\r\n\r\n\tfunction initMoveCube() {\r\n\t\tvar rotU = new FtoCubie( //move[U]\r\n\t\t\t[1, 2, 0, 4, 5, 3], [0, 0, 0, 0, 0, 0], [2, 0, 1, 5, 3, 4, 10, 11, 6, 7, 8, 9],\r\n\t\t\t[1, 2, 0, 7, 8, 6, 10, 11, 9, 4, 5, 3], [2, 0, 1, 8, 6, 7, 11, 9, 10, 5, 3, 4]);\r\n\t\tvar rotR = new FtoCubie( //move[R]\r\n\t\t\t[5, 0, 4, 2, 3, 1], [1, 1, 0, 1, 1, 0], [6, 5, 7, 9, 2, 10, 11, 4, 3, 8, 1, 0],\r\n\t\t\t[5, 3, 4, 8, 6, 7, 2, 0, 1, 11, 9, 10], [4, 5, 3, 7, 8, 6, 1, 2, 0, 10, 11, 9]);\r\n\r\n\t\tvar rotUi = FtoCubie.FtoMult(rotU, rotU, null);\r\n\t\tvar rotRi = FtoCubie.FtoMult(rotR, rotR, null);\r\n\t\tvar rotL = FtoCubie.FtoMult(rotUi, rotR, rotU, null);\r\n\t\tvar rotF = FtoCubie.FtoMult(rotR, rotU, rotRi, null);\r\n\r\n\t\tvar moveCube = [];\r\n\t\tmoveCube[0] = new FtoCubie( //moveU\r\n\t\t\t[1, 2, 0, 3, 4, 5], [0, 0, 0, 0, 0, 0], [2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11],\r\n\t\t\t[1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11], [0, 1, 2, 3, 6, 7, 11, 9, 8, 5, 10, 4]);\r\n\t\tmoveCube[2] = new FtoCubie( //moveF\r\n\t\t\t[4, 1, 2, 3, 5, 0], [1, 0, 0, 0, 1, 0], [0, 1, 2, 3, 4, 6, 7, 5, 8, 9, 10, 11],\r\n\t\t\t[0, 1, 2, 4, 5, 3, 6, 7, 8, 9, 10, 11], [0, 9, 10, 3, 4, 5, 2, 7, 1, 8, 6, 11]);\r\n\t\tmoveCube[4] = new FtoCubie( //mover\r\n\t\t\t[0, 5, 2, 1, 4, 3], [0, 1, 0, 0, 0, 1], [0, 1, 2, 3, 10, 5, 6, 7, 8, 9, 11, 4],\r\n\t\t\t[0, 1, 2, 3, 4, 5, 7, 8, 6, 9, 10, 11], [5, 3, 2, 11, 4, 10, 6, 7, 8, 9, 0, 1]);\r\n\t\tmoveCube[6] = new FtoCubie( //movel\r\n\t\t\t[0, 1, 3, 4, 2, 5], [0, 0, 1, 1, 0, 0], [0, 1, 2, 8, 4, 5, 6, 7, 9, 3, 10, 11],\r\n\t\t\t[0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 9], [8, 1, 7, 2, 0, 5, 6, 3, 4, 9, 10, 11]);\r\n\t\tmoveCube[8] = new FtoCubie( //moveD\r\n\t\t\t[0, 1, 2, 5, 3, 4], [0, 0, 0, 0, 0, 0], [0, 1, 2, 4, 5, 3, 6, 7, 8, 9, 10, 11],\r\n\t\t\t[0, 1, 2, 3, 9, 10, 5, 7, 4, 8, 6, 11], [1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11]);\r\n\t\tmoveCube[10] = new FtoCubie( //moveB\r\n\t\t\t[0, 3, 1, 2, 4, 5], [0, 1, 1, 0, 0, 0], [0, 1, 10, 3, 4, 5, 6, 7, 8, 2, 9, 11],\r\n\t\t\t[0, 6, 7, 3, 4, 5, 11, 9, 8, 2, 10, 1], [0, 1, 2, 4, 5, 3, 6, 7, 8, 9, 10, 11]);\r\n\t\tmoveCube[12] = new FtoCubie( //moveR\r\n\t\t\t[5, 0, 2, 3, 4, 1], [1, 1, 0, 0, 0, 0], [6, 1, 2, 3, 4, 5, 11, 7, 8, 9, 10, 0],\r\n\t\t\t[5, 3, 2, 8, 4, 7, 6, 0, 1, 9, 10, 11], [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 9]);\r\n\t\tmoveCube[14] = new FtoCubie( //moveL\r\n\t\t\t[2, 1, 4, 3, 0, 5], [1, 0, 1, 0, 0, 0], [0, 8, 2, 3, 4, 5, 6, 1, 7, 9, 10, 11],\r\n\t\t\t[11, 1, 10, 2, 0, 5, 6, 7, 8, 9, 3, 4], [0, 1, 2, 3, 4, 5, 7, 8, 6, 9, 10, 11]);\r\n\t\tmoveCube[16] = FtoCubie.FtoMult(rotU, moveCube[8], null); // moveUw = [U] * D\r\n\t\tmoveCube[18] = FtoCubie.FtoMult(rotF, moveCube[10], null); // moveFw = [F] * B\r\n\t\tmoveCube[20] = FtoCubie.FtoMult(rotR, moveCube[6], null); // moveRw = [R] * l\r\n\t\tmoveCube[22] = FtoCubie.FtoMult(rotL, moveCube[4], null); // moveLw = [L] * r\r\n\r\n\t\tfor (var i = 1; i < 24; i += 2) {\r\n\t\t\tmoveCube[i] = new FtoCubie();\r\n\t\t\tFtoCubie.FtoMult(moveCube[i - 1], moveCube[i - 1], moveCube[i]);\r\n\t\t}\r\n\r\n\t\tvar moveHash = [];\r\n\t\tfor (var i = 0; i < 24; i ++) {\r\n\t\t\tmoveHash[i] = moveCube[i].ep.join(',');\r\n\t\t}\r\n\t\t//init sym\r\n\t\tvar symCube = [];\r\n\t\tvar symMult = [];\r\n\t\tvar symMulI = [];\r\n\t\tvar symMulM = [];\r\n\t\tvar symHash = [];\r\n\t\tvar fc = new FtoCubie();\r\n\t\tvar fc2 = new FtoCubie();\r\n\t\tvar tmp;\r\n\t\tfor (var s = 0; s < 12; s++) {\r\n\t\t\tsymCube[s] = new FtoCubie(fc.cp, fc.co, fc.ep, fc.uf, fc.rl);\r\n\t\t\tsymHash[s] = symCube[s].ep.join(',');\r\n\t\t\tsymMult[s] = [];\r\n\t\t\tsymMulI[s] = [];\r\n\t\t\tfc = FtoCubie.FtoMult(fc, rotU, null);\r\n\t\t\tif (s % 3 == 2) { // [F] or [R]\r\n\t\t\t\tfc = FtoCubie.FtoMult(fc, rotR, rotU, null);\r\n\t\t\t}\r\n\t\t\tif (s % 6 == 5) {\r\n\t\t\t\tfc = FtoCubie.FtoMult(fc, rotU, rotR, null);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tfor (var j = 0; j < 12; j++) {\r\n\t\t\t\tFtoCubie.FtoMult(symCube[i], symCube[j], fc);\r\n\t\t\t\tvar k = symHash.indexOf(fc.ep.join(','));\r\n\t\t\t\tsymMult[i][j] = k;\r\n\t\t\t\tsymMulI[k][j] = i;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var s = 0; s < 12; s++) {\r\n\t\t\tsymMulM[s] = [];\r\n\t\t\tfor (var j = 0; j < 8; j++) {\r\n\t\t\t\tFtoCubie.FtoMult(symCube[symMulI[0][s]], moveCube[j * 2], symCube[s], fc);\r\n\t\t\t\tvar k = moveHash.indexOf(fc.ep.join(','));\r\n\t\t\t\tsymMulM[s][j] = k >> 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\tFtoCubie.moveCube = moveCube;\r\n\t\tFtoCubie.symCube = symCube;\r\n\t\tFtoCubie.symMult = symMult;\r\n\t\tFtoCubie.symMulI = symMulI;\r\n\t\tFtoCubie.symMulM = symMulM;\r\n\t};\r\n\r\n\tinitMoveCube();\r\n\r\n\tfunction ftoPermMove(key, perm, move) {\r\n\t\tvar ret = [];\r\n\t\tvar movePerm = FtoCubie.moveCube[move][key];\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tret[i] = perm[movePerm[i]];\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tfunction ftoFullMove(fc, move) {\r\n\t\treturn FtoCubie.FtoMult(fc, FtoCubie.moveCube[move], null);\r\n\t}\r\n\r\n\tfunction phase1EdgeHash(ep) {\r\n\t\tvar ret = 0;\r\n\t\tvar e3fst = -1;\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tif ((0x38 >> ep[i] & 1) == 0) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (e3fst == -1) {\r\n\t\t\t\te3fst = ep[i];\r\n\t\t\t}\r\n\t\t\tret += ((ep[i] - e3fst + 3) % 3 + 1) << i * 2;\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tfunction phase1CtrlHash(rl) {\r\n\t\tvar ret = 0;\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tif (rl[i] < 3) {\r\n\t\t\t\tret |= 1 << i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tfunction phase2EdgeHash(ep) {\r\n\t\tvar edge2group = [0, 1, 2, 3, 3, 3, 0, 1, 1, 2, 2, 0];\r\n\t\tvar groups = [[0, 6, 11], [1, 7, 8], [2, 9, 10], [3, 4, 5]];\r\n\t\tvar ret = 0;\r\n\t\tvar egoff = [-1, -1, -1, -1];\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tvar g = edge2group[ep[i]];\r\n\t\t\tvar gidx = groups[g].indexOf(ep[i]);\r\n\t\t\tif (egoff[g] == -1) {\r\n\t\t\t\tegoff[g] = gidx;\r\n\t\t\t}\r\n\t\t\tret += (g * 4 + (gidx - egoff[g] + 3) % 3) * Math.pow(16, i);\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tfunction phase2CtHash(ct) {\r\n\t\tvar ret = 0;\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tret |= ~~(ct[i] / 3) << (i * 2);\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tfunction phase3EdgeHash(ep) {\r\n\t\treturn String.fromCharCode.apply(null, ep);\r\n\t}\r\n\r\n\tfunction phase3CcufHash(fc) {\r\n\t\treturn String.fromCharCode.apply(null, [].concat(fc.cp, fc.co));\r\n\t}\r\n\r\n\tfunction randomMoves(validMoves, len) {\r\n\t\tvar scramble = [];\r\n\t\tfor (var i = 0; i < len; i++) {\r\n\t\t\tscramble.push(validMoves[~~(Math.random() * validMoves.length)]);\r\n\t\t}\r\n\t\tvar fc = new FtoCubie();\r\n\t\tfor (var i = 0; i < scramble.length; i++) {\r\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[scramble[i]], null);\r\n\t\t}\r\n\t\treturn [fc, scramble];\r\n\t}\r\n\r\n\tfunction genCkmv(moves) {\r\n\t\tvar ckmv = [];\r\n\t\tvar tmp1 = new FtoCubie();\r\n\t\tvar tmp2 = new FtoCubie();\r\n\t\tfor (var m1 = 0; m1 < moves.length; m1++) {\r\n\t\t\tckmv[m1] = 1 << m1;\r\n\t\t\tfor (var m2 = 0; m2 < m1; m2++) {\r\n\t\t\t\tFtoCubie.FtoMult(FtoCubie.moveCube[moves[m1]], FtoCubie.moveCube[moves[m2]], tmp1);\r\n\t\t\t\tFtoCubie.FtoMult(FtoCubie.moveCube[moves[m2]], FtoCubie.moveCube[moves[m1]], tmp2);\r\n\t\t\t\tif (tmp1.isEqual(tmp2)) {\r\n\t\t\t\t\tckmv[m1] |= 1 << m2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn ckmv;\r\n\t}\r\n\r\n\tvar phase1Moves = [0, 2, 22, 6, 16, 10, 12, 14]; // keep the (D, DR) edge\r\n\tvar p1epMoves = null;\r\n\tvar p1rlMoves = null;\r\n\tvar ckmv1 = null;\r\n\tvar solv1 = null;\r\n\r\n\tvar pyraSymCube = [];\r\n\tfor (var i = 0; i < 12; i++) {\r\n\t\tpyraSymCube.push(new FtoCubie(\r\n\t\t\tFtoCubie.symCube[i].cp,\r\n\t\t\tFtoCubie.symCube[i].co,\r\n\t\t\tnull,\r\n\t\t\tFtoCubie.symCube[i].uf,\r\n\t\t\tnull\r\n\t\t));\r\n\t}\r\n\r\n\tfunction phase1Init() {\r\n\t\tvar fc = new FtoCubie();\r\n\t\tp1epMoves = mathlib.createMoveHash(fc.ep.slice(), phase1Moves, phase1EdgeHash, ftoPermMove.bind(null, 'ep'));\r\n\t\tp1rlMoves = mathlib.createMoveHash(fc.rl.slice(), phase1Moves, phase1CtrlHash, ftoPermMove.bind(null, 'rl'));\r\n\t\tvar N_P1EP = p1epMoves[0][0].length;\r\n\t\tvar N_P1RL = p1rlMoves[0][0].length;\r\n\t\tDEBUG && console.log('p1ep len=' + N_P1EP + ' p1rl len=' + N_P1RL);\r\n\r\n\t\tckmv1 = genCkmv(phase1Moves);\r\n\t\tvar p1eprlPrun = [];\r\n\t\tmathlib.createPrun(p1eprlPrun, 0, N_P1EP * N_P1RL, 14, function(idx, move) {\r\n\t\t\tvar rl = ~~(idx / N_P1EP);\r\n\t\t\tvar ep = idx % N_P1EP;\r\n\t\t\treturn p1rlMoves[0][move][rl] * N_P1EP + p1epMoves[0][move][ep];\r\n\t\t}, phase1Moves.length, 2);\r\n\r\n\t\tsolv1 = new mathlib.Searcher(null, function(idx) {\r\n\t\t\treturn mathlib.getPruning(p1eprlPrun, idx[1] * N_P1EP + idx[0]);\r\n\t\t}, function(idx, move) {\r\n\t\t\treturn [\r\n\t\t\t\tp1epMoves[0][move][idx[0]],\r\n\t\t\t\tp1rlMoves[0][move][idx[1]]\r\n\t\t\t];\r\n\t\t}, 8, 2, ckmv1);\r\n\t}\r\n\r\n\tfunction phase1GenIdxs(fc) {\r\n\t\tvar idxs = [];\r\n\t\tvar syms = [];\r\n\t\tvar fc2 = new FtoCubie();\r\n\t\tvar fc3 = new FtoCubie();\r\n\r\n\t\tfor (var sidx = 0; sidx < 12; sidx += 3) {\r\n\t\t\tFtoCubie.FtoMult(FtoCubie.symCube[sidx % 12], fc, fc2);\r\n\t\t\tvar rot;\r\n\t\t\tfor (rot = 0; rot < 12; rot++) {\r\n\t\t\t\tFtoCubie.FtoMult(fc2, FtoCubie.symCube[rot], fc3);\r\n\t\t\t\tif (fc3.ep[4] == 4) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar epidxs = [];\r\n\t\t\tvar rlidxs = [];\r\n\t\t\tidxs.push([\r\n\t\t\t\tp1epMoves[1][phase1EdgeHash(fc3.ep)],\r\n\t\t\t\tp1rlMoves[1][phase1CtrlHash(fc3.rl)]\r\n\t\t\t]);\r\n\t\t\tsyms.push([sidx, rot]);\r\n\t\t}\r\n\t\treturn [idxs, syms];\r\n\t}\r\n\r\n\tfunction phase1ProcSol(sol, solsym, fc) {\r\n\t\tfor (var i = 0; i < sol.length; i++) {\r\n\t\t\tsol[i] = phase1Moves[sol[i][0]] + sol[i][1];\r\n\t\t}\r\n\t\tvar std = move2std(sol);\r\n\t\tfor (var i = 0; i < std[0].length; i++) {\r\n\t\t\tvar move = std[0][i];\r\n\t\t\tsol[i] = FtoCubie.symMulM[FtoCubie.symMulI[0][solsym[1]]][move >> 1] * 2 + (move & 1);\r\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[sol[i]], null);\r\n\t\t}\r\n\t\tsolsym[1] = FtoCubie.symMulI[solsym[1]][std[1]];\r\n\t\tfc = FtoCubie.FtoMult(\r\n\t\t\tpyraSymCube[~~(solsym[0] / 12)], FtoCubie.symCube[solsym[0] % 12],\r\n\t\t\tfc, FtoCubie.symCube[solsym[1]], null\r\n\t\t);\r\n\t\treturn [fc, sol, solsym[0], solsym[1]];\r\n\t}\r\n\r\n\tvar N_PHASE1_SOLS = 1000;\r\n\r\n\tfunction solvePhase1(fc) {\r\n\t\tif (!solv1) {\r\n\t\t\tphase1Init();\r\n\t\t}\r\n\r\n\t\tvar tt = performance.now();\r\n\t\tvar idxs = phase1GenIdxs(fc);\r\n\t\tvar syms = idxs[1];\r\n\t\tidxs = idxs[0];\r\n\r\n\t\tvar p1sols = [];\r\n\r\n\t\tvar sol1s = solv1.solveMulti(idxs, 0, 12, function(sol, sidx) {\r\n\t\t\tvar param = phase1ProcSol(sol.slice(), syms[sidx].slice(), fc);\r\n\t\t\tp1sols.push(param);\r\n\t\t\treturn p1sols.length >= N_PHASE1_SOLS;\r\n\t\t});\r\n\r\n\t\ttt = performance.now() - tt;\r\n\t\tfor (var i = 0; i < p1sols.length; i++) {\r\n\t\t\tp1sols[i].push(tt);\r\n\t\t}\r\n\t\treturn p1sols;\r\n\t}\r\n\r\n\tvar phase2Moves = [0, 12, 14, 8, 10];\r\n\tvar p2epMoves = null;\r\n\tvar p2rlMoves = null;\r\n\tvar p2ccMoves = null;\r\n\tvar p2cc2ufBit = {};\r\n\tvar ckmv2 = null;\r\n\tvar solv2 = null;\r\n\tvar P2EPRL_MAXL = 11;\r\n\tvar p2symMap = [];\r\n\tvar ufStd2Raw = [];\r\n\tvar ufRaw2Std = [];\r\n\tvar p2ufCoord = new mathlib.Coord('c', 12, [3, 3, 3, 3]);\r\n\r\n\tvar cornExFacelets = [\r\n\t\t[U + 2, R + 2, F + 2, L + 2],\r\n\t\t[U + 5, B + 7, r + 5, R + 7],\r\n\t\t[U + 7, L + 5, l + 7, B + 5],\r\n\t\t[l + 2, D + 2, r + 2, B + 2],\r\n\t\t[F + 5, D + 7, l + 5, L + 7],\r\n\t\t[r + 7, D + 5, F + 7, R + 5]\r\n\t];\r\n\r\n\tfunction phase2CpcoHash(fc) {\r\n\t\tvar ret = String.fromCharCode.apply(null, [].concat(fc.cp, fc.co));\r\n\t\tif (!(ret in p2cc2ufBit)) {\r\n\t\t\tvar co = [];\r\n\t\t\tfor (var i = 0; i < 6; i++) {\r\n\t\t\t\tco[i] = fc.co[i] * 2;\r\n\t\t\t}\r\n\t\t\tvar facelet = fc.toFaceCube();\r\n\t\t\tmathlib.fillFacelet(cornExFacelets, facelet, fc.cp, co, 9);\r\n\t\t\tvar fc2 = new FtoCubie().fromFacelet(facelet);\r\n\t\t\tp2cc2ufBit[ret] = phase2CtHash(fc2.uf);\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\r\n\t// re-color the cube s.t. uf is minimized in lexicographical order\r\n\tfunction phase2ufStd(uf, symMap) {\r\n\t\tvar col1 = uf[0], col2 = -1;\r\n\t\tfor (var i = 1; i < 12; i++) {\r\n\t\t\tif (uf[i] != col1) {\r\n\t\t\t\tcol2 = uf[i];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar sym = symMap[col1 * 4 + col2];\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tuf[i] = ~~(FtoCubie.symCube[sym].uf[uf[i] * 3] / 3);\r\n\t\t}\r\n\t\treturn sym;\r\n\t}\r\n\r\n\tfunction getPhase2ufIdx(uf) {\r\n\t\tvar ufstd = [];\r\n\t\tfor (var i = 0; i < 12; i++) {\r\n\t\t\tufstd[i] = ~~(uf[i] / 3);\r\n\t\t}\r\n\t\tvar sym = phase2ufStd(ufstd, p2symMap);\r\n\t\treturn ufRaw2Std[p2ufCoord.get(ufstd)] << 4 | sym;\r\n\t}\r\n\r\n\tfunction phase2Init() {\r\n\t\tvar fc = new FtoCubie();\r\n\t\tp2epMoves = mathlib.createMoveHash(fc.ep.slice(), phase2Moves, phase2EdgeHash, ftoPermMove.bind(null, 'ep'));\r\n\t\tp2rlMoves = mathlib.createMoveHash(fc.rl.slice(), phase2Moves, phase2CtHash, ftoPermMove.bind(null, 'rl'));\r\n\t\tp2ccMoves = mathlib.createMoveHash(fc, phase2Moves, phase2CpcoHash, ftoFullMove);\r\n\r\n\t\tvar arr = [];\r\n\t\tvar arr2 = [];\r\n\t\tvar p2ufMoveStd = [[], [], [], [], []];\r\n\t\tvar ufStd2Bit = [];\r\n\t\tvar p2ccRecol = [];\r\n\t\tfor (var s = 0; s < 12; s++) {\r\n\t\t\tvar uf = FtoCubie.symCube[s].uf;\r\n\t\t\tvar col1 = ~~(uf.indexOf(0) / 3);\r\n\t\t\tvar col2 = ~~(uf.indexOf(3) / 3);\r\n\t\t\tp2symMap[col1 * 4 + col2] = s;\r\n\t\t\tp2ccRecol[s] = [];\r\n\t\t}\r\n\t\tout: for (var i = 0; i < 42000; i++) {\r\n\t\t\tp2ufCoord.set(arr, i);\r\n\t\t\tfor (var j = 1; j < 12; j++) {\r\n\t\t\t\tif (arr[j] > 1) {\r\n\t\t\t\t\tcontinue out;\r\n\t\t\t\t} else if (arr[j] == 1) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tufRaw2Std[i] = ufStd2Raw.length;\r\n\t\t\tufStd2Raw.push(i);\r\n\t\t}\r\n\t\tfor (var i = 0; i < ufStd2Raw.length; i++) {\r\n\t\t\tp2ufCoord.set(arr, ufStd2Raw[i]);\r\n\t\t\tvar hash = 0;\r\n\t\t\tfor (var j = 0; j < 12; j++) {\r\n\t\t\t\thash |= arr[j] << (j * 2);\r\n\t\t\t}\r\n\t\t\tufStd2Bit[i] = hash;\r\n\t\t\tfor (var m = 0; m < phase2Moves.length; m++) {\r\n\t\t\t\tmathlib.permOriMult(arr, FtoCubie.moveCube[phase2Moves[m]].uf, arr2);\r\n\t\t\t\tvar sym = phase2ufStd(arr2, p2symMap);\r\n\t\t\t\tp2ufMoveStd[m][i] = ufRaw2Std[p2ufCoord.get(arr2)] << 4 | sym;\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar cc2Bit = [];\r\n\t\tfor (var key in p2ccMoves[1]) {\r\n\t\t\tvar idx = p2ccMoves[1][key];\r\n\t\t\tcc2Bit[idx] = p2cc2ufBit[key];\r\n\t\t\tvar cpco = [];\r\n\t\t\tfor (var s = 0; s < 12; s++) {\r\n\t\t\t\tvar sc = FtoCubie.symCube[s];\r\n\t\t\t\tfor (var i = 0; i < 6; i++) {\r\n\t\t\t\t\tvar scpi = key.charCodeAt(i);\r\n\t\t\t\t\tcpco[i] = sc.cp[scpi];\r\n\t\t\t\t\tcpco[i + 6] = sc.co[scpi] ^ key.charCodeAt(i + 6);\r\n\t\t\t\t}\r\n\t\t\t\tvar hash = String.fromCharCode.apply(null, cpco);\r\n\t\t\t\tp2ccRecol[s][idx] = p2ccMoves[1][hash];\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar p2necPrun = [ // idx = a * 7 + b, a: #mismatch 3 U corners, b: other corners\r\n\t\t\t0, 0, 3, 4, 5, 6, 8,\r\n\t\t\t0, 2, 3, 4, 5, 6, 8,\r\n\t\t\t1, 2, 4, 4, 5, 6, 8,\r\n\t\t\t1, 3, 4, 5, 6, 7, 8,\r\n\t\t\t3, 3, 4, 5, 6, 7, 9,\r\n\t\t\t4, 4, 5, 6, 7, 8, 9,\r\n\t\t\t5, 5, 6, 7, 8, 9, 10\r\n\t\t];\r\n\r\n\t\tvar N_P2EP = p2epMoves[0][0].length;\r\n\t\tvar N_P2RL = p2rlMoves[0][0].length;\r\n\t\tvar p2eprlPrun = [];\r\n\t\tmathlib.createPrun(p2eprlPrun, 0, N_P2EP * N_P2RL, P2EPRL_MAXL - 2, function(idx, move) {\r\n\t\t\tvar rl = ~~(idx / N_P2EP);\r\n\t\t\tvar ep = idx % N_P2EP;\r\n\t\t\treturn p2rlMoves[0][move][rl] * N_P2EP + p2epMoves[0][move][ep];\r\n\t\t}, phase2Moves.length, 2);\r\n\t\tckmv2 = genCkmv(phase2Moves);\r\n\r\n\t\tsolv2 = new mathlib.Searcher(function(idx) {\r\n\t\t\treturn ufStd2Bit[idx[3] >> 4] == cc2Bit[p2ccRecol[idx[3] & 0xf][idx[2]]];\r\n\t\t}, function(idx) {\r\n\t\t\tvar xors = ufStd2Bit[idx[3] >> 4] ^ cc2Bit[p2ccRecol[idx[3] & 0xf][idx[2]]];\r\n\t\t\txors = (xors | xors >> 1) & 0x555555;\r\n\t\t\tvar necIdx = mathlib.bitCount(xors & 0xc0c0ff) * 7 + mathlib.bitCount(xors & 0x3f3f00);\r\n\t\t\treturn Math.max(\r\n\t\t\t\tMath.min(P2EPRL_MAXL, mathlib.getPruning(p2eprlPrun, idx[1] * N_P2EP + idx[0])),\r\n\t\t\t\tp2necPrun[necIdx]\r\n\t\t\t);\r\n\t\t}, function(idx, move) {\r\n\t\t\tvar ufidx1 = p2ufMoveStd[move][idx[3] >> 4];\r\n\t\t\tvar ufcol = FtoCubie.symMult[ufidx1 & 0xf][idx[3] & 0xf];\r\n\t\t\treturn [\r\n\t\t\t\tp2epMoves[0][move][idx[0]],\r\n\t\t\t\tp2rlMoves[0][move][idx[1]],\r\n\t\t\t\tp2ccMoves[0][move][idx[2]],\r\n\t\t\t\tufidx1 & ~0xf | ufcol,\r\n\t\t\t];\r\n\t\t}, phase2Moves.length, 2, ckmv2);\r\n\t}\r\n\r\n\tfunction solvePhase2(solvInfos) {\r\n\t\tif (!solv2) {\r\n\t\t\tphase2Init();\r\n\t\t}\r\n\t\tvar tt = performance.now();\r\n\t\tvar idxs = [];\r\n\t\tfor (var i = 0; i < solvInfos.length; i++) {\r\n\t\t\tidxs.push([\r\n\t\t\t\tp2epMoves[1][phase2EdgeHash(solvInfos[i][0].ep)],\r\n\t\t\t\tp2rlMoves[1][phase2CtHash(solvInfos[i][0].rl)],\r\n\t\t\t\tp2ccMoves[1][phase2CpcoHash(solvInfos[i][0])],\r\n\t\t\t\tgetPhase2ufIdx(solvInfos[i][0].uf)\r\n\t\t\t]);\r\n\t\t}\r\n\t\tvar sol2s = solv2.solveMulti(idxs, 0, 25);\r\n\t\tvar sol = sol2s[0];\r\n\t\tvar src = sol2s[1];\r\n\t\tvar solvInfo = solvInfos[src];\r\n\t\tvar fc = solvInfo[0];\r\n\t\tfor (var i = 0; i < sol.length; i++) {\r\n\t\t\tvar move = phase2Moves[sol[i][0]] + sol[i][1];\r\n\t\t\tsol[i] = FtoCubie.symMulM[FtoCubie.symMulI[0][solvInfo[3]]][move >> 1] * 2 + (move & 1);\r\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[move], null);\r\n\t\t}\r\n\t\treturn [fc, sol, solvInfo[2], solvInfo[3], src, performance.now() - tt];\r\n\t}\r\n\r\n\tvar phase3Moves = [8, 10, 12, 14];\r\n\tvar p3epMoves = null;\r\n\tvar p3ufMoves = null;\r\n\tvar p3epPrun = null;\r\n\tvar p3ufPrun = null;\r\n\tvar ckmv3 = null;\r\n\tvar solv3 = null;\r\n\r\n\tfunction phase3Init() {\r\n\t\tvar fc = new FtoCubie();\r\n\t\tp3epMoves = mathlib.createMoveHash(fc.ep.slice(), phase3Moves, phase3EdgeHash, ftoPermMove.bind(null, 'ep'));\r\n\t\tp3ufMoves = mathlib.createMoveHash(new FtoCubie(), phase3Moves, phase3CcufHash, ftoFullMove);\r\n\t\tp3epPrun = [];\r\n\t\tp3ufPrun = [];\r\n\t\tmathlib.createPrun(p3epPrun, 0, 81, 14, p3epMoves[0], 4, 2);\r\n\t\tmathlib.createPrun(p3ufPrun, 0, 11520, 14, p3ufMoves[0], 4, 2);\r\n\t\tckmv3 = genCkmv(phase3Moves);\r\n\r\n\t\tsolv3 = new mathlib.Searcher(null, function(idx) {\r\n\t\t\treturn Math.max(\r\n\t\t\t\tmathlib.getPruning(p3epPrun, idx[0]),\r\n\t\t\t\tmathlib.getPruning(p3ufPrun, idx[1])\r\n\t\t\t);\r\n\t\t}, function(idx, move) {\r\n\t\t\treturn [p3epMoves[0][move][idx[0]], p3ufMoves[0][move][idx[1]]];\r\n\t\t}, 4, 2, ckmv3);\r\n\t}\r\n\r\n\tfunction solvePhase3(solvInfo) {\r\n\t\tvar fc = solvInfo[0];\r\n\t\tif (!p3epPrun) {\r\n\t\t\tphase3Init();\r\n\t\t}\r\n\r\n\t\tvar tt = performance.now();\r\n\t\tvar p3epidx = p3epMoves[1][phase3EdgeHash(fc.ep)];\r\n\t\tvar p3ufidx = p3ufMoves[1][phase3CcufHash(fc)];\r\n\r\n\t\tvar sol = solv3.solve([p3epidx, p3ufidx], 0, 25);\r\n\r\n\t\tfor (var i = 0; i < sol.length; i++) {\r\n\t\t\tvar move = phase3Moves[sol[i][0]] + sol[i][1];\r\n\t\t\tsol[i] = FtoCubie.symMulM[FtoCubie.symMulI[0][solvInfo[3]]][move >> 1] * 2 + (move & 1);\r\n\r\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[move], null);\r\n\t\t}\r\n\t\treturn [fc, sol, solvInfo[2], solvInfo[3], performance.now() - tt];\r\n\t}\r\n\r\n\t// convert wide moves to face moves\r\n\tfunction move2std(moves) {\r\n\t\tvar sym = 0;\r\n\t\tvar ret = [];\r\n\t\t// Uw = [U] * D, Fw = [F] * B, Rw = [R] * l, Lw = [L] * r\r\n\t\tvar w2axis = [4, 5, 3, 2];\r\n\t\tvar w2rot = [1, 10, 5, 11];\r\n\t\tfor (var i = 0; i < moves.length; i++) {\r\n\t\t\tvar rot = 0;\r\n\t\t\tvar axis = moves[i] >> 1;\r\n\t\t\tvar pow = moves[i] & 1;\r\n\t\t\tif (axis >= 8) {\r\n\t\t\t\trot = w2rot[axis - 8];\r\n\t\t\t\taxis = w2axis[axis - 8];\r\n\t\t\t}\r\n\t\t\tif (!pow) {\r\n\t\t\t\trot = FtoCubie.symMult[rot][rot];\r\n\t\t\t}\r\n\t\t\tret.push(FtoCubie.symMulM[sym][axis] * 2 + pow);\r\n\t\t\tsym = FtoCubie.symMult[rot][sym];\r\n\t\t}\r\n\t\treturn [ret, sym];\r\n\t}\r\n\r\n\tfunction applyMoves(fc, moves) {\r\n\t\tfor (var i = 0; i < moves.length; i++) {\r\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[moves[i]], null);\r\n\t\t}\r\n\t\treturn fc;\r\n\t}\r\n\r\n\tvar move2str = [\"U\", \"U'\", \"F\", \"F'\", \"r\", \"r'\", \"l\", \"l'\", \"D\", \"D'\", \"B\", \"B'\", \"R\", \"R'\", \"L\", \"L'\"]\r\n\r\n\tfunction prettyMoves(moves) {\r\n\t\tvar buf = [];\r\n\t\tfor (var i = 0; i < moves.length; i++) {\r\n\t\t\tbuf[i] = move2str[moves[i]];\r\n\t\t}\r\n\t\treturn buf.join(' ').replace(/l/g, 'BL').replace(/r/g, 'BR');\r\n\t}\r\n\r\n\tfunction FtoSolver() {}\r\n\r\n\tFtoSolver.prototype.solveFto = function(fc, invSol) {\r\n\t\tif (!solv1) {\r\n\t\t\tvar tt = performance.now();\r\n\t\t\tphase1Init();\r\n\t\t\tphase2Init();\r\n\t\t\tphase3Init();\r\n\t\t\tDEBUG && console.log('[ftosolver] init time:', performance.now() - tt);\r\n\t\t}\r\n\t\tvar solvInfos = solvePhase1(fc);\r\n\r\n\t\tvar solvInfo2 = solvePhase2(solvInfos);\r\n\r\n\t\tvar solvInfo1 = solvInfos[solvInfo2[4]];\r\n\t\tthis.sol1 = solvInfo1[1].slice();\r\n\t\tthis.tt1 = solvInfo1[4];\r\n\t\tvar sym1Idx = solvInfo1[2];\r\n\r\n\t\tthis.sol2 = solvInfo2[1].slice();\r\n\t\tthis.tt2 = solvInfo2[5];\r\n\t\tsolvInfo2[0] = FtoCubie.FtoMult(pyraSymCube[FtoCubie.symMulI[0][~~(sym1Idx / 12)]], solvInfo2[0], null);\r\n\r\n\t\tvar solvInfo3 = solvePhase3(solvInfo2);\r\n\t\tthis.sol3 = solvInfo3[1].slice();\r\n\t\tthis.tt3 = solvInfo3[4];\r\n\r\n\t\tvar sol = [].concat(this.sol1, this.sol2, this.sol3);\r\n\t\tif (invSol) {\r\n\t\t\tfor (var i = 0; i < sol.length; i++) {\r\n\t\t\t\tsol[i] ^= 1;\r\n\t\t\t}\r\n\t\t\tsol.reverse();\r\n\t\t}\r\n\t\treturn prettyMoves(sol);\r\n\t}\r\n\r\n\tvar solver = new FtoSolver();\r\n\r\n\tfunction solveTest(n_moves) {\r\n\t\tvar solvInfo = randomMoves([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], n_moves);\r\n\r\n\t\tvar scramble = prettyMoves(solvInfo[1].slice());\r\n\t\tvar solution = solver.solveFto(solvInfo[0]);\r\n\r\n\t\tvar fc = solvInfo[0];\r\n\t\tDEBUG && console.log('scrambled state\\n', fc.toString(1));\r\n\t\tfc = applyMoves(fc, solver.sol1);\r\n\t\tDEBUG && console.log('after phase 1 (' + prettyMoves(solver.sol1) + '):\\n', fc.toString(1));\r\n\t\tfc = applyMoves(fc, solver.sol2);\r\n\t\tDEBUG && console.log('after phase 2 (' + prettyMoves(solver.sol2) + '):\\n', fc.toString(1));\r\n\t\tfc = applyMoves(fc, solver.sol3);\r\n\t\tDEBUG && console.log('after phase 3 (' + prettyMoves(solver.sol3) + '):\\n', fc.toString(1));\r\n\r\n\t\tvar facelets = fc.toFaceCube();\r\n\t\tvar isSolved = true;\r\n\t\touter_loop: for (var i = 0; i < 8; i++) {\r\n\t\t\tfor (var j = 1; j < 9; j++) {\r\n\t\t\t\tif (facelets[i * 9 + j] != facelets[i * 9]) {\r\n\t\t\t\t\tisSolved = false;\r\n\t\t\t\t\tbreak outer_loop;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!isSolved) {\r\n\t\t\tconsole.log('error, FTO not solved!!!');\r\n\t\t}\r\n\r\n\t\tDEBUG && console.log(scramble, solution);\r\n\t\treturn [\r\n\t\t\tsolver.sol1.length + solver.sol2.length + solver.sol3.length,\r\n\t\t\tsolver.sol1.length,\r\n\t\t\tsolver.sol2.length,\r\n\t\t\tsolver.sol3.length,\r\n\t\t\tsolver.tt1,\r\n\t\t\tsolver.tt2,\r\n\t\t\tsolver.tt3\r\n\t\t];\r\n\t}\r\n\r\n\tfunction testbench(ntest) {\r\n\t\tntest = ntest || 100;\r\n\t\tvar cumlen = [];\r\n\t\tfor (var nsolv = 0; nsolv < ntest; nsolv++) {\r\n\t\t\tvar lengths = solveTest(200);\r\n\t\t\tfor (var i = 0; i < lengths.length; i++) {\r\n\t\t\t\tcumlen[i] = (cumlen[i] || 0) + lengths[i];\r\n\t\t\t}\r\n\t\t\tconsole.log('AvgL: ', cumlen[0] / (nsolv + 1));\r\n\t\t}\r\n\t\tconsole.log('AvgL1:', cumlen[1] / ntest);\r\n\t\tconsole.log('AvgL2:', cumlen[2] / ntest);\r\n\t\tconsole.log('AvgL3:', cumlen[3] / ntest);\r\n\t\tconsole.log('AvgT1:', cumlen[4] / ntest);\r\n\t\tconsole.log('AvgT2:', cumlen[5] / ntest);\r\n\t\tconsole.log('AvgT3:', cumlen[6] / ntest);\r\n\t}\r\n\r\n\tfunction solveFacelet(facelet, invSol) {\r\n\t\tvar fc = new FtoCubie();\r\n\t\tif (fc.fromFacelet(facelet) == -1) {\r\n\t\t\treturn \"FTO Solver ERROR!\";\r\n\t\t}\r\n\t\treturn solver.solveFto(fc, invSol);\r\n\t}\r\n\r\n\treturn {\r\n\t\tsolveFacelet: solveFacelet,\r\n\t\tFtoCubie: FtoCubie,\r\n\t\ttestbench: testbench\r\n\t};\r\n})();\r\n\r\nvar fto_scrambler = (function() {\r\n\r\n\tfunction getRandomScramble(solvedEdge, solvedCenter, solvedCorner) {\r\n\t\tvar fc = new ftosolver.FtoCubie();\r\n\t\tif (!solvedEdge) {\r\n\t\t\tfc.ep = mathlib.rndPerm(12, true);\r\n\t\t}\r\n\t\tif (!solvedCenter) {\r\n\t\t\tfc.uf = mathlib.rndPerm(12, true);\r\n\t\t\tfc.rl = mathlib.rndPerm(12, true);\r\n\t\t}\r\n\t\tif (!solvedCorner) {\r\n\t\t\tfc.cp = mathlib.rndPerm(6, true);\r\n\t\t\tmathlib.setNOri(fc.co, mathlib.rn(32), 6, -2);\r\n\t\t}\r\n\t\treturn new Alg(ftosolver.solveFacelet(fc.toFaceCube(), true));\r\n\t}\r\n\r\n\tfunction getLNTScramble(ufs) {\r\n\t\tvar solved = false;\r\n\t\tvar nCorn = ufs.length >> 1;\r\n\t\tvar fc = new ftosolver.FtoCubie();\r\n\t\tvar cp, co, uf;\r\n\t\tdo {\r\n\t\t\tcp = mathlib.rndPerm(nCorn, true);\r\n\t\t\tco = mathlib.setNOri([], mathlib.rn(1 << nCorn >> 1), nCorn, -2);\r\n\t\t\tuf = mathlib.rndPerm(ufs.length, true);\r\n\t\t\tsolved = true;\r\n\t\t\tfor (var i = 0; i < ufs.length; i++) {\r\n\t\t\t\tsolved = solved && (~~(ufs[uf[i]] / 3) == ~~(ufs[i] / 3));\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < nCorn; i++) {\r\n\t\t\t\tsolved = solved && cp[i] == i && co[i] == 0;\r\n\t\t\t}\r\n\t\t} while (solved);\r\n\t\tfor (var i = 0; i < nCorn; i++) {\r\n\t\t\tfc.cp[i] = cp[i];\r\n\t\t\tfc.co[i] = co[i];\r\n\t\t}\r\n\t\tfor (var i = 0; i < ufs.length; i++) {\r\n\t\t\tfc.uf[ufs[i]] = ufs[uf[i]];\r\n\t\t}\r\n\t\treturn ftosolver.solveFacelet(fc.toFaceCube(), true);\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetRandomScramble: getRandomScramble.bind(null, false, false, false)\r\n\t};\r\n})();\r\n\r\n// TODO: solve an externally generated random state\r\nexport function getRandomFTOScramble() {\r\n\treturn fto_scrambler.getRandomScramble();\r\n};\r\n\r\n// export function setRandomGen(gen) {\r\n// \tmathlib.setRandomGen(gen);\r\n// };\r\n\r\n// export function fto_testbench() {\r\n// \tftosolver.testbench();\r\n// };\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["i", "idx"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
exposeAPI
|
|
3
|
+
} from "./chunk-7GUL3OBQ.js";
|
|
4
|
+
|
|
5
|
+
// src/cubing/search/worker-workarounds/search-worker-entry.js
|
|
6
|
+
if (exposeAPI.expose) {
|
|
7
|
+
void import("./inside-LG2EAKCL.js").then(() => {
|
|
8
|
+
if (globalThis.postMessage) {
|
|
9
|
+
globalThis.postMessage("comlink-exposed");
|
|
10
|
+
} else {
|
|
11
|
+
globalThis.process.getBuiltinModule("node:worker_threads").parentPort?.postMessage("comlink-exposed");
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
var WORKER_ENTRY_FILE_URL = import.meta.url;
|
|
16
|
+
export {
|
|
17
|
+
WORKER_ENTRY_FILE_URL
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=search-worker-entry.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cubing/search/worker-workarounds/search-worker-entry.js"],
|
|
4
|
+
"sourcesContent": ["import { exposeAPI } from \"./worker-guard\";\n\nif (exposeAPI.expose) {\n void import(\"../inside\").then(() => {\n // Workaround for `node`'\n if (globalThis.postMessage) {\n globalThis.postMessage(\"comlink-exposed\"); // TODO: remove this\n } else {\n globalThis.process\n .getBuiltinModule(\"node:worker_threads\")\n .parentPort?.postMessage(\"comlink-exposed\");\n }\n });\n}\n\n// Workaround for `esbuild`: https://github.com/evanw/esbuild/issues/312#issuecomment-1092195778\nexport const WORKER_ENTRY_FILE_URL = import.meta.url;\n"],
|
|
5
|
+
"mappings": ";;;;;AAEA,IAAI,UAAU,QAAQ;AACpB,OAAK,OAAO,sBAAW,EAAE,KAAK,MAAM;AAElC,QAAI,WAAW,aAAa;AAC1B,iBAAW,YAAY,iBAAiB;AAAA,IAC1C,OAAO;AACL,iBAAW,QACR,iBAAiB,qBAAqB,EACtC,YAAY,YAAY,iBAAiB;AAAA,IAC9C;AAAA,EACF,CAAC;AACH;AAGO,IAAM,wBAAwB,YAAY;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// src/cubing/puzzles/stickerings/square1-stickerings.ts
|
|
2
|
+
var WEDGES_PER_LAYER = 12;
|
|
3
|
+
var NUM_WEDGE_FACELETS = 9;
|
|
4
|
+
var NUM_EQUATOR_FACELETS = 6;
|
|
5
|
+
function wedgeShape(piece) {
|
|
6
|
+
const phase = piece < WEDGES_PER_LAYER ? piece % 3 : (piece - WEDGES_PER_LAYER + 2) % 3;
|
|
7
|
+
return phase === 0 ? "cornerHigh" : phase === 1 ? "cornerLow" : "edge";
|
|
8
|
+
}
|
|
9
|
+
function isLastLayer(piece) {
|
|
10
|
+
return piece < WEDGES_PER_LAYER;
|
|
11
|
+
}
|
|
12
|
+
var UD_FACELETS = {
|
|
13
|
+
cornerHigh: [1, 2, 4],
|
|
14
|
+
cornerLow: [1, 2, 3],
|
|
15
|
+
edge: [1]
|
|
16
|
+
};
|
|
17
|
+
var SIDE_FACELETS = {
|
|
18
|
+
cornerHigh: [0, 3, 5, 6, 8],
|
|
19
|
+
cornerLow: [0, 4, 5, 6, 7],
|
|
20
|
+
edge: [0, 2, 3, 4, 5]
|
|
21
|
+
};
|
|
22
|
+
function wedgeMask(piece, udMask, sideMask) {
|
|
23
|
+
const shape = wedgeShape(piece);
|
|
24
|
+
const facelets = new Array(
|
|
25
|
+
NUM_WEDGE_FACELETS
|
|
26
|
+
).fill(null);
|
|
27
|
+
for (const facelet of SIDE_FACELETS[shape]) {
|
|
28
|
+
facelets[facelet] = sideMask;
|
|
29
|
+
}
|
|
30
|
+
for (const facelet of UD_FACELETS[shape]) {
|
|
31
|
+
facelets[facelet] = udMask;
|
|
32
|
+
}
|
|
33
|
+
return { facelets };
|
|
34
|
+
}
|
|
35
|
+
function equatorMask(mask) {
|
|
36
|
+
return { facelets: new Array(NUM_EQUATOR_FACELETS).fill(mask) };
|
|
37
|
+
}
|
|
38
|
+
function masksFor(stickering) {
|
|
39
|
+
switch (stickering) {
|
|
40
|
+
case "OLL":
|
|
41
|
+
return {
|
|
42
|
+
wedge: (piece) => wedgeMask(piece, "regular", "ignored"),
|
|
43
|
+
equator: "dim"
|
|
44
|
+
};
|
|
45
|
+
case "PLL":
|
|
46
|
+
return {
|
|
47
|
+
wedge: (piece) => isLastLayer(piece) ? wedgeMask(piece, "dim", "regular") : wedgeMask(piece, "dim", "dim"),
|
|
48
|
+
equator: "dim"
|
|
49
|
+
};
|
|
50
|
+
default:
|
|
51
|
+
return {
|
|
52
|
+
wedge: (piece) => wedgeMask(piece, "regular", "regular"),
|
|
53
|
+
equator: "regular"
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function square1StickeringMask(_puzzleLoader, stickering) {
|
|
58
|
+
const { wedge, equator } = masksFor(stickering);
|
|
59
|
+
return {
|
|
60
|
+
orbits: {
|
|
61
|
+
WEDGES: {
|
|
62
|
+
pieces: new Array(2 * WEDGES_PER_LAYER).fill(null).map((_, piece) => wedge(piece))
|
|
63
|
+
},
|
|
64
|
+
EQUATOR: {
|
|
65
|
+
pieces: new Array(2).fill(null).map(() => equatorMask(equator))
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export {
|
|
71
|
+
square1StickeringMask
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=square1-stickerings-W2ZLZWIN.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cubing/puzzles/stickerings/square1-stickerings.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport type {\n FaceletMeshStickeringMask,\n PieceStickeringMask,\n StickeringMask,\n} from \"./mask\";\n\n// The Square-1 hyperorbit definition uses 9 facelets per wedge, so that a\n// single set of SVG polygons can cover every wedge shape. Which facelets belong\n// to the U/D face (rather than to a side face) depends on the shape of the\n// wedge, and the leftover facelets have to be left alone so that they stay\n// invisible.\nconst WEDGES_PER_LAYER = 12;\nconst NUM_WEDGE_FACELETS = 9;\nconst NUM_EQUATOR_FACELETS = 6;\n\ntype WedgeShape = \"cornerHigh\" | \"cornerLow\" | \"edge\";\n\nfunction wedgeShape(piece: number): WedgeShape {\n const phase =\n piece < WEDGES_PER_LAYER ? piece % 3 : (piece - WEDGES_PER_LAYER + 2) % 3;\n return phase === 0 ? \"cornerHigh\" : phase === 1 ? \"cornerLow\" : \"edge\";\n}\n\nfunction isLastLayer(piece: number): boolean {\n return piece < WEDGES_PER_LAYER;\n}\n\nconst UD_FACELETS: Record<WedgeShape, number[]> = {\n cornerHigh: [1, 2, 4],\n cornerLow: [1, 2, 3],\n edge: [1],\n};\n\nconst SIDE_FACELETS: Record<WedgeShape, number[]> = {\n cornerHigh: [0, 3, 5, 6, 8],\n cornerLow: [0, 4, 5, 6, 7],\n edge: [0, 2, 3, 4, 5],\n};\n\nfunction wedgeMask(\n piece: number,\n udMask: FaceletMeshStickeringMask,\n sideMask: FaceletMeshStickeringMask,\n): PieceStickeringMask {\n const shape = wedgeShape(piece);\n // `null` leaves a facelet untouched, which matters for the facelets that this\n // wedge shape doesn't use (they're transparent in the SVGs).\n const facelets: (FaceletMeshStickeringMask | null)[] = new Array(\n NUM_WEDGE_FACELETS,\n ).fill(null);\n for (const facelet of SIDE_FACELETS[shape]) {\n facelets[facelet] = sideMask;\n }\n for (const facelet of UD_FACELETS[shape]) {\n facelets[facelet] = udMask;\n }\n return { facelets };\n}\n\nfunction equatorMask(mask: FaceletMeshStickeringMask): PieceStickeringMask {\n return { facelets: new Array(NUM_EQUATOR_FACELETS).fill(mask) };\n}\n\nfunction masksFor(stickering: ExperimentalStickering): {\n wedge: (piece: number) => PieceStickeringMask;\n equator: FaceletMeshStickeringMask;\n} {\n switch (stickering) {\n case \"OLL\":\n return {\n wedge: (piece) => wedgeMask(piece, \"regular\", \"ignored\"),\n equator: \"dim\",\n };\n case \"PLL\":\n return {\n wedge: (piece) =>\n isLastLayer(piece)\n ? wedgeMask(piece, \"dim\", \"regular\")\n : wedgeMask(piece, \"dim\", \"dim\"),\n equator: \"dim\",\n };\n default:\n return {\n wedge: (piece) => wedgeMask(piece, \"regular\", \"regular\"),\n equator: \"regular\",\n };\n }\n}\n\nexport async function square1StickeringMask(\n _puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n const { wedge, equator } = masksFor(stickering);\n return {\n orbits: {\n WEDGES: {\n pieces: new Array(2 * WEDGES_PER_LAYER)\n .fill(null)\n .map((_, piece) => wedge(piece)),\n },\n EQUATOR: {\n pieces: new Array(2).fill(null).map(() => equatorMask(equator)),\n },\n },\n };\n}\n"],
|
|
5
|
+
"mappings": ";AAaA,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAI7B,SAAS,WAAW,OAA2B;AAC7C,QAAM,QACJ,QAAQ,mBAAmB,QAAQ,KAAK,QAAQ,mBAAmB,KAAK;AAC1E,SAAO,UAAU,IAAI,eAAe,UAAU,IAAI,cAAc;AAClE;AAEA,SAAS,YAAY,OAAwB;AAC3C,SAAO,QAAQ;AACjB;AAEA,IAAM,cAA4C;AAAA,EAChD,YAAY,CAAC,GAAG,GAAG,CAAC;AAAA,EACpB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,EACnB,MAAM,CAAC,CAAC;AACV;AAEA,IAAM,gBAA8C;AAAA,EAClD,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC1B,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EACzB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACtB;AAEA,SAAS,UACP,OACA,QACA,UACqB;AACrB,QAAM,QAAQ,WAAW,KAAK;AAG9B,QAAM,WAAiD,IAAI;AAAA,IACzD;AAAA,EACF,EAAE,KAAK,IAAI;AACX,aAAW,WAAW,cAAc,KAAK,GAAG;AAC1C,aAAS,OAAO,IAAI;AAAA,EACtB;AACA,aAAW,WAAW,YAAY,KAAK,GAAG;AACxC,aAAS,OAAO,IAAI;AAAA,EACtB;AACA,SAAO,EAAE,SAAS;AACpB;AAEA,SAAS,YAAY,MAAsD;AACzE,SAAO,EAAE,UAAU,IAAI,MAAM,oBAAoB,EAAE,KAAK,IAAI,EAAE;AAChE;AAEA,SAAS,SAAS,YAGhB;AACA,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,QACL,OAAO,CAAC,UAAU,UAAU,OAAO,WAAW,SAAS;AAAA,QACvD,SAAS;AAAA,MACX;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,OAAO,CAAC,UACN,YAAY,KAAK,IACb,UAAU,OAAO,OAAO,SAAS,IACjC,UAAU,OAAO,OAAO,KAAK;AAAA,QACnC,SAAS;AAAA,MACX;AAAA,IACF;AACE,aAAO;AAAA,QACL,OAAO,CAAC,UAAU,UAAU,OAAO,WAAW,SAAS;AAAA,QACvD,SAAS;AAAA,MACX;AAAA,EACJ;AACF;AAEA,eAAsB,sBACpB,eACA,YACyB;AACzB,QAAM,EAAE,OAAO,QAAQ,IAAI,SAAS,UAAU;AAC9C,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,QAAQ,IAAI,MAAM,IAAI,gBAAgB,EACnC,KAAK,IAAI,EACT,IAAI,CAAC,GAAG,UAAU,MAAM,KAAK,CAAC;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACP,QAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,MAAM,YAAY,OAAO,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|