cubing 0.26.3 → 0.26.6

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.
Files changed (87) hide show
  1. package/dist/esm/alg/index.js +1 -1
  2. package/dist/esm/bluetooth/index.js +11 -7
  3. package/dist/esm/bluetooth/index.js.map +2 -2
  4. package/dist/esm/{chunk-4OCHKVLJ.js → chunk-7K6HJKEG.js} +5 -5
  5. package/dist/esm/chunk-7K6HJKEG.js.map +7 -0
  6. package/dist/esm/{chunk-DO7GZAW4.js → chunk-FCB447RN.js} +4 -4
  7. package/dist/esm/chunk-FCB447RN.js.map +7 -0
  8. package/dist/esm/{chunk-HD2CMNE4.js → chunk-GNKVWDWW.js} +7 -627
  9. package/dist/esm/chunk-GNKVWDWW.js.map +7 -0
  10. package/dist/esm/{chunk-ESSOEWR6.js → chunk-GOBAXDTU.js} +61 -341
  11. package/dist/esm/chunk-GOBAXDTU.js.map +7 -0
  12. package/dist/esm/{chunk-FB7SFELN.js → chunk-ITRA3DUQ.js} +2 -2
  13. package/dist/esm/{chunk-FB7SFELN.js.map → chunk-ITRA3DUQ.js.map} +0 -0
  14. package/dist/esm/{chunk-RGEST6KF.js → chunk-K62P6E3H.js} +7 -7
  15. package/dist/esm/{chunk-RGEST6KF.js.map → chunk-K62P6E3H.js.map} +0 -0
  16. package/dist/esm/{chunk-3NFDCQI2.js → chunk-LJBHUHEP.js} +2 -56
  17. package/dist/esm/{chunk-3NFDCQI2.js.map → chunk-LJBHUHEP.js.map} +3 -3
  18. package/dist/esm/{chunk-NSLR2SC4.js → chunk-NHCGS73I.js} +2 -2
  19. package/dist/esm/{chunk-NSLR2SC4.js.map → chunk-NHCGS73I.js.map} +0 -0
  20. package/dist/esm/{chunk-3ADPLDWG.js → chunk-TB6NTLZY.js} +370 -81
  21. package/dist/esm/chunk-TB6NTLZY.js.map +7 -0
  22. package/dist/esm/chunk-VCOUFQGJ.js +240 -0
  23. package/dist/esm/chunk-VCOUFQGJ.js.map +7 -0
  24. package/dist/esm/chunk-VFDAQ42O.js +684 -0
  25. package/dist/esm/chunk-VFDAQ42O.js.map +7 -0
  26. package/dist/esm/{chunk-ZPAGJE7S.js → chunk-WQK6XWML.js} +2 -2
  27. package/dist/esm/{chunk-ZPAGJE7S.js.map → chunk-WQK6XWML.js.map} +1 -1
  28. package/dist/esm/kpuzzle/index.js +4 -6
  29. package/dist/esm/notation/index.js +2 -2
  30. package/dist/esm/protocol/index.js +4 -4
  31. package/dist/esm/puzzle-geometry/index.js +2 -2
  32. package/dist/esm/puzzles/index.js +4 -12
  33. package/dist/esm/{puzzles-dynamic-side-events-CXNWDLKD.js → puzzles-dynamic-side-events-HOXBZYWI.js} +21 -21
  34. package/dist/esm/{puzzles-dynamic-side-events-CXNWDLKD.js.map → puzzles-dynamic-side-events-HOXBZYWI.js.map} +1 -1
  35. package/dist/esm/{puzzles-dynamic-unofficial-CKTRIKMY.js → puzzles-dynamic-unofficial-MGVOFUDR.js} +79 -79
  36. package/dist/esm/{puzzles-dynamic-unofficial-CKTRIKMY.js.map → puzzles-dynamic-unofficial-MGVOFUDR.js.map} +1 -1
  37. package/dist/esm/scramble/index.js +2 -6
  38. package/dist/esm/search/index.js +9 -10
  39. package/dist/esm/{search-dynamic-sgs-side-events-ZDPMZ4Y7.js → search-dynamic-sgs-side-events-KK62JAWA.js} +7 -6
  40. package/dist/esm/{search-dynamic-sgs-side-events-ZDPMZ4Y7.js.map → search-dynamic-sgs-side-events-KK62JAWA.js.map} +1 -1
  41. package/dist/esm/{search-dynamic-sgs-unofficial-RAGEBTDP.js → search-dynamic-sgs-unofficial-VLNIEUW3.js} +8 -7
  42. package/dist/esm/{search-dynamic-sgs-unofficial-RAGEBTDP.js.map → search-dynamic-sgs-unofficial-VLNIEUW3.js.map} +1 -1
  43. package/dist/esm/{search-dynamic-solve-4x4x4-W455FUFG.js → search-dynamic-solve-4x4x4-S5JPXMNU.js} +7 -6
  44. package/dist/esm/{search-dynamic-solve-4x4x4-W455FUFG.js.map → search-dynamic-solve-4x4x4-S5JPXMNU.js.map} +1 -1
  45. package/dist/esm/{search-dynamic-solve-fto-ZM45FTCO.js → search-dynamic-solve-fto-WROONLZS.js} +6 -6
  46. package/dist/esm/search-dynamic-solve-fto-WROONLZS.js.map +7 -0
  47. package/dist/esm/{search-dynamic-solve-kilominx-PAW6HKT5.js → search-dynamic-solve-kilominx-UEFJENHO.js} +2 -2
  48. package/dist/esm/{search-dynamic-solve-kilominx-PAW6HKT5.js.map → search-dynamic-solve-kilominx-UEFJENHO.js.map} +0 -0
  49. package/dist/esm/search-worker-inside-generated-string-AVMDARJP.js +3768 -0
  50. package/dist/esm/search-worker-inside-generated-string-AVMDARJP.js.map +7 -0
  51. package/dist/esm/{search-worker-js-entry-5IIKIMTU.js → search-worker-js-entry-KJRZ3CJQ.js} +22 -21
  52. package/dist/esm/{search-worker-js-entry-5IIKIMTU.js.map → search-worker-js-entry-KJRZ3CJQ.js.map} +1 -1
  53. package/dist/esm/{search-worker-ts-entry-BV3J54MW.js → search-worker-ts-entry-AFMPRPSV.js} +3 -3
  54. package/dist/esm/{search-worker-ts-entry-BV3J54MW.js.map → search-worker-ts-entry-AFMPRPSV.js.map} +0 -0
  55. package/dist/esm/stream/index.js +1 -1
  56. package/dist/esm/twisty/index.js +78 -38
  57. package/dist/esm/twisty/index.js.map +3 -3
  58. package/dist/esm/{twisty-dynamic-3d-KFFJZNMZ.js → twisty-dynamic-3d-AVZOMIIW.js} +25 -8
  59. package/dist/esm/twisty-dynamic-3d-AVZOMIIW.js.map +7 -0
  60. package/dist/types/{Alg-6f3dc52c.d.ts → Alg-5cf4b166.d.ts} +2 -2
  61. package/dist/types/{KPuzzleDefinition-121e85a8.d.ts → KState-84892e94.d.ts} +77 -5
  62. package/dist/types/{PuzzleLoader-9243f44d.d.ts → TwizzleLink-02cfe1b1.d.ts} +42 -145
  63. package/dist/types/alg/index.d.ts +3 -3
  64. package/dist/types/bluetooth/index.d.ts +4 -5
  65. package/dist/types/{bluetooth-puzzle-679d8ca3.d.ts → bluetooth-puzzle-0f2e5f07.d.ts} +2 -2
  66. package/dist/types/kpuzzle/index.d.ts +2 -8
  67. package/dist/types/notation/index.d.ts +1 -1
  68. package/dist/types/{outside-f7ba9c00.d.ts → outside-d0ced6cc.d.ts} +2 -2
  69. package/dist/types/{parse-6d363160.d.ts → parse-9db7ee51.d.ts} +1 -1
  70. package/dist/types/protocol/index.d.ts +3 -6
  71. package/dist/types/puzzle-geometry/index.d.ts +3 -3
  72. package/dist/types/puzzles/index.d.ts +6 -16
  73. package/dist/types/scramble/index.d.ts +3 -4
  74. package/dist/types/search/index.d.ts +3 -4
  75. package/dist/types/stream/index.d.ts +3 -4
  76. package/dist/types/twisty/index.d.ts +5 -6
  77. package/package.json +6 -2
  78. package/dist/esm/chunk-3ADPLDWG.js.map +0 -7
  79. package/dist/esm/chunk-4OCHKVLJ.js.map +0 -7
  80. package/dist/esm/chunk-DO7GZAW4.js.map +0 -7
  81. package/dist/esm/chunk-ESSOEWR6.js.map +0 -7
  82. package/dist/esm/chunk-HD2CMNE4.js.map +0 -7
  83. package/dist/esm/search-dynamic-solve-fto-ZM45FTCO.js.map +0 -7
  84. package/dist/esm/search-worker-inside-generated-string-VBEHCGJ6.js +0 -3768
  85. package/dist/esm/search-worker-inside-generated-string-VBEHCGJ6.js.map +0 -7
  86. package/dist/esm/twisty-dynamic-3d-KFFJZNMZ.js.map +0 -7
  87. package/dist/types/KState-73482114.d.ts +0 -70
@@ -0,0 +1,240 @@
1
+ import {
2
+ experimental3x3x3KPuzzle,
3
+ normalize3x3x3Orientation,
4
+ puzzleOrientation3x3x3Cache,
5
+ puzzleOrientation3x3x3Idx
6
+ } from "./chunk-VFDAQ42O.js";
7
+ import {
8
+ KState
9
+ } from "./chunk-GNKVWDWW.js";
10
+
11
+ // src/cubing/protocol/binary/orbit-indexing.ts
12
+ function identityPermutation(numElems) {
13
+ const arr = new Array(numElems);
14
+ for (let i = 0; i < numElems; i++) {
15
+ arr[i] = i;
16
+ }
17
+ return arr;
18
+ }
19
+ function orientationsToMask(radix, orientations) {
20
+ let val = 0;
21
+ for (const orientation of orientations) {
22
+ val *= radix;
23
+ val += orientation;
24
+ }
25
+ return val;
26
+ }
27
+ function maskToOrientations(radix, numElems, mask) {
28
+ const arr = [];
29
+ while (mask > 0) {
30
+ arr.push(mask % radix);
31
+ mask = Math.floor(mask / radix);
32
+ }
33
+ return new Array(numElems - arr.length).fill(0).concat(arr.reverse());
34
+ }
35
+ function permutationToLex(permutation) {
36
+ const n = permutation.length;
37
+ let lexicographicIdx = 0;
38
+ for (let i = 0; i < n - 1; i++) {
39
+ lexicographicIdx = lexicographicIdx * (n - i);
40
+ for (let j = i + 1; j < n; j++) {
41
+ if (permutation[i] > permutation[j]) {
42
+ lexicographicIdx += 1;
43
+ }
44
+ }
45
+ }
46
+ return lexicographicIdx;
47
+ }
48
+ function lexToPermutation(numPieces, lexicographicIdx) {
49
+ const permutation = new Array(numPieces);
50
+ permutation[numPieces - 1] = 0;
51
+ for (let i = numPieces - 2; i >= 0; i--) {
52
+ permutation[i] = lexicographicIdx % (numPieces - i);
53
+ lexicographicIdx = Math.floor(lexicographicIdx / (numPieces - i));
54
+ for (let j = i + 1; j < numPieces; j++) {
55
+ if (permutation[j] >= permutation[i]) {
56
+ permutation[j] = permutation[j] + 1;
57
+ }
58
+ }
59
+ }
60
+ return permutation;
61
+ }
62
+
63
+ // src/cubing/protocol/binary/binary3x3x3.ts
64
+ function reorientPuzzle(state, idxU, idxL) {
65
+ return state.applyTransformation(puzzleOrientation3x3x3Cache()[idxU][idxL].invert());
66
+ }
67
+ var BIT_LENGTHS = [29, 12, 16, 13, 3, 2, 1, 12];
68
+ function arraySum(arr) {
69
+ let total = 0;
70
+ for (const entry of arr) {
71
+ total += entry;
72
+ }
73
+ return total;
74
+ }
75
+ function splitBinary(bitLengths, buffy) {
76
+ const u8buffy = new Uint8Array(buffy);
77
+ let at = 0;
78
+ let bits = 0;
79
+ let accum = 0;
80
+ const values = [];
81
+ for (const bitLength of bitLengths) {
82
+ while (bits < bitLength) {
83
+ accum = accum << 8 | u8buffy[at++];
84
+ bits += 8;
85
+ }
86
+ values.push(accum >> bits - bitLength & (1 << bitLength) - 1);
87
+ bits -= bitLength;
88
+ }
89
+ return values;
90
+ }
91
+ function concatBinary(bitLengths, values) {
92
+ const buffy = new Uint8Array(Math.ceil(arraySum(bitLengths) / 8));
93
+ let at = 0;
94
+ let bits = 0;
95
+ let accum = 0;
96
+ for (let i = 0; i < bitLengths.length; i++) {
97
+ accum = accum << bitLengths[i] | values[i];
98
+ bits += bitLengths[i];
99
+ while (bits >= 8) {
100
+ buffy[at++] = accum >> bits - 8;
101
+ bits -= 8;
102
+ }
103
+ }
104
+ if (bits > 0) {
105
+ buffy[at++] = accum << 8 - bits;
106
+ }
107
+ return buffy;
108
+ }
109
+ function supportsPuzzleOrientation(components) {
110
+ return components.poIdxU !== 7;
111
+ }
112
+ function reid3x3x3ToBinaryComponents(state) {
113
+ const normedState = normalize3x3x3Orientation(state);
114
+ const epLex = permutationToLex(normedState.stateData["EDGES"].pieces);
115
+ const eoMask = orientationsToMask(2, normedState.stateData["EDGES"].orientation);
116
+ const cpLex = permutationToLex(normedState.stateData["CORNERS"].pieces);
117
+ const coMask = orientationsToMask(3, normedState.stateData["CORNERS"].orientation);
118
+ const [poIdxU, poIdxL] = puzzleOrientation3x3x3Idx(state);
119
+ const moSupport = 1;
120
+ const moMask = orientationsToMask(4, normedState.stateData["CENTERS"].orientation);
121
+ return {
122
+ epLex,
123
+ eoMask,
124
+ cpLex,
125
+ coMask,
126
+ poIdxU,
127
+ poIdxL,
128
+ moSupport,
129
+ moMask
130
+ };
131
+ }
132
+ function binaryComponentsToTwizzleBinary(components) {
133
+ const { epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask } = components;
134
+ return concatBinary(BIT_LENGTHS, [
135
+ epLex,
136
+ eoMask,
137
+ cpLex,
138
+ coMask,
139
+ poIdxU,
140
+ poIdxL,
141
+ moSupport,
142
+ moMask
143
+ ]);
144
+ }
145
+ function reid3x3x3ToTwizzleBinary(state) {
146
+ const components = reid3x3x3ToBinaryComponents(state);
147
+ return binaryComponentsToTwizzleBinary(components);
148
+ }
149
+ function twizzleBinaryToBinaryComponents(buffer) {
150
+ const [epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask] = splitBinary(BIT_LENGTHS, buffer);
151
+ return {
152
+ epLex,
153
+ eoMask,
154
+ cpLex,
155
+ coMask,
156
+ poIdxU,
157
+ poIdxL,
158
+ moSupport,
159
+ moMask
160
+ };
161
+ }
162
+ function binaryComponentsToReid3x3x3(components) {
163
+ if (components.moSupport !== 1) {
164
+ throw new Error("Must support center orientation.");
165
+ }
166
+ const normedState = new KState(experimental3x3x3KPuzzle, {
167
+ EDGES: {
168
+ pieces: lexToPermutation(12, components.epLex),
169
+ orientation: maskToOrientations(2, 12, components.eoMask)
170
+ },
171
+ CORNERS: {
172
+ pieces: lexToPermutation(8, components.cpLex),
173
+ orientation: maskToOrientations(3, 8, components.coMask)
174
+ },
175
+ CENTERS: {
176
+ pieces: identityPermutation(6),
177
+ orientation: maskToOrientations(4, 6, components.moMask)
178
+ }
179
+ });
180
+ if (!supportsPuzzleOrientation(components)) {
181
+ return normedState;
182
+ }
183
+ return reorientPuzzle(normedState, components.poIdxU, components.poIdxL);
184
+ }
185
+ function validateComponents(components) {
186
+ const errors = [];
187
+ if (components.epLex < 0 || components.epLex >= 479001600) {
188
+ errors.push(`epLex (${components.epLex}) out of range`);
189
+ }
190
+ if (components.cpLex < 0 || components.cpLex >= 40320) {
191
+ errors.push(`cpLex (${components.cpLex}) out of range`);
192
+ }
193
+ if (components.coMask < 0 || components.coMask >= 6561) {
194
+ errors.push(`coMask (${components.coMask}) out of range`);
195
+ }
196
+ if (components.poIdxU < 0 || components.poIdxU >= 6) {
197
+ if (supportsPuzzleOrientation(components)) {
198
+ errors.push(`poIdxU (${components.poIdxU}) out of range`);
199
+ }
200
+ }
201
+ if (components.eoMask < 0 || components.eoMask >= 4096) {
202
+ errors.push(`eoMask (${components.eoMask}) out of range`);
203
+ }
204
+ if (components.moMask < 0 || components.moMask >= 4096) {
205
+ errors.push(`moMask (${components.moMask}) out of range`);
206
+ }
207
+ if (components.poIdxL < 0 || components.poIdxL >= 4) {
208
+ errors.push(`poIdxL (${components.poIdxL}) out of range`);
209
+ }
210
+ if (components.moSupport < 0 || components.moSupport >= 2) {
211
+ errors.push(`moSupport (${components.moSupport}) out of range`);
212
+ }
213
+ return errors;
214
+ }
215
+ function twizzleBinaryToReid3x3x3(buffy) {
216
+ const components = twizzleBinaryToBinaryComponents(buffy);
217
+ const errors = validateComponents(components);
218
+ if (errors.length !== 0) {
219
+ throw new Error(`Invalid binary state components: ${errors.join(", ")}`);
220
+ }
221
+ return binaryComponentsToReid3x3x3(components);
222
+ }
223
+
224
+ // src/cubing/protocol/binary/hex.ts
225
+ function bufferToSpacedHex(buffer) {
226
+ return Array.prototype.map.call(new Uint8Array(buffer), (x) => ("00" + x.toString(16)).slice(-2)).join(" ");
227
+ }
228
+ function spacedHexToBuffer(hex) {
229
+ return new Uint8Array(hex.split(" ").map((c) => parseInt(c, 16)));
230
+ }
231
+
232
+ export {
233
+ reid3x3x3ToTwizzleBinary,
234
+ twizzleBinaryToBinaryComponents,
235
+ binaryComponentsToReid3x3x3,
236
+ twizzleBinaryToReid3x3x3,
237
+ bufferToSpacedHex,
238
+ spacedHexToBuffer
239
+ };
240
+ //# sourceMappingURL=chunk-VCOUFQGJ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/protocol/binary/orbit-indexing.ts", "../../src/cubing/protocol/binary/binary3x3x3.ts", "../../src/cubing/protocol/binary/hex.ts"],
4
+ "sourcesContent": ["export function identityPermutation(numElems: number): number[] {\n const arr = new Array<number>(numElems);\n for (let i = 0; i < numElems; i++) {\n arr[i] = i;\n }\n return arr;\n}\n\n// Inclusive start, exclusive end (similar to `Array.prototype.slice`)\nexport function orientationsToMask(\n radix: number,\n orientations: number[],\n): number {\n let val = 0;\n for (const orientation of orientations) {\n val *= radix;\n val += orientation;\n }\n return val;\n}\n\n// Inclusive start, exclusive end (similar to `Array.prototype.slice`)\nexport function maskToOrientations(\n radix: number,\n numElems: number,\n mask: number,\n): number[] {\n const arr = [];\n while (mask > 0) {\n arr.push(mask % radix);\n mask = Math.floor(mask / radix);\n }\n return new Array<number>(numElems - arr.length).fill(0).concat(arr.reverse());\n}\n\n// From https://www.jaapsch.net/puzzles/compindx.htm#perm\nexport function permutationToLex(permutation: number[]): number {\n const n = permutation.length;\n let lexicographicIdx = 0;\n for (let i = 0; i < n - 1; i++) {\n lexicographicIdx = lexicographicIdx * (n - i);\n for (let j = i + 1; j < n; j++) {\n if (permutation[i] > permutation[j]) {\n lexicographicIdx += 1;\n }\n }\n }\n return lexicographicIdx;\n}\n\n// From https://www.jaapsch.net/puzzles/compindx.htm#perm\nexport function lexToPermutation(\n numPieces: number,\n lexicographicIdx: number,\n): number[] {\n const permutation: number[] = new Array(numPieces);\n permutation[numPieces - 1] = 0;\n for (let i = numPieces - 2; i >= 0; i--) {\n permutation[i] = lexicographicIdx % (numPieces - i);\n lexicographicIdx = Math.floor(lexicographicIdx / (numPieces - i));\n for (let j = i + 1; j < numPieces; j++) {\n if (permutation[j] >= permutation[i]) {\n permutation[j] = permutation[j] + 1;\n }\n }\n }\n return permutation;\n}\n", "import { KState } from \"../../kpuzzle\";\nimport {\n experimental3x3x3KPuzzle,\n experimentalNormalize3x3x3Orientation,\n experimentalPuzzleOrientation3x3x3Cache,\n experimentalPuzzleOrientation3x3x3Idx,\n} from \"../../puzzles/cubing-private\";\nimport {\n identityPermutation,\n lexToPermutation,\n maskToOrientations,\n orientationsToMask,\n permutationToLex,\n} from \"./orbit-indexing\";\n\n// TODO: combine with `orientPuzzle`?\nexport function reorientPuzzle(\n state: KState,\n idxU: number,\n idxL: number,\n): KState {\n return state.applyTransformation(\n experimentalPuzzleOrientation3x3x3Cache()[idxU][idxL].invert(),\n );\n}\n\ntype Binary3x3x3State = ArrayBuffer;\n\n// Bit lengths of the encoded components, in order.\nconst BIT_LENGTHS = [29, 12, 16, 13, 3, 2, 1, 12];\n\n// These fields are sorted by the order in which they appear in the binary format.\nexport interface Binary3x3x3Components {\n epLex: number; // 29 bits, edge permutation\n eoMask: number; // 12 bits, edge orientation\n cpLex: number; // 16 bits, corner permutation\n coMask: number; // 13 bits, corner orientation\n poIdxU: number; // 3 bits, puzzle orientation (U face)\n poIdxL: number; // 2 bits, puzzle orientation (L face)\n moSupport: number; // 1 bit, center orientation support\n moMask: number; // 12 bits, center orientation\n}\n\n// There are various clever ways to do this, but this is simple and efficient.\nfunction arraySum(arr: number[]): number {\n let total = 0;\n for (const entry of arr) {\n total += entry;\n }\n return total;\n}\n\n// Due to limitations in JS bit operations, this is unsafe if any of the bit lengths span across the contents of more than 4 bytes.\n// - Safe: [8, 32]\n// - Unsafe: [4, 32, 4]\n// - Unsafe: [40, 4]\nfunction splitBinary(bitLengths: number[], buffy: ArrayBuffer): number[] {\n const u8buffy = new Uint8Array(buffy);\n let at = 0;\n let bits = 0;\n let accum = 0;\n const values: number[] = [];\n for (const bitLength of bitLengths) {\n while (bits < bitLength) {\n accum = (accum << 8) | u8buffy[at++];\n bits += 8;\n }\n values.push((accum >> (bits - bitLength)) & ((1 << bitLength) - 1));\n bits -= bitLength;\n }\n return values;\n}\n\n// See above for safety notes.\nfunction concatBinary(bitLengths: number[], values: number[]): ArrayBuffer {\n const buffy = new Uint8Array(Math.ceil(arraySum(bitLengths) / 8));\n let at = 0;\n let bits = 0;\n let accum = 0;\n for (let i = 0; i < bitLengths.length; i++) {\n accum = (accum << bitLengths[i]) | values[i];\n bits += bitLengths[i];\n while (bits >= 8) {\n buffy[at++] = accum >> (bits - 8);\n bits -= 8;\n }\n }\n if (bits > 0) {\n buffy[at++] = accum << (8 - bits);\n }\n return buffy;\n}\n\n// 0x111 (for idxU) means \"not supported\"\nfunction supportsPuzzleOrientation(components: Binary3x3x3Components): boolean {\n return components.poIdxU !== 7;\n}\n\nexport function reid3x3x3ToBinaryComponents(\n state: KState,\n): Binary3x3x3Components {\n const normedState = experimentalNormalize3x3x3Orientation(state);\n\n const epLex = permutationToLex(normedState.stateData[\"EDGES\"].pieces);\n const eoMask = orientationsToMask(\n 2,\n normedState.stateData[\"EDGES\"].orientation,\n );\n const cpLex = permutationToLex(normedState.stateData[\"CORNERS\"].pieces);\n const coMask = orientationsToMask(\n 3,\n normedState.stateData[\"CORNERS\"].orientation,\n );\n const [poIdxU, poIdxL] = experimentalPuzzleOrientation3x3x3Idx(state);\n const moSupport = 1; // Required for now.\n const moMask = orientationsToMask(\n 4,\n normedState.stateData[\"CENTERS\"].orientation,\n );\n\n return {\n epLex,\n eoMask,\n cpLex,\n coMask,\n poIdxU,\n poIdxL,\n moSupport,\n moMask,\n };\n}\n\nexport function binaryComponentsToTwizzleBinary(\n components: Binary3x3x3Components,\n): Binary3x3x3State {\n const { epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask } =\n components;\n\n return concatBinary(BIT_LENGTHS, [\n epLex,\n eoMask,\n cpLex,\n coMask,\n poIdxU,\n poIdxL,\n moSupport,\n moMask,\n ]);\n}\n\nexport function reid3x3x3ToTwizzleBinary(state: KState): Binary3x3x3State {\n const components: Binary3x3x3Components = reid3x3x3ToBinaryComponents(state);\n return binaryComponentsToTwizzleBinary(components);\n}\n\nexport function twizzleBinaryToBinaryComponents(\n buffer: ArrayBuffer,\n): Binary3x3x3Components {\n const [epLex, eoMask, cpLex, coMask, poIdxU, poIdxL, moSupport, moMask] =\n splitBinary(BIT_LENGTHS, buffer);\n\n return {\n epLex,\n eoMask,\n cpLex,\n coMask,\n poIdxU,\n poIdxL,\n moSupport,\n moMask,\n };\n}\n\nexport function binaryComponentsToReid3x3x3(\n components: Binary3x3x3Components,\n): KState {\n if (components.moSupport !== 1) {\n throw new Error(\"Must support center orientation.\");\n }\n\n const normedState = new KState(experimental3x3x3KPuzzle, {\n EDGES: {\n pieces: lexToPermutation(12, components.epLex),\n orientation: maskToOrientations(2, 12, components.eoMask),\n },\n CORNERS: {\n pieces: lexToPermutation(8, components.cpLex),\n orientation: maskToOrientations(3, 8, components.coMask),\n },\n CENTERS: {\n pieces: identityPermutation(6),\n orientation: maskToOrientations(4, 6, components.moMask),\n },\n });\n\n if (!supportsPuzzleOrientation(components)) {\n return normedState;\n }\n\n return reorientPuzzle(normedState, components.poIdxU, components.poIdxL);\n}\n\n// Returns a list of error string.\n// An empty list means validation success.\nfunction validateComponents(components: Binary3x3x3Components): string[] {\n const errors = [];\n if (components.epLex < 0 || components.epLex >= 479001600) {\n errors.push(`epLex (${components.epLex}) out of range`);\n }\n if (components.cpLex < 0 || components.cpLex >= 40320) {\n errors.push(`cpLex (${components.cpLex}) out of range`);\n }\n if (components.coMask < 0 || components.coMask >= 6561) {\n errors.push(`coMask (${components.coMask}) out of range`);\n }\n if (components.poIdxU < 0 || components.poIdxU >= 6) {\n // 0x111 (for idxU) means \"not supported\"\n if (supportsPuzzleOrientation(components)) {\n errors.push(`poIdxU (${components.poIdxU}) out of range`);\n }\n }\n // The following cannot be (f decoded from binary properl) out of rangey.\n if (components.eoMask < 0 || components.eoMask >= 4096) {\n errors.push(`eoMask (${components.eoMask}) out of range`);\n }\n if (components.moMask < 0 || components.moMask >= 4096) {\n errors.push(`moMask (${components.moMask}) out of range`);\n }\n if (components.poIdxL < 0 || components.poIdxL >= 4) {\n errors.push(`poIdxL (${components.poIdxL}) out of range`);\n }\n if (components.moSupport < 0 || components.moSupport >= 2) {\n errors.push(`moSupport (${components.moSupport}) out of range`);\n }\n return errors;\n}\n\nexport function twizzleBinaryToReid3x3x3(buffy: ArrayBuffer): KState {\n const components = twizzleBinaryToBinaryComponents(buffy);\n const errors = validateComponents(components);\n if (errors.length !== 0) {\n throw new Error(`Invalid binary state components: ${errors.join(\", \")}`);\n }\n return binaryComponentsToReid3x3x3(components);\n}\n", "export function bufferToSpacedHex(buffer: ArrayBuffer): string {\n // buffer is an ArrayBuffer\n return (\n Array.prototype.map.call(new Uint8Array(buffer), (x: number) =>\n (\"00\" + x.toString(16)).slice(-2),\n ) as string[]\n ).join(\" \");\n}\n\nexport function spacedHexToBuffer(hex: string): Uint8Array {\n return new Uint8Array(hex.split(\" \").map((c) => parseInt(c, 16)));\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }