aboutsummaryrefslogtreecommitdiff
path: root/src/utils/constants.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-04-22 18:45:12 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-04-22 18:45:12 +0200
commit77fbe3d7cbd8448f8124dba143bc5110344c6b49 (patch)
tree43a4f9f8966855a54f1e2749e6bfc6861d5f5732 /src/utils/constants.h
parentbab22e1946a656088804b61cf765461b48744971 (diff)
downloadnissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.tar.gz
nissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.zip
Progress
Diffstat (limited to 'src/utils/constants.h')
-rw-r--r--src/utils/constants.h363
1 files changed, 2 insertions, 361 deletions
diff --git a/src/utils/constants.h b/src/utils/constants.h
index 5ccff06..da0a813 100644
--- a/src/utils/constants.h
+++ b/src/utils/constants.h
@@ -9,6 +9,8 @@
9#define COMB_12_4 INT64_C(495) 9#define COMB_12_4 INT64_C(495)
10#define COMB_8_4 INT64_C(70) 10#define COMB_8_4 INT64_C(70)
11 11
12#define UINT8_ERROR UINT8_MAX
13
12STATIC int64_t binomial[12][12] = { 14STATIC int64_t binomial[12][12] = {
13 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
14 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
@@ -23,364 +25,3 @@ STATIC int64_t binomial[12][12] = {
23 {1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1, 0}, 25 {1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1, 0},
24 {1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1}, 26 {1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1},
25}; 27};
26
27#define MOVE_U UINT8_C(0)
28#define MOVE_U2 UINT8_C(1)
29#define MOVE_U3 UINT8_C(2)
30#define MOVE_D UINT8_C(3)
31#define MOVE_D2 UINT8_C(4)
32#define MOVE_D3 UINT8_C(5)
33#define MOVE_R UINT8_C(6)
34#define MOVE_R2 UINT8_C(7)
35#define MOVE_R3 UINT8_C(8)
36#define MOVE_L UINT8_C(9)
37#define MOVE_L2 UINT8_C(10)
38#define MOVE_L3 UINT8_C(11)
39#define MOVE_F UINT8_C(12)
40#define MOVE_F2 UINT8_C(13)
41#define MOVE_F3 UINT8_C(14)
42#define MOVE_B UINT8_C(15)
43#define MOVE_B2 UINT8_C(16)
44#define MOVE_B3 UINT8_C(17)
45
46#define TRANS_UFr UINT8_C(0)
47#define TRANS_ULr UINT8_C(1)
48#define TRANS_UBr UINT8_C(2)
49#define TRANS_URr UINT8_C(3)
50#define TRANS_DFr UINT8_C(4)
51#define TRANS_DLr UINT8_C(5)
52#define TRANS_DBr UINT8_C(6)
53#define TRANS_DRr UINT8_C(7)
54#define TRANS_RUr UINT8_C(8)
55#define TRANS_RFr UINT8_C(9)
56#define TRANS_RDr UINT8_C(10)
57#define TRANS_RBr UINT8_C(11)
58#define TRANS_LUr UINT8_C(12)
59#define TRANS_LFr UINT8_C(13)
60#define TRANS_LDr UINT8_C(14)
61#define TRANS_LBr UINT8_C(15)
62#define TRANS_FUr UINT8_C(16)
63#define TRANS_FRr UINT8_C(17)
64#define TRANS_FDr UINT8_C(18)
65#define TRANS_FLr UINT8_C(19)
66#define TRANS_BUr UINT8_C(20)
67#define TRANS_BRr UINT8_C(21)
68#define TRANS_BDr UINT8_C(22)
69#define TRANS_BLr UINT8_C(23)
70
71#define TRANS_UFm UINT8_C(24)
72#define TRANS_ULm UINT8_C(25)
73#define TRANS_UBm UINT8_C(26)
74#define TRANS_URm UINT8_C(27)
75#define TRANS_DFm UINT8_C(28)
76#define TRANS_DLm UINT8_C(29)
77#define TRANS_DBm UINT8_C(30)
78#define TRANS_DRm UINT8_C(31)
79#define TRANS_RUm UINT8_C(32)
80#define TRANS_RFm UINT8_C(33)
81#define TRANS_RDm UINT8_C(34)
82#define TRANS_RBm UINT8_C(35)
83#define TRANS_LUm UINT8_C(36)
84#define TRANS_LFm UINT8_C(37)
85#define TRANS_LDm UINT8_C(38)
86#define TRANS_LBm UINT8_C(39)
87#define TRANS_FUm UINT8_C(40)
88#define TRANS_FRm UINT8_C(41)
89#define TRANS_FDm UINT8_C(42)
90#define TRANS_FLm UINT8_C(43)
91#define TRANS_BUm UINT8_C(44)
92#define TRANS_BRm UINT8_C(45)
93#define TRANS_BDm UINT8_C(46)
94#define TRANS_BLm UINT8_C(47)
95
96#define AXIS_UD UINT8_C(0)
97#define AXIS_RL UINT8_C(1)
98#define AXIS_FB UINT8_C(2)
99
100#define NMOVES (1+MOVE_B3)
101#define NTRANS (1+TRANS_BLm)
102
103#define MM_ALLMOVES UINT32_C(0x3FFFF)
104#define MM_NOHALFTURNS UINT32_C(0x2DB6D)
105#define MM_SINGLE(m) (UINT32_C(1) << (uint32_t)(m))
106#define MM_FACE(m) (UINT32_C(7) << (uint32_t)(m))
107#define MM_EO (\
108 MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\
109 MM_FACE(MOVE_R) | MM_FACE(MOVE_L) |\
110 MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2))
111#define MM_DR (\
112 MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\
113 MM_SINGLE(MOVE_R2) | MM_SINGLE(MOVE_L2) |\
114 MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2))
115#define MM_HTR (MM_ALLMOVES & ~MM_NOHALFTURNS)
116
117#define TM_ALLTRANS UINT64_C(0xFFFFFFFFFFFF)
118#define TM_SINGLE(t) (UINT64_C(1) << (uint64_t)(t))
119#define TM_UDRLFIX (\
120 TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_UFm) | \
121 TM_SINGLE(TRANS_UBm) | TM_SINGLE(TRANS_DFr) | TM_SINGLE(TRANS_DBr) | \
122 TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm))
123#define TM_UDFIX (\
124 TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_URr) | \
125 TM_SINGLE(TRANS_ULr) | TM_SINGLE(TRANS_UFm) | TM_SINGLE(TRANS_UBm) | \
126 TM_SINGLE(TRANS_URm) | TM_SINGLE(TRANS_ULm) | TM_SINGLE(TRANS_DFr) | \
127 TM_SINGLE(TRANS_DBr) | TM_SINGLE(TRANS_DRr) | TM_SINGLE(TRANS_DLr) | \
128 TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm) | TM_SINGLE(TRANS_DRm) | \
129 TM_SINGLE(TRANS_DLm))
130
131#define CORNER_UFR UINT8_C(0)
132#define CORNER_UBL UINT8_C(1)
133#define CORNER_DFL UINT8_C(2)
134#define CORNER_DBR UINT8_C(3)
135#define CORNER_UFL UINT8_C(4)
136#define CORNER_UBR UINT8_C(5)
137#define CORNER_DFR UINT8_C(6)
138#define CORNER_DBL UINT8_C(7)
139
140#define EDGE_UF UINT8_C(0)
141#define EDGE_UB UINT8_C(1)
142#define EDGE_DB UINT8_C(2)
143#define EDGE_DF UINT8_C(3)
144#define EDGE_UR UINT8_C(4)
145#define EDGE_UL UINT8_C(5)
146#define EDGE_DL UINT8_C(6)
147#define EDGE_DR UINT8_C(7)
148#define EDGE_FR UINT8_C(8)
149#define EDGE_FL UINT8_C(9)
150#define EDGE_BL UINT8_C(10)
151#define EDGE_BR UINT8_C(11)
152
153#define EOSHIFT UINT8_C(4)
154#define COSHIFT UINT8_C(5)
155
156#define PBITS UINT8_C(0xF)
157#define ESEPBIT_1 UINT8_C(0x4)
158#define ESEPBIT_2 UINT8_C(0x8)
159#define CSEPBIT UINT8_C(0x4)
160#define EOBIT UINT8_C(0x10)
161#define COBITS UINT8_C(0xF0)
162#define COBITS_2 UINT8_C(0x60)
163#define CTWIST_CW UINT8_C(0x20)
164#define CTWIST_CCW UINT8_C(0x40)
165#define EFLIP UINT8_C(0x10)
166#define UINT8_ERROR UINT8_MAX
167
168STATIC const uint32_t allowedmask[] = {
169 UINT32_C(0x3FFF8),
170 UINT32_C(0x3FFC0),
171 UINT32_C(0x3FE3F),
172 UINT32_C(0x3F03F),
173 UINT32_C(0x38FFF),
174 UINT32_C(0x00FFF)
175};
176
177STATIC const char *cornerstr[] = {
178 [CORNER_UFR] = "UFR",
179 [CORNER_UBL] = "UBL",
180 [CORNER_DFL] = "DFL",
181 [CORNER_DBR] = "DBR",
182 [CORNER_UFL] = "UFL",
183 [CORNER_UBR] = "UBR",
184 [CORNER_DFR] = "DFR",
185 [CORNER_DBL] = "DBL"
186};
187
188STATIC const char *cornerstralt[] = {
189 [CORNER_UFR] = "URF",
190 [CORNER_UBL] = "ULB",
191 [CORNER_DFL] = "DLF",
192 [CORNER_DBR] = "DRB",
193 [CORNER_UFL] = "ULF",
194 [CORNER_UBR] = "URB",
195 [CORNER_DFR] = "DRF",
196 [CORNER_DBL] = "DLB"
197};
198
199STATIC const char *edgestr[] = {
200 [EDGE_UF] = "UF",
201 [EDGE_UB] = "UB",
202 [EDGE_DB] = "DB",
203 [EDGE_DF] = "DF",
204 [EDGE_UR] = "UR",
205 [EDGE_UL] = "UL",
206 [EDGE_DL] = "DL",
207 [EDGE_DR] = "DR",
208 [EDGE_FR] = "FR",
209 [EDGE_FL] = "FL",
210 [EDGE_BL] = "BL",
211 [EDGE_BR] = "BR"
212};
213
214STATIC const char *movestr[] = {
215 [MOVE_U] = "U",
216 [MOVE_U2] = "U2",
217 [MOVE_U3] = "U'",
218 [MOVE_D] = "D",
219 [MOVE_D2] = "D2",
220 [MOVE_D3] = "D'",
221 [MOVE_R] = "R",
222 [MOVE_R2] = "R2",
223 [MOVE_R3] = "R'",
224 [MOVE_L] = "L",
225 [MOVE_L2] = "L2",
226 [MOVE_L3] = "L'",
227 [MOVE_F] = "F",
228 [MOVE_F2] = "F2",
229 [MOVE_F3] = "F'",
230 [MOVE_B] = "B",
231 [MOVE_B2] = "B2",
232 [MOVE_B3] = "B'",
233};
234
235STATIC const char *transstr[] = {
236 [TRANS_UFr] = "rotation UF",
237 [TRANS_UFm] = "mirrored UF",
238 [TRANS_ULr] = "rotation UL",
239 [TRANS_ULm] = "mirrored UL",
240 [TRANS_UBr] = "rotation UB",
241 [TRANS_UBm] = "mirrored UB",
242 [TRANS_URr] = "rotation UR",
243 [TRANS_URm] = "mirrored UR",
244 [TRANS_DFr] = "rotation DF",
245 [TRANS_DFm] = "mirrored DF",
246 [TRANS_DLr] = "rotation DL",
247 [TRANS_DLm] = "mirrored DL",
248 [TRANS_DBr] = "rotation DB",
249 [TRANS_DBm] = "mirrored DB",
250 [TRANS_DRr] = "rotation DR",
251 [TRANS_DRm] = "mirrored DR",
252 [TRANS_RUr] = "rotation RU",
253 [TRANS_RUm] = "mirrored RU",
254 [TRANS_RFr] = "rotation RF",
255 [TRANS_RFm] = "mirrored RF",
256 [TRANS_RDr] = "rotation RD",
257 [TRANS_RDm] = "mirrored RD",
258 [TRANS_RBr] = "rotation RB",
259 [TRANS_RBm] = "mirrored RB",
260 [TRANS_LUr] = "rotation LU",
261 [TRANS_LUm] = "mirrored LU",
262 [TRANS_LFr] = "rotation LF",
263 [TRANS_LFm] = "mirrored LF",
264 [TRANS_LDr] = "rotation LD",
265 [TRANS_LDm] = "mirrored LD",
266 [TRANS_LBr] = "rotation LB",
267 [TRANS_LBm] = "mirrored LB",
268 [TRANS_FUr] = "rotation FU",
269 [TRANS_FUm] = "mirrored FU",
270 [TRANS_FRr] = "rotation FR",
271 [TRANS_FRm] = "mirrored FR",
272 [TRANS_FDr] = "rotation FD",
273 [TRANS_FDm] = "mirrored FD",
274 [TRANS_FLr] = "rotation FL",
275 [TRANS_FLm] = "mirrored FL",
276 [TRANS_BUr] = "rotation BU",
277 [TRANS_BUm] = "mirrored BU",
278 [TRANS_BRr] = "rotation BR",
279 [TRANS_BRm] = "mirrored BR",
280 [TRANS_BDr] = "rotation BD",
281 [TRANS_BDm] = "mirrored BD",
282 [TRANS_BLr] = "rotation BL",
283 [TRANS_BLm] = "mirrored BL",
284};
285
286static uint8_t inverse_trans_table[48] = {
287 [TRANS_UFr] = TRANS_UFr,
288 [TRANS_UFm] = TRANS_UFm,
289 [TRANS_ULr] = TRANS_URr,
290 [TRANS_ULm] = TRANS_ULm,
291 [TRANS_UBr] = TRANS_UBr,
292 [TRANS_UBm] = TRANS_UBm,
293 [TRANS_URr] = TRANS_ULr,
294 [TRANS_URm] = TRANS_URm,
295 [TRANS_DFr] = TRANS_DFr,
296 [TRANS_DFm] = TRANS_DFm,
297 [TRANS_DLr] = TRANS_DLr,
298 [TRANS_DLm] = TRANS_DRm,
299 [TRANS_DBr] = TRANS_DBr,
300 [TRANS_DBm] = TRANS_DBm,
301 [TRANS_DRr] = TRANS_DRr,
302 [TRANS_DRm] = TRANS_DLm,
303 [TRANS_RUr] = TRANS_FRr,
304 [TRANS_RUm] = TRANS_FLm,
305 [TRANS_RFr] = TRANS_LFr,
306 [TRANS_RFm] = TRANS_RFm,
307 [TRANS_RDr] = TRANS_BLr,
308 [TRANS_RDm] = TRANS_BRm,
309 [TRANS_RBr] = TRANS_RBr,
310 [TRANS_RBm] = TRANS_LBm,
311 [TRANS_LUr] = TRANS_FLr,
312 [TRANS_LUm] = TRANS_FRm,
313 [TRANS_LFr] = TRANS_RFr,
314 [TRANS_LFm] = TRANS_LFm,
315 [TRANS_LDr] = TRANS_BRr,
316 [TRANS_LDm] = TRANS_BLm,
317 [TRANS_LBr] = TRANS_LBr,
318 [TRANS_LBm] = TRANS_RBm,
319 [TRANS_FUr] = TRANS_FUr,
320 [TRANS_FUm] = TRANS_FUm,
321 [TRANS_FRr] = TRANS_RUr,
322 [TRANS_FRm] = TRANS_LUm,
323 [TRANS_FDr] = TRANS_BUr,
324 [TRANS_FDm] = TRANS_BUm,
325 [TRANS_FLr] = TRANS_LUr,
326 [TRANS_FLm] = TRANS_RUm,
327 [TRANS_BUr] = TRANS_FDr,
328 [TRANS_BUm] = TRANS_FDm,
329 [TRANS_BRr] = TRANS_LDr,
330 [TRANS_BRm] = TRANS_RDm,
331 [TRANS_BDr] = TRANS_BDr,
332 [TRANS_BDm] = TRANS_BDm,
333 [TRANS_BLr] = TRANS_RDr,
334 [TRANS_BLm] = TRANS_LDm,
335};
336
337static uint8_t trans_move_table[48][3] = {
338 [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F },
339 [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F },
340 [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L },
341 [TRANS_ULm] = { MOVE_U, MOVE_F, MOVE_R },
342 [TRANS_UBr] = { MOVE_U, MOVE_L, MOVE_B },
343 [TRANS_UBm] = { MOVE_U, MOVE_R, MOVE_B },
344 [TRANS_URr] = { MOVE_U, MOVE_B, MOVE_R },
345 [TRANS_URm] = { MOVE_U, MOVE_B, MOVE_L },
346 [TRANS_DFr] = { MOVE_D, MOVE_L, MOVE_F },
347 [TRANS_DFm] = { MOVE_D, MOVE_R, MOVE_F },
348 [TRANS_DLr] = { MOVE_D, MOVE_B, MOVE_L },
349 [TRANS_DLm] = { MOVE_D, MOVE_B, MOVE_R },
350 [TRANS_DBr] = { MOVE_D, MOVE_R, MOVE_B },
351 [TRANS_DBm] = { MOVE_D, MOVE_L, MOVE_B },
352 [TRANS_DRr] = { MOVE_D, MOVE_F, MOVE_R },
353 [TRANS_DRm] = { MOVE_D, MOVE_F, MOVE_L },
354 [TRANS_RUr] = { MOVE_R, MOVE_F, MOVE_U },
355 [TRANS_RUm] = { MOVE_L, MOVE_F, MOVE_U },
356 [TRANS_RFr] = { MOVE_R, MOVE_D, MOVE_F },
357 [TRANS_RFm] = { MOVE_L, MOVE_D, MOVE_F },
358 [TRANS_RDr] = { MOVE_R, MOVE_B, MOVE_D },
359 [TRANS_RDm] = { MOVE_L, MOVE_B, MOVE_D },
360 [TRANS_RBr] = { MOVE_R, MOVE_U, MOVE_B },
361 [TRANS_RBm] = { MOVE_L, MOVE_U, MOVE_B },
362 [TRANS_LUr] = { MOVE_L, MOVE_B, MOVE_U },
363 [TRANS_LUm] = { MOVE_R, MOVE_B, MOVE_U },
364 [TRANS_LFr] = { MOVE_L, MOVE_U, MOVE_F },
365 [TRANS_LFm] = { MOVE_R, MOVE_U, MOVE_F },
366 [TRANS_LDr] = { MOVE_L, MOVE_F, MOVE_D },
367 [TRANS_LDm] = { MOVE_R, MOVE_F, MOVE_D },
368 [TRANS_LBr] = { MOVE_L, MOVE_D, MOVE_B },
369 [TRANS_LBm] = { MOVE_R, MOVE_D, MOVE_B },
370 [TRANS_FUr] = { MOVE_F, MOVE_L, MOVE_U },
371 [TRANS_FUm] = { MOVE_F, MOVE_R, MOVE_U },
372 [TRANS_FRr] = { MOVE_F, MOVE_U, MOVE_R },
373 [TRANS_FRm] = { MOVE_F, MOVE_U, MOVE_L },
374 [TRANS_FDr] = { MOVE_F, MOVE_R, MOVE_D },
375 [TRANS_FDm] = { MOVE_F, MOVE_L, MOVE_D },
376 [TRANS_FLr] = { MOVE_F, MOVE_D, MOVE_L },
377 [TRANS_FLm] = { MOVE_F, MOVE_D, MOVE_R },
378 [TRANS_BUr] = { MOVE_B, MOVE_R, MOVE_U },
379 [TRANS_BUm] = { MOVE_B, MOVE_L, MOVE_U },
380 [TRANS_BRr] = { MOVE_B, MOVE_D, MOVE_R },
381 [TRANS_BRm] = { MOVE_B, MOVE_D, MOVE_L },
382 [TRANS_BDr] = { MOVE_B, MOVE_L, MOVE_D },
383 [TRANS_BDm] = { MOVE_B, MOVE_R, MOVE_D },
384 [TRANS_BLr] = { MOVE_B, MOVE_U, MOVE_L },
385 [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R },
386};

Generated with cgit - Back to sebastiano.tronto.net