cubing 0.26.1 → 0.26.2

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 (137) hide show
  1. package/dist/esm/.DS_Store +0 -0
  2. package/dist/esm/alg/index.js +1 -1
  3. package/dist/esm/bluetooth/index.js +3 -3
  4. package/dist/esm/bluetooth/index.js.map +1 -1
  5. package/dist/esm/{chunk-CYG3DDTX.js → chunk-3ADPLDWG.js} +17 -10
  6. package/dist/esm/chunk-3ADPLDWG.js.map +7 -0
  7. package/dist/esm/{chunk-PDVAUAMY.js → chunk-3NFDCQI2.js} +5 -40
  8. package/dist/esm/chunk-3NFDCQI2.js.map +7 -0
  9. package/dist/esm/{chunk-JIBAUV55.js → chunk-4OCHKVLJ.js} +9 -9
  10. package/dist/esm/chunk-4OCHKVLJ.js.map +7 -0
  11. package/dist/esm/{chunk-RHC3DIN3.js → chunk-BEXHMXCT.js} +1 -1
  12. package/dist/esm/{chunk-RHC3DIN3.js.map → chunk-BEXHMXCT.js.map} +1 -1
  13. package/dist/esm/{chunk-QZOJPCN5.js → chunk-DO7GZAW4.js} +1 -1
  14. package/dist/esm/{chunk-QZOJPCN5.js.map → chunk-DO7GZAW4.js.map} +1 -1
  15. package/dist/esm/{chunk-XQKTAWAA.js → chunk-ESSOEWR6.js} +15 -15
  16. package/dist/esm/chunk-ESSOEWR6.js.map +7 -0
  17. package/dist/esm/{chunk-3CEMUTUD.js → chunk-FB7SFELN.js} +2 -2
  18. package/dist/esm/{chunk-3CEMUTUD.js.map → chunk-FB7SFELN.js.map} +1 -1
  19. package/dist/esm/{chunk-ALBEW4DJ.js → chunk-GBMX6FHY.js} +1 -1
  20. package/dist/esm/{chunk-ALBEW4DJ.js.map → chunk-GBMX6FHY.js.map} +1 -1
  21. package/dist/esm/{chunk-HUCMGBEC.js → chunk-HD2CMNE4.js} +2 -2
  22. package/dist/esm/{chunk-HUCMGBEC.js.map → chunk-HD2CMNE4.js.map} +1 -1
  23. package/dist/esm/{chunk-5Q4SJSNY.js → chunk-NSLR2SC4.js} +2 -2
  24. package/dist/esm/{chunk-5Q4SJSNY.js.map → chunk-NSLR2SC4.js.map} +1 -1
  25. package/dist/esm/{chunk-V55YSWJY.js → chunk-NYAPGKCW.js} +1 -1
  26. package/dist/esm/{chunk-V55YSWJY.js.map → chunk-NYAPGKCW.js.map} +1 -1
  27. package/dist/esm/{chunk-J7OB2GEM.js → chunk-RGEST6KF.js} +13 -11
  28. package/dist/esm/chunk-RGEST6KF.js.map +7 -0
  29. package/dist/esm/chunk-YBDBUTYE.js +42 -0
  30. package/dist/esm/chunk-YBDBUTYE.js.map +7 -0
  31. package/dist/esm/{chunk-AD6PFNOU.js → chunk-ZPAGJE7S.js} +2 -2
  32. package/dist/esm/{chunk-AD6PFNOU.js.map → chunk-ZPAGJE7S.js.map} +1 -1
  33. package/dist/esm/kpuzzle/index.js +2 -2
  34. package/dist/esm/notation/index.js +2 -2
  35. package/dist/esm/protocol/index.js +2 -2
  36. package/dist/esm/puzzle-geometry/index.js +6 -2
  37. package/dist/esm/puzzles/index.js +3 -3
  38. package/dist/esm/{3x3x3.kpuzzle.svg-5U7LUACF.js → puzzles-dynamic-3x3x3-NB2PEZTV.js} +115 -4
  39. package/dist/esm/puzzles-dynamic-3x3x3-NB2PEZTV.js.map +7 -0
  40. package/dist/esm/puzzles-dynamic-side-events-CXNWDLKD.js +1855 -0
  41. package/dist/esm/puzzles-dynamic-side-events-CXNWDLKD.js.map +7 -0
  42. package/dist/esm/puzzles-dynamic-unofficial-CKTRIKMY.js +399 -0
  43. package/dist/esm/puzzles-dynamic-unofficial-CKTRIKMY.js.map +7 -0
  44. package/dist/esm/scramble/index.js +9 -8
  45. package/dist/esm/search/index.js +9 -8
  46. package/dist/esm/{chunk-PMKVGKT4.js → search-dynamic-sgs-side-events-ZDPMZ4Y7.js} +322 -8
  47. package/dist/esm/search-dynamic-sgs-side-events-ZDPMZ4Y7.js.map +7 -0
  48. package/dist/esm/{fto.dynamic-ISSUUAOX.js → search-dynamic-sgs-unofficial-RAGEBTDP.js} +564 -11
  49. package/dist/esm/search-dynamic-sgs-unofficial-RAGEBTDP.js.map +7 -0
  50. package/dist/esm/{3x3x3-min2phase-GFNNX26U.js → search-dynamic-solve-3x3x3-K4TG7P3X.js} +1 -1
  51. package/dist/esm/{3x3x3-min2phase-GFNNX26U.js.map → search-dynamic-solve-3x3x3-K4TG7P3X.js.map} +1 -1
  52. package/dist/esm/{444-solver-2ECPETB3.js → search-dynamic-solve-4x4x4-W455FUFG.js} +7 -6
  53. package/dist/esm/{444-solver-2ECPETB3.js.map → search-dynamic-solve-4x4x4-W455FUFG.js.map} +1 -1
  54. package/dist/esm/{fto-solver-5EQEC77M.js → search-dynamic-solve-fto-ZM45FTCO.js} +2 -2
  55. package/dist/esm/{fto-solver-5EQEC77M.js.map → search-dynamic-solve-fto-ZM45FTCO.js.map} +1 -1
  56. package/dist/esm/{kilosolver-RP3POREU.js → search-dynamic-solve-kilominx-PAW6HKT5.js} +3 -5
  57. package/dist/esm/{kilosolver-RP3POREU.js.map → search-dynamic-solve-kilominx-PAW6HKT5.js.map} +1 -1
  58. package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js → search-dynamic-solve-master_tetraminx-3R2CJUKW.js} +2 -4
  59. package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js.map → search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map} +1 -1
  60. package/dist/esm/{sq1-solver-G73T6FTJ.js → search-dynamic-solve-sq1-RS5HN6AH.js} +2 -2
  61. package/dist/esm/{sq1-solver-G73T6FTJ.js.map → search-dynamic-solve-sq1-RS5HN6AH.js.map} +1 -1
  62. package/dist/esm/{worker-inside-generated-string-4FDHMKDI.js → search-worker-inside-generated-string-VBEHCGJ6.js} +1335 -1335
  63. package/dist/esm/search-worker-inside-generated-string-VBEHCGJ6.js.map +7 -0
  64. package/dist/esm/{search-worker-js-entry-CZHIWNVF.js → search-worker-js-entry-5IIKIMTU.js} +50 -65
  65. package/dist/esm/search-worker-js-entry-5IIKIMTU.js.map +7 -0
  66. package/dist/esm/{search-worker-ts-entry-4WJDKASM.js → search-worker-ts-entry-BV3J54MW.js} +5 -5
  67. package/dist/esm/{search-worker-ts-entry-4WJDKASM.js.map → search-worker-ts-entry-BV3J54MW.js.map} +1 -1
  68. package/dist/esm/stream/index.js +1 -1
  69. package/dist/esm/stream/index.js.map +1 -1
  70. package/dist/esm/twisty/index.js +64 -15
  71. package/dist/esm/twisty/index.js.map +3 -3
  72. package/dist/esm/{3d-dynamic-OTQHIOVR.js → twisty-dynamic-3d-KFFJZNMZ.js} +8 -7
  73. package/dist/esm/{3d-dynamic-OTQHIOVR.js.map → twisty-dynamic-3d-KFFJZNMZ.js.map} +2 -2
  74. package/dist/types/{KPuzzleDefinition-8531b592.d.ts → KPuzzleDefinition-121e85a8.d.ts} +12 -8
  75. package/dist/types/{KState-ba36d9a3.d.ts → KState-73482114.d.ts} +1 -1
  76. package/dist/types/PuzzleLoader-9243f44d.d.ts +1177 -0
  77. package/dist/types/bluetooth/index.d.ts +4 -4
  78. package/dist/types/{bluetooth-puzzle-bc1a5264.d.ts → bluetooth-puzzle-679d8ca3.d.ts} +1 -1
  79. package/dist/types/kpuzzle/index.d.ts +3 -3
  80. package/dist/types/{outside-d6602f71.d.ts → outside-f7ba9c00.d.ts} +1 -1
  81. package/dist/types/protocol/index.d.ts +2 -2
  82. package/dist/types/puzzle-geometry/index.d.ts +3 -3
  83. package/dist/types/puzzles/index.d.ts +6 -4
  84. package/dist/types/scramble/index.d.ts +3 -3
  85. package/dist/types/search/index.d.ts +3 -3
  86. package/dist/types/stream/index.d.ts +3 -3
  87. package/dist/types/twisty/index.d.ts +8 -977
  88. package/package.json +4 -3
  89. package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js +0 -96
  90. package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js.map +0 -7
  91. package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js +0 -52
  92. package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js.map +0 -7
  93. package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js +0 -122
  94. package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js.map +0 -7
  95. package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js +0 -115
  96. package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js.map +0 -7
  97. package/dist/esm/3x3x3.kpuzzle.svg-5U7LUACF.js.map +0 -7
  98. package/dist/esm/chunk-CRU5TVHA.js +0 -122
  99. package/dist/esm/chunk-CRU5TVHA.js.map +0 -7
  100. package/dist/esm/chunk-CYG3DDTX.js.map +0 -7
  101. package/dist/esm/chunk-J7OB2GEM.js.map +0 -7
  102. package/dist/esm/chunk-JIBAUV55.js.map +0 -7
  103. package/dist/esm/chunk-MC2D6L32.js +0 -103
  104. package/dist/esm/chunk-MC2D6L32.js.map +0 -7
  105. package/dist/esm/chunk-PDVAUAMY.js.map +0 -7
  106. package/dist/esm/chunk-PMKVGKT4.js.map +0 -7
  107. package/dist/esm/chunk-XQKTAWAA.js.map +0 -7
  108. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js +0 -714
  109. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js.map +0 -7
  110. package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js +0 -376
  111. package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js.map +0 -7
  112. package/dist/esm/fto.dynamic-ISSUUAOX.js.map +0 -7
  113. package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js +0 -102
  114. package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js.map +0 -7
  115. package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js +0 -83
  116. package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js.map +0 -7
  117. package/dist/esm/megaminx.sgs.json-NUXKWG2L.js +0 -16
  118. package/dist/esm/megaminx.sgs.json-NUXKWG2L.js.map +0 -7
  119. package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js +0 -95
  120. package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js.map +0 -7
  121. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js +0 -14
  122. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js.map +0 -7
  123. package/dist/esm/redi_cube-5B6YHJGL.js +0 -565
  124. package/dist/esm/redi_cube-5B6YHJGL.js.map +0 -7
  125. package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js +0 -66
  126. package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js.map +0 -7
  127. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js +0 -160
  128. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js.map +0 -7
  129. package/dist/esm/search-worker-js-entry-CZHIWNVF.js.map +0 -7
  130. package/dist/esm/skewb.sgs.json-IMR7QJQC.js +0 -16
  131. package/dist/esm/skewb.sgs.json-IMR7QJQC.js.map +0 -7
  132. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js +0 -244
  133. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js.map +0 -7
  134. package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js +0 -302
  135. package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js.map +0 -7
  136. package/dist/esm/worker-inside-generated-string-4FDHMKDI.js.map +0 -7
  137. package/dist/types/PuzzleLoader-a7faf593.d.ts +0 -172
@@ -1,565 +0,0 @@
1
- "use strict";
2
- import {
3
- randomUIntBelowFactory
4
- } from "./chunk-V55YSWJY.js";
5
- import {
6
- Alg
7
- } from "./chunk-QZOJPCN5.js";
8
- import "./chunk-MGJA5U5O.js";
9
-
10
- // src/cubing/vendor/xyzzy/redi_cube.js
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 = /* @__PURE__ */ 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
- "use strict";
562
- export {
563
- getRandomRediCubeScramble
564
- };
565
- //# sourceMappingURL=redi_cube-5B6YHJGL.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/cubing/vendor/xyzzy/redi_cube.js"],
4
- "sourcesContent": ["/* eslint-disable */\n/* Redi cube scramble generator */\n// From https://torchlight.github.io/rediscrambler.js\n// Added to `cubing.js` under the GPL license by permission from the author (@torchlight/xyzzy).\n\n\"use strict\";\n\nimport { Alg } from \"../../alg\";\nimport { randomUIntBelowFactory } from \"../random-uint-below\";\n\nfunction counter(A) {\n let counts = [];\n for (let a of A) counts[a] = (counts[a] || 0) + 1;\n return counts;\n}\n\n/* Combinatoric functions */\n\nfunction factorial(n) {\n if (n < 2) return n;\n let f = 1;\n for (let i = 2; i <= n; i++) f *= i;\n return f;\n}\n\nfunction C(n, k) {\n if (k < 0 || k > n) return 0;\n if (k === 0 || k === n) return 1;\n let c = 1;\n for (let i = 0; i < k; i++) {\n c = ((c * (n - i)) / (i + 1)) | 0;\n }\n return c;\n}\n\nfunction permutation_to_index(perm) {\n perm = perm.slice();\n let n = perm.length;\n let f = factorial(n - 1);\n let ind = 0;\n while (n > 1) {\n n--;\n // invariant: f == factorial(n)\n // also, perm stores meaningful values up to perm[n]\n let e = perm[0];\n ind += e * f;\n for (let i = 0; i < n; i++) {\n let x = perm[i + 1];\n perm[i] = x - (x > e);\n }\n f /= n;\n }\n return ind;\n}\n\nfunction index_to_permutation(ind, n) {\n let perm = [];\n let f = factorial(n - 1);\n for (let i = 0; i < n; i++) {\n perm[i] = (ind / f) | 0;\n ind %= f;\n f /= n - 1 - i;\n }\n // could probably use some kind of binary tree to make this linearithmic, but I am hella lazy.\n for (let i = n - 2; i >= 0; i--) {\n for (let j = i + 1; j < n; j++) {\n perm[j] += +(perm[j] >= perm[i]);\n }\n }\n return perm;\n}\n\nfunction permutation_parity(A) {\n let n = A.length;\n let parity = 0;\n // again, there is a linearithmic algorithm to count inversions, but >lazy\n for (let i = 0; i < n - 1; i++) {\n for (let j = i; j < n; j++) {\n if (A[i] > A[j]) parity ^= 1;\n }\n }\n return parity;\n}\n\nfunction index_to_evenpermutation(ind, n) {\n let perm = [];\n let f = factorial(n - 1) / 2;\n let parity = 0;\n for (let i = 0; i < n - 1; i++) {\n perm[i] = (ind / f) | 0;\n ind %= f;\n f /= n - 1 - i;\n }\n perm[n - 1] = 0;\n for (let i = n - 2; i >= 0; i--) {\n for (let j = i + 1; j < n; j++) {\n if (perm[j] >= perm[i]) perm[j]++;\n else parity ^= 1;\n }\n }\n if (parity === 1) [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];\n return perm;\n}\n\nfunction evenpermutation_to_index(perm) {\n return permutation_to_index(perm) >> 1;\n}\n\nfunction comb_to_index(l) {\n let bits = l.length;\n let ones = 0;\n for (let i = 0; i < bits; i++) ones += +(l[i] === 1);\n let zeros = bits - ones;\n if (zeros === 0 || ones === 0 || bits === 1) return 0;\n let b = C(bits - 1, ones);\n let ind = 0;\n for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {\n bits--;\n if (l[i] === 0) {\n b = (b * --zeros) / bits;\n } // l[i] === 1\n else {\n ind += b;\n b = (b * ones--) / bits;\n }\n }\n return ind;\n}\n\nfunction index_to_comb(ind, ones, bits) {\n let zeros = bits - ones;\n let b = C(bits - 1, ones);\n let l = [];\n let n = bits - 1;\n for (let i = 0; i < n; i++) {\n bits--;\n if (ind < b) {\n l.push(0);\n b = (b * --zeros) / bits;\n } else {\n l.push(1);\n ind -= b;\n b = (b * ones--) / bits;\n }\n }\n l.push(ones);\n return l;\n}\n\nfunction compose(A, B) {\n let C = [];\n for (let i = 0; i < B.length; i++) C[i] = A[B[i]];\n return C;\n}\n\nfunction permutation_from_cycle(cycle, n) {\n let perm = [];\n for (let i = 0; i < n; i++) perm[i] = i;\n for (let i = 0; i < cycle.length; i++) {\n perm[cycle[i]] = cycle[(i + 1) % cycle.length];\n }\n return perm;\n}\n\nfunction unsparsify_list(d, n) {\n let l = Array(n).fill(0);\n for (let k in d) l[k] = d[k];\n return l;\n}\n\nfunction compose_state(state1, state2) {\n let o = Array(8).fill(0);\n for (let i = 0; i < 8; i++) o[i] = (state1[1][i] + state2[1][i]) % 3;\n return [compose(state1[0], state2[0]), o];\n}\n\nlet move_UL = [\n permutation_from_cycle([0, 1, 4], 12),\n unsparsify_list({ 0: 2 }, 8),\n];\nlet move_U = [\n permutation_from_cycle([1, 2, 5], 12),\n unsparsify_list({ 1: 2 }, 8),\n];\nlet move_UR = [\n permutation_from_cycle([2, 3, 6], 12),\n unsparsify_list({ 2: 2 }, 8),\n];\nlet move_F = [\n permutation_from_cycle([3, 0, 7], 12),\n unsparsify_list({ 3: 2 }, 8),\n];\nlet move_L = [\n permutation_from_cycle([9, 8, 4], 12),\n unsparsify_list({ 4: 2 }, 8),\n];\nlet move_B = [\n permutation_from_cycle([10, 9, 5], 12),\n unsparsify_list({ 5: 2 }, 8),\n];\nlet move_R = [\n permutation_from_cycle([11, 10, 6], 12),\n unsparsify_list({ 6: 2 }, 8),\n];\nlet move_D = [\n permutation_from_cycle([8, 11, 7], 12),\n unsparsify_list({ 7: 2 }, 8),\n];\n\nlet solved = [index_to_permutation(0, 12), Array(8).fill(0)];\n\nlet moves = [move_UL, move_U, move_UR, move_F, move_L, move_B, move_R, move_D];\nlet move_names = [\"UL\", \"U\", \"UR\", \"F\", \"L\", \"B\", \"R\", \"D\"];\nlet tetrad = [0, 1, 0, 1, 1, 0, 1, 0];\n\nfunction apply_move_sequence(state, move_sequence) {\n for (let [m, r] of move_sequence) {\n for (let i = 0; i < r; i++) state = compose_state(state, moves[m]);\n }\n return state;\n}\n\nfunction stringify_move_sequence(move_sequence) {\n let suffixes = [\"0\", \"\", \"'\"];\n let s = move_sequence.map(([m, r]) => move_names[m] + suffixes[r]);\n return s.join(\" \");\n}\n\nfunction print_move_sequence(move_sequence) {\n console.log(stringify_move_sequence(move_sequence));\n}\n\nfunction generate_random_state(randomUintBelow) {\n let p = index_to_evenpermutation(\n Math.floor(randomUintBelow(factorial(12)) / 2),\n 12,\n );\n let o = Array(8);\n for (let i = 0; i < 8; i++) o[i] = randomUintBelow(3);\n return [p, o];\n}\n\nfunction generate_random_state_scramble(randomUintBelow) {\n return solve(generate_random_state(randomUintBelow));\n}\n\nfunction generate_scramble_sequence() {\n return stringify_move_sequence(generate_random_state_scramble());\n}\n\nfunction solve(state) {\n let phase1_indices = index_phase1(state);\n let phase1_mtables = [\n generate_phase1_edge_mtable(),\n generate_phase1_separate_mtable(),\n ];\n let phase1_ptables = [\n generate_phase1_edge_ptable(),\n generate_phase1_separate_ptable(),\n ];\n let phase2_mtables = [\n generate_phase2_edge_mtable(),\n generate_phase2_corner_mtable(),\n ];\n let phase2_ptables = [\n generate_phase2_edge_ptable(),\n generate_phase1_corner_ptable(),\n ];\n\n let phase1gen = ida_solve_gen(phase1_indices, phase1_mtables, phase1_ptables);\n let best = undefined;\n let intermediate_states = new Set();\n let start_time = +new Date();\n for (let i = 0; i < 25; i++) {\n let { value: sol1, done } = phase1gen.next();\n let new_state = state;\n for (let [m, r] of sol1) {\n for (let i = 0; i < r; i++)\n new_state = compose_state(new_state, moves[m]);\n }\n if (intermediate_states.has(new_state.toString())) {\n // console.log(\"skip\");\n continue;\n } else intermediate_states.add(new_state.toString());\n let edge_ind = evenpermutation_to_index(new_state[0].slice(0, 8));\n let corner_ind = 0;\n for (let i = 0; i < 4; i++) corner_ind += new_state[1][i] * 3 ** i;\n let phase2_indices = [edge_ind, corner_ind];\n //let sol2 = [];\n let moves_left = best ? best.length - sol1.length - 1 : 999999;\n let sol2 = ida_solve(\n phase2_indices,\n phase2_mtables,\n phase2_ptables,\n moves_left,\n );\n if (sol2 === undefined) {\n // console.log(\"prune\");\n continue;\n }\n // console.log(\n // `to ${new_state} in ${sol1.length} moves; total move count ${\n // sol1.length + sol2.length\n // }`,\n // );\n if (best === undefined || best.length > sol1.length + sol2.length) {\n best = sol1.concat(sol2);\n }\n // bail if we've spent too much time\n if (new Date() - start_time > 300) break;\n }\n return best;\n}\n\nfunction index_phase1(state) {\n let edge_ind = 0;\n for (let i = 0; i < 4; i++) edge_ind += state[0].indexOf(i + 8) * 12 ** i;\n let corner_ind = 0;\n for (let i = 0; i < 4; i++) corner_ind += state[1][i + 4] * 3 ** i;\n let filtered = state[0].map((x) => Math.max(-1, x - 8));\n let separate_ind =\n comb_to_index(filtered.map((x) => +(x >= 0))) * 2 +\n permutation_parity(filtered.filter((x) => x >= 0));\n return [edge_ind, corner_ind + 81 * separate_ind];\n}\n\nlet tables = {};\n\nfunction generate_phase1_corner_mtable() {\n if (tables.phase1cm) return tables.phase1cm;\n let mtable = [];\n for (let i = 0; i < 81; i++) {\n mtable[i] = Array(8);\n let o = [\n i % 3,\n Math.floor(i / 3) % 3,\n Math.floor(i / 9) % 3,\n Math.floor(i / 27),\n ];\n mtable[i][0] = mtable[i][1] = mtable[i][2] = mtable[i][3] = i;\n for (let j = 0; j < 4; j++) {\n o[j] = (o[j] + 2) % 3;\n mtable[i][4 + j] = o[0] + o[1] * 3 + o[2] * 9 + o[3] * 27;\n o[j] = (o[j] + 1) % 3;\n }\n }\n return (tables.phase1cm = mtable);\n}\n\nfunction generate_phase1_corner_ptable() {\n if (tables.phase1cp) return tables.phase1cp;\n let ptable = Array(81);\n for (let i = 0; i < 81; i++) {\n let o = [\n i % 3,\n Math.floor(i / 3) % 3,\n Math.floor(i / 9) % 3,\n Math.floor(i / 27),\n ];\n ptable[i] = (o[0] !== 0) + (o[1] !== 0) + (o[2] !== 0) + (o[3] !== 0);\n }\n return (tables.phase1cp = ptable);\n}\n\nfunction generate_phase1_edge_mtable() {\n if (tables.phase1em) return tables.phase1em;\n let mtable_single = [];\n for (let i = 0; i < 12; i++) {\n mtable_single[i] = [];\n for (let m = 0; m < 8; m++) {\n mtable_single[i][m] = moves[m][0].indexOf(i);\n }\n }\n let mtable = Array(12 ** 4);\n for (let i = 0; i < 12 ** 4; i++) {\n mtable[i] = Array(8);\n for (let m = 0; m < 8; m++) {\n let I = 0;\n for (let j = 0; j < 4; j++) {\n I += mtable_single[Math.floor(i / 12 ** j) % 12][m] * 12 ** j;\n }\n mtable[i][m] = I;\n }\n }\n return (tables.phase1em = mtable);\n}\n\nfunction generate_phase1_edge_ptable() {\n if (tables.phase1ep) return tables.phase1ep;\n return (tables.phase1ep = bfs(generate_phase1_edge_mtable(), [\n 8 + 12 * (9 + 12 * (10 + 12 * 11)),\n ]));\n}\n\nfunction generate_phase1_separate_mtable() {\n if (tables.phase1sm) return tables.phase1sm;\n const C12_4 = C(12, 4);\n let mtable_c = [];\n for (let i = 0; i < C12_4; i++) {\n mtable_c[i] = [];\n let comb = index_to_comb(i, 4, 12),\n perm = [];\n for (let j = 0, k = 0; j < 12; j++) {\n if (comb[j] === 0) perm[j] = -1;\n else perm[j] = k++;\n }\n for (let m = 0; m < 8; m++) {\n let new_perm = compose(perm, moves[m][0]);\n let new_comb = compose(comb, moves[m][0]);\n let parity = permutation_parity(new_perm.filter((x) => x >= 0));\n mtable_c[i][m] = comb_to_index(new_comb) * 2 + parity;\n }\n }\n let mtable_co = generate_phase1_corner_mtable();\n let mtable = [];\n for (let j = 0; j < C12_4; j++) {\n for (let i = 0; i < 81; i++) {\n let m0 = (mtable[i + 81 * (2 * j)] = []);\n let m1 = (mtable[i + 81 * (2 * j + 1)] = []);\n for (let m = 0; m < 8; m++) {\n m0[m] = mtable_co[i][m] + 81 * mtable_c[j][m];\n m1[m] = mtable_co[i][m] + 81 * (mtable_c[j][m] ^ 1);\n }\n }\n }\n return (tables.phase1sm = mtable);\n}\n\nfunction generate_phase1_separate_ptable() {\n if (tables.phase1sp) return tables.phase1sp;\n return (tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]));\n}\n\nfunction generate_phase2_corner_mtable() {\n if (tables.phase2cm) return tables.phase2cm;\n let phase1_mtable = generate_phase1_corner_mtable();\n let mtable = Array(81);\n for (let i = 0; i < 81; i++) {\n mtable[i] = phase1_mtable[i].slice(4, 8);\n }\n return (tables.phase2cm = mtable);\n}\n\nfunction generate_phase2_edge_mtable() {\n if (tables.phase2em) return tables.phase2em;\n const n = 8;\n const HALFFACT8 = factorial(n) / 2;\n let mtable = Array(HALFFACT8);\n let perm = [0, 1, 2, 3, 4, 5, 6, 7];\n for (let i = 0; i < HALFFACT8; i++) {\n //perm = index_to_evenpermutation(i, 8);\n mtable[i] = Array(4);\n for (let m = 0; m < 4; m++) {\n let new_perm = compose(perm, moves[m][0].slice(0, 8));\n mtable[i][m] = evenpermutation_to_index(new_perm);\n }\n\n if (i === HALFFACT8 - 1) break;\n // update perm to lex-next even permutation\n let parity = 0;\n do {\n for (let k = n - 2; k >= 0; k--) {\n if (perm[k] > perm[k + 1]) continue;\n let l = k + 1;\n for (let L = l; L < n; L++) if (perm[L] > perm[k]) l = L;\n [perm[k], perm[l]] = [perm[l], perm[k]];\n parity ^= 1;\n for (let j = 0; k + 1 + j < n - 1 - j; j++, parity ^= 1) {\n [perm[k + 1 + j], perm[n - 1 - j]] = [\n perm[n - 1 - j],\n perm[k + 1 + j],\n ];\n }\n break;\n }\n } while (parity !== 0);\n }\n return (tables.phase2em = mtable);\n}\n\nfunction generate_phase2_edge_ptable() {\n if (tables.phase2ep) return tables.phase2ep;\n return (tables.phase2ep = bfs(generate_phase2_edge_mtable(), [0]));\n}\n\nfunction bfs(mtable, goal_states) {\n let N = mtable.length;\n let nmoves = mtable[0].length;\n let ptable = Array(N).fill(-1);\n let queue = goal_states.slice(),\n new_queue = [];\n let depth = 0;\n while (queue.length > 0) {\n new_queue.length = 0;\n for (let state of queue) {\n if (ptable[state] !== -1) continue;\n ptable[state] = depth;\n for (let move_index = 0; move_index < nmoves; move_index++) {\n let new_state = mtable[state][move_index];\n while (new_state != state) {\n new_queue.push(new_state);\n new_state = mtable[new_state][move_index];\n }\n }\n }\n [queue, new_queue] = [new_queue, queue];\n depth += 1;\n }\n return ptable;\n}\n\nfunction ida_solve(indices, mtables, ptables, max_bound) {\n max_bound = max_bound || 999999;\n let ncoords = indices.length;\n let bound = 0;\n for (let i = 0; i < ncoords; i++)\n bound = Math.max(bound, ptables[i][indices[i]]);\n while (bound <= max_bound) {\n let path = ida_search(indices, mtables, ptables, bound, -1);\n if (path !== undefined) return path;\n bound++;\n }\n}\n\nfunction ida_search(indices, mtables, ptables, bound, last) {\n let ncoords = indices.length;\n let nmoves = mtables[0][0].length;\n let heuristic = 0;\n for (let i = 0; i < ncoords; i++)\n heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n if (heuristic > bound) return;\n if (bound === 0) return [];\n if (heuristic === 0 && bound === 1) return;\n for (let m = 0; m < nmoves; m++) {\n if (m === last) continue;\n if (m < last && tetrad[m] == tetrad[last]) continue;\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++)\n new_indices[c] = mtables[c][indices[c]][m];\n let r = 1;\n while (indices.some((_, i) => indices[i] != new_indices[i])) {\n let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);\n if (subpath !== undefined) return [[m, r]].concat(subpath);\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][new_indices[c]][m];\n }\n r++;\n }\n }\n return;\n}\n\nfunction* ida_solve_gen(indices, mtables, ptables) {\n let ncoords = indices.length;\n let bound = 0;\n for (let i = 0; i < ncoords; i++)\n bound = Math.max(bound, ptables[i][indices[i]]);\n while (true) {\n yield* ida_search_gen(indices, mtables, ptables, bound, -1);\n bound++;\n }\n}\n\nfunction* ida_search_gen(indices, mtables, ptables, bound, last) {\n let ncoords = indices.length;\n let nmoves = mtables[0][0].length;\n let heuristic = 0;\n for (let i = 0; i < ncoords; i++)\n heuristic = Math.max(heuristic, ptables[i][indices[i]]);\n if (heuristic > bound) return;\n if (bound === 0) {\n yield [];\n return;\n }\n if (heuristic === 0 && bound === 1) return;\n for (let m = 0; m < nmoves; m++) {\n if (m === last) continue;\n if (m < last && tetrad[m] == tetrad[last]) continue;\n let new_indices = indices.slice();\n for (let c = 0; c < ncoords; c++)\n new_indices[c] = mtables[c][indices[c]][m];\n let r = 1;\n while (indices.some((_, i) => indices[i] != new_indices[i])) {\n let subpath_gen = ida_search_gen(\n new_indices,\n mtables,\n ptables,\n bound - 1,\n m,\n );\n while (true) {\n let { value: subpath, done } = subpath_gen.next();\n if (done) break;\n yield [[m, r]].concat(subpath);\n }\n for (let c = 0; c < ncoords; c++) {\n new_indices[c] = mtables[c][new_indices[c]][m];\n }\n r++;\n }\n }\n}\n\nconst randomUintBelow = randomUIntBelowFactory();\nexport async function getRandomRediCubeScramble() {\n return new Alg(\n stringify_move_sequence(\n generate_random_state_scramble(await randomUintBelow),\n ),\n );\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,66 +0,0 @@
1
- import "./chunk-MGJA5U5O.js";
2
-
3
- // src/cubing/puzzles/implementations/redi-cube/redi_cube.kpuzzle.json.ts
4
- var rediCubeKPuzzleDefinition = {
5
- name: "redi_cube",
6
- orbits: {
7
- EDGES: { numPieces: 12, numOrientations: 2 },
8
- CORNERS: { numPieces: 8, numOrientations: 3 }
9
- },
10
- startStateData: {
11
- EDGES: {
12
- pieces: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
13
- orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
14
- },
15
- CORNERS: {
16
- pieces: [0, 1, 2, 3, 4, 5, 6, 7],
17
- orientation: [0, 0, 0, 0, 0, 0, 0, 0]
18
- }
19
- },
20
- moves: {
21
- F: {
22
- EDGES: {
23
- permutation: [8, 0, 2, 3, 4, 5, 6, 7, 1, 9, 10, 11],
24
- orientation: [0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
25
- },
26
- CORNERS: {
27
- permutation: [0, 1, 2, 3, 4, 5, 6, 7],
28
- orientation: [1, 0, 0, 0, 0, 0, 0, 0]
29
- }
30
- },
31
- x: {
32
- EDGES: {
33
- permutation: [4, 8, 0, 9, 6, 10, 2, 11, 5, 7, 1, 3],
34
- orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]
35
- },
36
- CORNERS: {
37
- permutation: [4, 0, 3, 5, 7, 6, 2, 1],
38
- orientation: [2, 1, 2, 1, 1, 2, 1, 2]
39
- }
40
- },
41
- y: {
42
- EDGES: {
43
- permutation: [1, 2, 3, 0, 5, 6, 7, 4, 10, 8, 11, 9],
44
- orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
45
- },
46
- CORNERS: {
47
- permutation: [1, 2, 3, 0, 7, 4, 5, 6],
48
- orientation: [0, 0, 0, 0, 0, 0, 0, 0]
49
- }
50
- }
51
- },
52
- experimentalDerivedMoves: {
53
- z: "[x: y]",
54
- UR: "[y: F]",
55
- U: "[y2: F]",
56
- UL: "[y': F]",
57
- D: "[x: F]",
58
- L: "[z2: F]",
59
- R: "[x2: F]",
60
- B: "[y2 x: F]"
61
- }
62
- };
63
- export {
64
- rediCubeKPuzzleDefinition
65
- };
66
- //# sourceMappingURL=redi_cube.kpuzzle.json-VGO74GBL.js.map