cubing 0.25.5 → 0.25.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 (67) hide show
  1. package/dist/esm/{2x2x2.sgs.json-FBJ4RQ4C.js → 2x2x2.sgs.json-GQVTWF7L.js} +3 -3
  2. package/dist/esm/{2x2x2.sgs.json-FBJ4RQ4C.js.map → 2x2x2.sgs.json-GQVTWF7L.js.map} +0 -0
  3. package/dist/esm/{3d-dynamic-TNYERP4O.js → 3d-dynamic-DKWMBHRS.js} +4 -4
  4. package/dist/esm/{3d-dynamic-TNYERP4O.js.map → 3d-dynamic-DKWMBHRS.js.map} +0 -0
  5. package/dist/esm/{444-solver-YZ6PC54L.js → 444-solver-ZBJQH3QR.js} +4 -4
  6. package/dist/esm/{444-solver-YZ6PC54L.js.map → 444-solver-ZBJQH3QR.js.map} +0 -0
  7. package/dist/esm/bluetooth/index.js +3 -3
  8. package/dist/esm/{chunk-V5K5JN2N.js → chunk-BOKO2BWT.js} +20 -3
  9. package/dist/esm/chunk-BOKO2BWT.js.map +7 -0
  10. package/dist/esm/{chunk-Y32HHZUY.js → chunk-FE3HTWQK.js} +8 -2
  11. package/dist/esm/chunk-FE3HTWQK.js.map +7 -0
  12. package/dist/esm/{chunk-RJSX2HO4.js → chunk-HTPDDD3Q.js} +2 -2
  13. package/dist/esm/{chunk-RJSX2HO4.js.map → chunk-HTPDDD3Q.js.map} +0 -0
  14. package/dist/esm/{chunk-QEDC2QTN.js → chunk-L73RWUDG.js} +2 -2
  15. package/dist/esm/{chunk-QEDC2QTN.js.map → chunk-L73RWUDG.js.map} +0 -0
  16. package/dist/esm/{chunk-TXTMBIUR.js → chunk-L7AOT5LY.js} +2 -2
  17. package/dist/esm/{chunk-TXTMBIUR.js.map → chunk-L7AOT5LY.js.map} +0 -0
  18. package/dist/esm/{chunk-KJZNEDOV.js → chunk-LZGPOT2V.js} +2 -2
  19. package/dist/esm/{chunk-KJZNEDOV.js.map → chunk-LZGPOT2V.js.map} +0 -0
  20. package/dist/esm/{chunk-LGM2HUUG.js → chunk-ME2QTCHN.js} +3 -3
  21. package/dist/esm/{chunk-LGM2HUUG.js.map → chunk-ME2QTCHN.js.map} +0 -0
  22. package/dist/esm/{chunk-JLNFWJIT.js → chunk-T2BDGTK3.js} +3 -3
  23. package/dist/esm/{chunk-JLNFWJIT.js.map → chunk-T2BDGTK3.js.map} +0 -0
  24. package/dist/esm/{chunk-4VNM5SER.js → chunk-TG5KP5IL.js} +2 -2
  25. package/dist/esm/{chunk-4VNM5SER.js.map → chunk-TG5KP5IL.js.map} +0 -0
  26. package/dist/esm/{fto.dynamic-RAXDXLKL.js → fto.dynamic-ZH5IVUKX.js} +3 -3
  27. package/dist/esm/{fto.dynamic-RAXDXLKL.js.map → fto.dynamic-ZH5IVUKX.js.map} +0 -0
  28. package/dist/esm/kpuzzle/index.js +1 -1
  29. package/dist/esm/{megaminx.sgs.json-3ZEDZMWF.js → megaminx.sgs.json-JXXOXGQE.js} +3 -3
  30. package/dist/esm/{megaminx.sgs.json-3ZEDZMWF.js.map → megaminx.sgs.json-JXXOXGQE.js.map} +0 -0
  31. package/dist/esm/protocol/index.js +2 -2
  32. package/dist/esm/puzzles/index.js +2 -2
  33. package/dist/esm/{pyraminx.sgs.json-AUUH6ELM.js → pyraminx.sgs.json-EHYGSC7B.js} +4 -4
  34. package/dist/esm/{pyraminx.sgs.json-AUUH6ELM.js.map → pyraminx.sgs.json-EHYGSC7B.js.map} +0 -0
  35. package/dist/esm/redi_cube-E5F64NIQ.js +564 -0
  36. package/dist/esm/redi_cube-E5F64NIQ.js.map +7 -0
  37. package/dist/esm/redi_cube.kpuzzle.json-EPBKWOMV.js +66 -0
  38. package/dist/esm/redi_cube.kpuzzle.json-EPBKWOMV.js.map +7 -0
  39. package/dist/esm/redi_cube.kpuzzle.svg-BSHCMC2Z.js +160 -0
  40. package/dist/esm/redi_cube.kpuzzle.svg-BSHCMC2Z.js.map +7 -0
  41. package/dist/esm/scramble/index.js +4 -4
  42. package/dist/esm/search/index.js +4 -4
  43. package/dist/esm/{search-worker-js-entry-B76LGKC2.js → search-worker-js-entry-BDMABBZV.js} +26 -17
  44. package/dist/esm/{search-worker-js-entry-B76LGKC2.js.map → search-worker-js-entry-BDMABBZV.js.map} +3 -3
  45. package/dist/esm/{search-worker-ts-entry-JZTMF3AC.js → search-worker-ts-entry-3B5U6XER.js} +2 -2
  46. package/dist/esm/{search-worker-ts-entry-JZTMF3AC.js.map → search-worker-ts-entry-3B5U6XER.js.map} +0 -0
  47. package/dist/esm/{skewb.sgs.json-6NDFH63U.js → skewb.sgs.json-F5FL7533.js} +3 -3
  48. package/dist/esm/{skewb.sgs.json-6NDFH63U.js.map → skewb.sgs.json-F5FL7533.js.map} +0 -0
  49. package/dist/esm/twisty/index.js +4 -3
  50. package/dist/esm/twisty/index.js.map +2 -2
  51. package/dist/esm/worker-inside-generated-string-AHMSHHSF.js +3674 -0
  52. package/dist/esm/worker-inside-generated-string-AHMSHHSF.js.map +7 -0
  53. package/dist/types/kpuzzle/KPuzzleDefinition.d.ts +1 -0
  54. package/dist/types/puzzles/implementations/redi-cube/index.d.ts +2 -0
  55. package/dist/types/puzzles/implementations/redi-cube/redi_cube.kpuzzle.json.d.ts +2 -0
  56. package/dist/types/puzzles/implementations/redi-cube/redi_cube.kpuzzle.svg.d.ts +1 -0
  57. package/dist/types/search/inside/solve/puzzles/redi_cube.d.ts +2 -0
  58. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  59. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +1 -0
  60. package/dist/types/vendor/xyzzy/fto-solver-original.d.ts +1 -30
  61. package/dist/types/vendor/xyzzy/redi_cube.d.ts +2 -0
  62. package/package.json +1 -1
  63. package/dist/esm/chunk-V5K5JN2N.js.map +0 -7
  64. package/dist/esm/chunk-Y32HHZUY.js.map +0 -7
  65. package/dist/esm/worker-inside-generated-string-QVH4RRM7.js +0 -3522
  66. package/dist/esm/worker-inside-generated-string-QVH4RRM7.js.map +0 -7
  67. package/dist/types/vendor/xyzzy/rediscrambler.d.ts +0 -72
@@ -3,8 +3,8 @@ import {
3
3
  } from "./chunk-27KJGD3S.js";
4
4
  import {
5
5
  puzzles
6
- } from "./chunk-V5K5JN2N.js";
7
- import "./chunk-Y32HHZUY.js";
6
+ } from "./chunk-BOKO2BWT.js";
7
+ import "./chunk-FE3HTWQK.js";
8
8
  import "./chunk-EWRBHQFX.js";
9
9
  import "./chunk-WO2AXYFE.js";
10
10
 
@@ -643,4 +643,4 @@ export {
643
643
  randomFTOScrambleString,
644
644
  sgsDataFTO
645
645
  };
646
- //# sourceMappingURL=fto.dynamic-RAXDXLKL.js.map
646
+ //# sourceMappingURL=fto.dynamic-ZH5IVUKX.js.map
@@ -3,7 +3,7 @@ import {
3
3
  KState,
4
4
  KTransformation,
5
5
  experimental3x3x3KPuzzle
6
- } from "../chunk-Y32HHZUY.js";
6
+ } from "../chunk-FE3HTWQK.js";
7
7
  import "../chunk-EWRBHQFX.js";
8
8
  import "../chunk-WO2AXYFE.js";
9
9
  export {
@@ -2,10 +2,10 @@ import {
2
2
  cachedMegaminxKPuzzleWithoutMO,
3
3
  cachedSGSDataMegaminx,
4
4
  sgsDataMegaminx
5
- } from "./chunk-KJZNEDOV.js";
5
+ } from "./chunk-LZGPOT2V.js";
6
6
  import "./chunk-27KJGD3S.js";
7
7
  import "./chunk-F5WNHV7V.js";
8
- import "./chunk-Y32HHZUY.js";
8
+ import "./chunk-FE3HTWQK.js";
9
9
  import "./chunk-EWRBHQFX.js";
10
10
  import "./chunk-WO2AXYFE.js";
11
11
  export {
@@ -13,4 +13,4 @@ export {
13
13
  cachedSGSDataMegaminx,
14
14
  sgsDataMegaminx
15
15
  };
16
- //# sourceMappingURL=megaminx.sgs.json-3ZEDZMWF.js.map
16
+ //# sourceMappingURL=megaminx.sgs.json-JXXOXGQE.js.map
@@ -6,8 +6,8 @@ import {
6
6
  spacedHexToBuffer,
7
7
  twizzleBinaryToBinaryComponents,
8
8
  twizzleBinaryToReid3x3x3
9
- } from "../chunk-TXTMBIUR.js";
10
- import "../chunk-Y32HHZUY.js";
9
+ } from "../chunk-L7AOT5LY.js";
10
+ import "../chunk-FE3HTWQK.js";
11
11
  import "../chunk-EWRBHQFX.js";
12
12
  import "../chunk-WO2AXYFE.js";
13
13
  export {
@@ -7,10 +7,10 @@ import {
7
7
  getFaceletAppearance,
8
8
  puzzles,
9
9
  wcaEventInfo
10
- } from "../chunk-V5K5JN2N.js";
10
+ } from "../chunk-BOKO2BWT.js";
11
11
  import {
12
12
  experimental3x3x3KPuzzle
13
- } from "../chunk-Y32HHZUY.js";
13
+ } from "../chunk-FE3HTWQK.js";
14
14
  import "../chunk-EWRBHQFX.js";
15
15
  import "../chunk-WO2AXYFE.js";
16
16
  export {
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  sgsDataPyraminx,
3
3
  sgsDataPyraminxFixedOrientation
4
- } from "./chunk-RJSX2HO4.js";
4
+ } from "./chunk-HTPDDD3Q.js";
5
5
  import "./chunk-27KJGD3S.js";
6
- import "./chunk-V5K5JN2N.js";
7
- import "./chunk-Y32HHZUY.js";
6
+ import "./chunk-BOKO2BWT.js";
7
+ import "./chunk-FE3HTWQK.js";
8
8
  import "./chunk-EWRBHQFX.js";
9
9
  import "./chunk-WO2AXYFE.js";
10
10
  export {
11
11
  sgsDataPyraminx,
12
12
  sgsDataPyraminxFixedOrientation
13
13
  };
14
- //# sourceMappingURL=pyraminx.sgs.json-AUUH6ELM.js.map
14
+ //# sourceMappingURL=pyraminx.sgs.json-EHYGSC7B.js.map
@@ -0,0 +1,564 @@
1
+ import {
2
+ randomUIntBelowFactory
3
+ } from "./chunk-RENZB7QN.js";
4
+ import {
5
+ Alg
6
+ } from "./chunk-EWRBHQFX.js";
7
+ import "./chunk-WO2AXYFE.js";
8
+
9
+ // src/cubing/vendor/xyzzy/redi_cube.js
10
+ "use strict";
11
+ function factorial(n) {
12
+ if (n < 2)
13
+ return n;
14
+ let f = 1;
15
+ for (let i = 2; i <= n; i++)
16
+ f *= i;
17
+ return f;
18
+ }
19
+ function C(n, k) {
20
+ if (k < 0 || k > n)
21
+ return 0;
22
+ if (k === 0 || k === n)
23
+ return 1;
24
+ let c = 1;
25
+ for (let i = 0; i < k; i++) {
26
+ c = c * (n - i) / (i + 1) | 0;
27
+ }
28
+ return c;
29
+ }
30
+ function permutation_to_index(perm) {
31
+ perm = perm.slice();
32
+ let n = perm.length;
33
+ let f = factorial(n - 1);
34
+ let ind = 0;
35
+ while (n > 1) {
36
+ n--;
37
+ let e = perm[0];
38
+ ind += e * f;
39
+ for (let i = 0; i < n; i++) {
40
+ let x = perm[i + 1];
41
+ perm[i] = x - (x > e);
42
+ }
43
+ f /= n;
44
+ }
45
+ return ind;
46
+ }
47
+ function index_to_permutation(ind, n) {
48
+ let perm = [];
49
+ let f = factorial(n - 1);
50
+ for (let i = 0; i < n; i++) {
51
+ perm[i] = ind / f | 0;
52
+ ind %= f;
53
+ f /= n - 1 - i;
54
+ }
55
+ for (let i = n - 2; i >= 0; i--) {
56
+ for (let j = i + 1; j < n; j++) {
57
+ perm[j] += +(perm[j] >= perm[i]);
58
+ }
59
+ }
60
+ return perm;
61
+ }
62
+ function permutation_parity(A) {
63
+ let n = A.length;
64
+ let parity = 0;
65
+ for (let i = 0; i < n - 1; i++) {
66
+ for (let j = i; j < n; j++) {
67
+ if (A[i] > A[j])
68
+ parity ^= 1;
69
+ }
70
+ }
71
+ return parity;
72
+ }
73
+ function index_to_evenpermutation(ind, n) {
74
+ let perm = [];
75
+ let f = factorial(n - 1) / 2;
76
+ let parity = 0;
77
+ for (let i = 0; i < n - 1; i++) {
78
+ perm[i] = ind / f | 0;
79
+ ind %= f;
80
+ f /= n - 1 - i;
81
+ }
82
+ perm[n - 1] = 0;
83
+ for (let i = n - 2; i >= 0; i--) {
84
+ for (let j = i + 1; j < n; j++) {
85
+ if (perm[j] >= perm[i])
86
+ perm[j]++;
87
+ else
88
+ parity ^= 1;
89
+ }
90
+ }
91
+ if (parity === 1)
92
+ [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];
93
+ return perm;
94
+ }
95
+ function evenpermutation_to_index(perm) {
96
+ return permutation_to_index(perm) >> 1;
97
+ }
98
+ function comb_to_index(l) {
99
+ let bits = l.length;
100
+ let ones = 0;
101
+ for (let i = 0; i < bits; i++)
102
+ ones += +(l[i] === 1);
103
+ let zeros = bits - ones;
104
+ if (zeros === 0 || ones === 0 || bits === 1)
105
+ return 0;
106
+ let b = C(bits - 1, ones);
107
+ let ind = 0;
108
+ for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {
109
+ bits--;
110
+ if (l[i] === 0) {
111
+ b = b * --zeros / bits;
112
+ } else {
113
+ ind += b;
114
+ b = b * ones-- / bits;
115
+ }
116
+ }
117
+ return ind;
118
+ }
119
+ function index_to_comb(ind, ones, bits) {
120
+ let zeros = bits - ones;
121
+ let b = C(bits - 1, ones);
122
+ let l = [];
123
+ let n = bits - 1;
124
+ for (let i = 0; i < n; i++) {
125
+ bits--;
126
+ if (ind < b) {
127
+ l.push(0);
128
+ b = b * --zeros / bits;
129
+ } else {
130
+ l.push(1);
131
+ ind -= b;
132
+ b = b * ones-- / bits;
133
+ }
134
+ }
135
+ l.push(ones);
136
+ return l;
137
+ }
138
+ function compose(A, B) {
139
+ let C2 = [];
140
+ for (let i = 0; i < B.length; i++)
141
+ C2[i] = A[B[i]];
142
+ return C2;
143
+ }
144
+ function permutation_from_cycle(cycle, n) {
145
+ let perm = [];
146
+ for (let i = 0; i < n; i++)
147
+ perm[i] = i;
148
+ for (let i = 0; i < cycle.length; i++) {
149
+ perm[cycle[i]] = cycle[(i + 1) % cycle.length];
150
+ }
151
+ return perm;
152
+ }
153
+ function unsparsify_list(d, n) {
154
+ let l = Array(n).fill(0);
155
+ for (let k in d)
156
+ l[k] = d[k];
157
+ return l;
158
+ }
159
+ function compose_state(state1, state2) {
160
+ let o = Array(8).fill(0);
161
+ for (let i = 0; i < 8; i++)
162
+ o[i] = (state1[1][i] + state2[1][i]) % 3;
163
+ return [compose(state1[0], state2[0]), o];
164
+ }
165
+ var move_UL = [
166
+ permutation_from_cycle([0, 1, 4], 12),
167
+ unsparsify_list({ 0: 2 }, 8)
168
+ ];
169
+ var move_U = [
170
+ permutation_from_cycle([1, 2, 5], 12),
171
+ unsparsify_list({ 1: 2 }, 8)
172
+ ];
173
+ var move_UR = [
174
+ permutation_from_cycle([2, 3, 6], 12),
175
+ unsparsify_list({ 2: 2 }, 8)
176
+ ];
177
+ var move_F = [
178
+ permutation_from_cycle([3, 0, 7], 12),
179
+ unsparsify_list({ 3: 2 }, 8)
180
+ ];
181
+ var move_L = [
182
+ permutation_from_cycle([9, 8, 4], 12),
183
+ unsparsify_list({ 4: 2 }, 8)
184
+ ];
185
+ var move_B = [
186
+ permutation_from_cycle([10, 9, 5], 12),
187
+ unsparsify_list({ 5: 2 }, 8)
188
+ ];
189
+ var move_R = [
190
+ permutation_from_cycle([11, 10, 6], 12),
191
+ unsparsify_list({ 6: 2 }, 8)
192
+ ];
193
+ var move_D = [
194
+ permutation_from_cycle([8, 11, 7], 12),
195
+ unsparsify_list({ 7: 2 }, 8)
196
+ ];
197
+ var solved = [index_to_permutation(0, 12), Array(8).fill(0)];
198
+ var moves = [move_UL, move_U, move_UR, move_F, move_L, move_B, move_R, move_D];
199
+ var move_names = ["UL", "U", "UR", "F", "L", "B", "R", "D"];
200
+ var tetrad = [0, 1, 0, 1, 1, 0, 1, 0];
201
+ function stringify_move_sequence(move_sequence) {
202
+ let suffixes = ["0", "", "'"];
203
+ let s = move_sequence.map(([m, r]) => move_names[m] + suffixes[r]);
204
+ return s.join(" ");
205
+ }
206
+ function generate_random_state(randomUintBelow2) {
207
+ let p = index_to_evenpermutation(Math.floor(randomUintBelow2(factorial(12)) / 2), 12);
208
+ let o = Array(8);
209
+ for (let i = 0; i < 8; i++)
210
+ o[i] = randomUintBelow2(3);
211
+ return [p, o];
212
+ }
213
+ function generate_random_state_scramble(randomUintBelow2) {
214
+ return solve(generate_random_state(randomUintBelow2));
215
+ }
216
+ function solve(state) {
217
+ let phase1_indices = index_phase1(state);
218
+ let phase1_mtables = [
219
+ generate_phase1_edge_mtable(),
220
+ generate_phase1_separate_mtable()
221
+ ];
222
+ let phase1_ptables = [
223
+ generate_phase1_edge_ptable(),
224
+ generate_phase1_separate_ptable()
225
+ ];
226
+ let phase2_mtables = [
227
+ generate_phase2_edge_mtable(),
228
+ generate_phase2_corner_mtable()
229
+ ];
230
+ let phase2_ptables = [
231
+ generate_phase2_edge_ptable(),
232
+ generate_phase1_corner_ptable()
233
+ ];
234
+ let phase1gen = ida_solve_gen(phase1_indices, phase1_mtables, phase1_ptables);
235
+ let best = void 0;
236
+ let intermediate_states = new Set();
237
+ let start_time = +new Date();
238
+ for (let i = 0; i < 25; i++) {
239
+ let { value: sol1, done } = phase1gen.next();
240
+ let new_state = state;
241
+ for (let [m, r] of sol1) {
242
+ for (let i2 = 0; i2 < r; i2++)
243
+ new_state = compose_state(new_state, moves[m]);
244
+ }
245
+ if (intermediate_states.has(new_state.toString())) {
246
+ continue;
247
+ } else
248
+ intermediate_states.add(new_state.toString());
249
+ let edge_ind = evenpermutation_to_index(new_state[0].slice(0, 8));
250
+ let corner_ind = 0;
251
+ for (let i2 = 0; i2 < 4; i2++)
252
+ corner_ind += new_state[1][i2] * 3 ** i2;
253
+ let phase2_indices = [edge_ind, corner_ind];
254
+ let moves_left = best ? best.length - sol1.length - 1 : 999999;
255
+ let sol2 = ida_solve(phase2_indices, phase2_mtables, phase2_ptables, moves_left);
256
+ if (sol2 === void 0) {
257
+ continue;
258
+ }
259
+ if (best === void 0 || best.length > sol1.length + sol2.length) {
260
+ best = sol1.concat(sol2);
261
+ }
262
+ if (new Date() - start_time > 300)
263
+ break;
264
+ }
265
+ return best;
266
+ }
267
+ function index_phase1(state) {
268
+ let edge_ind = 0;
269
+ for (let i = 0; i < 4; i++)
270
+ edge_ind += state[0].indexOf(i + 8) * 12 ** i;
271
+ let corner_ind = 0;
272
+ for (let i = 0; i < 4; i++)
273
+ corner_ind += state[1][i + 4] * 3 ** i;
274
+ let filtered = state[0].map((x) => Math.max(-1, x - 8));
275
+ let separate_ind = comb_to_index(filtered.map((x) => +(x >= 0))) * 2 + permutation_parity(filtered.filter((x) => x >= 0));
276
+ return [edge_ind, corner_ind + 81 * separate_ind];
277
+ }
278
+ var tables = {};
279
+ function generate_phase1_corner_mtable() {
280
+ if (tables.phase1cm)
281
+ return tables.phase1cm;
282
+ let mtable = [];
283
+ for (let i = 0; i < 81; i++) {
284
+ mtable[i] = Array(8);
285
+ let o = [
286
+ i % 3,
287
+ Math.floor(i / 3) % 3,
288
+ Math.floor(i / 9) % 3,
289
+ Math.floor(i / 27)
290
+ ];
291
+ mtable[i][0] = mtable[i][1] = mtable[i][2] = mtable[i][3] = i;
292
+ for (let j = 0; j < 4; j++) {
293
+ o[j] = (o[j] + 2) % 3;
294
+ mtable[i][4 + j] = o[0] + o[1] * 3 + o[2] * 9 + o[3] * 27;
295
+ o[j] = (o[j] + 1) % 3;
296
+ }
297
+ }
298
+ return tables.phase1cm = mtable;
299
+ }
300
+ function generate_phase1_corner_ptable() {
301
+ if (tables.phase1cp)
302
+ return tables.phase1cp;
303
+ let ptable = Array(81);
304
+ for (let i = 0; i < 81; i++) {
305
+ let o = [
306
+ i % 3,
307
+ Math.floor(i / 3) % 3,
308
+ Math.floor(i / 9) % 3,
309
+ Math.floor(i / 27)
310
+ ];
311
+ ptable[i] = (o[0] !== 0) + (o[1] !== 0) + (o[2] !== 0) + (o[3] !== 0);
312
+ }
313
+ return tables.phase1cp = ptable;
314
+ }
315
+ function generate_phase1_edge_mtable() {
316
+ if (tables.phase1em)
317
+ return tables.phase1em;
318
+ let mtable_single = [];
319
+ for (let i = 0; i < 12; i++) {
320
+ mtable_single[i] = [];
321
+ for (let m = 0; m < 8; m++) {
322
+ mtable_single[i][m] = moves[m][0].indexOf(i);
323
+ }
324
+ }
325
+ let mtable = Array(12 ** 4);
326
+ for (let i = 0; i < 12 ** 4; i++) {
327
+ mtable[i] = Array(8);
328
+ for (let m = 0; m < 8; m++) {
329
+ let I = 0;
330
+ for (let j = 0; j < 4; j++) {
331
+ I += mtable_single[Math.floor(i / 12 ** j) % 12][m] * 12 ** j;
332
+ }
333
+ mtable[i][m] = I;
334
+ }
335
+ }
336
+ return tables.phase1em = mtable;
337
+ }
338
+ function generate_phase1_edge_ptable() {
339
+ if (tables.phase1ep)
340
+ return tables.phase1ep;
341
+ return tables.phase1ep = bfs(generate_phase1_edge_mtable(), [
342
+ 8 + 12 * (9 + 12 * (10 + 12 * 11))
343
+ ]);
344
+ }
345
+ function generate_phase1_separate_mtable() {
346
+ if (tables.phase1sm)
347
+ return tables.phase1sm;
348
+ const C12_4 = C(12, 4);
349
+ let mtable_c = [];
350
+ for (let i = 0; i < C12_4; i++) {
351
+ mtable_c[i] = [];
352
+ let comb = index_to_comb(i, 4, 12), perm = [];
353
+ for (let j = 0, k = 0; j < 12; j++) {
354
+ if (comb[j] === 0)
355
+ perm[j] = -1;
356
+ else
357
+ perm[j] = k++;
358
+ }
359
+ for (let m = 0; m < 8; m++) {
360
+ let new_perm = compose(perm, moves[m][0]);
361
+ let new_comb = compose(comb, moves[m][0]);
362
+ let parity = permutation_parity(new_perm.filter((x) => x >= 0));
363
+ mtable_c[i][m] = comb_to_index(new_comb) * 2 + parity;
364
+ }
365
+ }
366
+ let mtable_co = generate_phase1_corner_mtable();
367
+ let mtable = [];
368
+ for (let j = 0; j < C12_4; j++) {
369
+ for (let i = 0; i < 81; i++) {
370
+ let m0 = mtable[i + 81 * (2 * j)] = [];
371
+ let m1 = mtable[i + 81 * (2 * j + 1)] = [];
372
+ for (let m = 0; m < 8; m++) {
373
+ m0[m] = mtable_co[i][m] + 81 * mtable_c[j][m];
374
+ m1[m] = mtable_co[i][m] + 81 * (mtable_c[j][m] ^ 1);
375
+ }
376
+ }
377
+ }
378
+ return tables.phase1sm = mtable;
379
+ }
380
+ function generate_phase1_separate_ptable() {
381
+ if (tables.phase1sp)
382
+ return tables.phase1sp;
383
+ return tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]);
384
+ }
385
+ function generate_phase2_corner_mtable() {
386
+ if (tables.phase2cm)
387
+ return tables.phase2cm;
388
+ let phase1_mtable = generate_phase1_corner_mtable();
389
+ let mtable = Array(81);
390
+ for (let i = 0; i < 81; i++) {
391
+ mtable[i] = phase1_mtable[i].slice(4, 8);
392
+ }
393
+ return tables.phase2cm = mtable;
394
+ }
395
+ function generate_phase2_edge_mtable() {
396
+ if (tables.phase2em)
397
+ return tables.phase2em;
398
+ const n = 8;
399
+ const HALFFACT8 = factorial(n) / 2;
400
+ let mtable = Array(HALFFACT8);
401
+ let perm = [0, 1, 2, 3, 4, 5, 6, 7];
402
+ for (let i = 0; i < HALFFACT8; i++) {
403
+ mtable[i] = Array(4);
404
+ for (let m = 0; m < 4; m++) {
405
+ let new_perm = compose(perm, moves[m][0].slice(0, 8));
406
+ mtable[i][m] = evenpermutation_to_index(new_perm);
407
+ }
408
+ if (i === HALFFACT8 - 1)
409
+ break;
410
+ let parity = 0;
411
+ do {
412
+ for (let k = n - 2; k >= 0; k--) {
413
+ if (perm[k] > perm[k + 1])
414
+ continue;
415
+ let l = k + 1;
416
+ for (let L = l; L < n; L++)
417
+ if (perm[L] > perm[k])
418
+ l = L;
419
+ [perm[k], perm[l]] = [perm[l], perm[k]];
420
+ parity ^= 1;
421
+ for (let j = 0; k + 1 + j < n - 1 - j; j++, parity ^= 1) {
422
+ [perm[k + 1 + j], perm[n - 1 - j]] = [
423
+ perm[n - 1 - j],
424
+ perm[k + 1 + j]
425
+ ];
426
+ }
427
+ break;
428
+ }
429
+ } while (parity !== 0);
430
+ }
431
+ return tables.phase2em = mtable;
432
+ }
433
+ function generate_phase2_edge_ptable() {
434
+ if (tables.phase2ep)
435
+ return tables.phase2ep;
436
+ return tables.phase2ep = bfs(generate_phase2_edge_mtable(), [0]);
437
+ }
438
+ function bfs(mtable, goal_states) {
439
+ let N = mtable.length;
440
+ let nmoves = mtable[0].length;
441
+ let ptable = Array(N).fill(-1);
442
+ let queue = goal_states.slice(), new_queue = [];
443
+ let depth = 0;
444
+ while (queue.length > 0) {
445
+ new_queue.length = 0;
446
+ for (let state of queue) {
447
+ if (ptable[state] !== -1)
448
+ continue;
449
+ ptable[state] = depth;
450
+ for (let move_index = 0; move_index < nmoves; move_index++) {
451
+ let new_state = mtable[state][move_index];
452
+ while (new_state != state) {
453
+ new_queue.push(new_state);
454
+ new_state = mtable[new_state][move_index];
455
+ }
456
+ }
457
+ }
458
+ [queue, new_queue] = [new_queue, queue];
459
+ depth += 1;
460
+ }
461
+ return ptable;
462
+ }
463
+ function ida_solve(indices, mtables, ptables, max_bound) {
464
+ max_bound = max_bound || 999999;
465
+ let ncoords = indices.length;
466
+ let bound = 0;
467
+ for (let i = 0; i < ncoords; i++)
468
+ bound = Math.max(bound, ptables[i][indices[i]]);
469
+ while (bound <= max_bound) {
470
+ let path = ida_search(indices, mtables, ptables, bound, -1);
471
+ if (path !== void 0)
472
+ return path;
473
+ bound++;
474
+ }
475
+ }
476
+ function ida_search(indices, mtables, ptables, bound, last) {
477
+ let ncoords = indices.length;
478
+ let nmoves = mtables[0][0].length;
479
+ let heuristic = 0;
480
+ for (let i = 0; i < ncoords; i++)
481
+ heuristic = Math.max(heuristic, ptables[i][indices[i]]);
482
+ if (heuristic > bound)
483
+ return;
484
+ if (bound === 0)
485
+ return [];
486
+ if (heuristic === 0 && bound === 1)
487
+ return;
488
+ for (let m = 0; m < nmoves; m++) {
489
+ if (m === last)
490
+ continue;
491
+ if (m < last && tetrad[m] == tetrad[last])
492
+ continue;
493
+ let new_indices = indices.slice();
494
+ for (let c = 0; c < ncoords; c++)
495
+ new_indices[c] = mtables[c][indices[c]][m];
496
+ let r = 1;
497
+ while (indices.some((_, i) => indices[i] != new_indices[i])) {
498
+ let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);
499
+ if (subpath !== void 0)
500
+ return [[m, r]].concat(subpath);
501
+ for (let c = 0; c < ncoords; c++) {
502
+ new_indices[c] = mtables[c][new_indices[c]][m];
503
+ }
504
+ r++;
505
+ }
506
+ }
507
+ return;
508
+ }
509
+ function* ida_solve_gen(indices, mtables, ptables) {
510
+ let ncoords = indices.length;
511
+ let bound = 0;
512
+ for (let i = 0; i < ncoords; i++)
513
+ bound = Math.max(bound, ptables[i][indices[i]]);
514
+ while (true) {
515
+ yield* ida_search_gen(indices, mtables, ptables, bound, -1);
516
+ bound++;
517
+ }
518
+ }
519
+ function* ida_search_gen(indices, mtables, ptables, bound, last) {
520
+ let ncoords = indices.length;
521
+ let nmoves = mtables[0][0].length;
522
+ let heuristic = 0;
523
+ for (let i = 0; i < ncoords; i++)
524
+ heuristic = Math.max(heuristic, ptables[i][indices[i]]);
525
+ if (heuristic > bound)
526
+ return;
527
+ if (bound === 0) {
528
+ yield [];
529
+ return;
530
+ }
531
+ if (heuristic === 0 && bound === 1)
532
+ return;
533
+ for (let m = 0; m < nmoves; m++) {
534
+ if (m === last)
535
+ continue;
536
+ if (m < last && tetrad[m] == tetrad[last])
537
+ continue;
538
+ let new_indices = indices.slice();
539
+ for (let c = 0; c < ncoords; c++)
540
+ new_indices[c] = mtables[c][indices[c]][m];
541
+ let r = 1;
542
+ while (indices.some((_, i) => indices[i] != new_indices[i])) {
543
+ let subpath_gen = ida_search_gen(new_indices, mtables, ptables, bound - 1, m);
544
+ while (true) {
545
+ let { value: subpath, done } = subpath_gen.next();
546
+ if (done)
547
+ break;
548
+ yield [[m, r]].concat(subpath);
549
+ }
550
+ for (let c = 0; c < ncoords; c++) {
551
+ new_indices[c] = mtables[c][new_indices[c]][m];
552
+ }
553
+ r++;
554
+ }
555
+ }
556
+ }
557
+ var randomUintBelow = randomUIntBelowFactory();
558
+ async function getRandomRediCubeScramble() {
559
+ return new Alg(stringify_move_sequence(generate_random_state_scramble(await randomUintBelow)));
560
+ }
561
+ export {
562
+ getRandomRediCubeScramble
563
+ };
564
+ //# sourceMappingURL=redi_cube-E5F64NIQ.js.map