aboutsummaryrefslogtreecommitdiff
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
parentbab22e1946a656088804b61cf765461b48744971 (diff)
downloadnissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.tar.gz
nissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.zip
Progress
-rw-r--r--README.md24
-rw-r--r--src/arch/common.h14
-rw-r--r--src/core/constant_cubes.h229
-rw-r--r--src/core/constants.h655
-rw-r--r--src/core/core.h2
-rw-r--r--src/core/cube.h4
-rw-r--r--src/utils/constants.h363
7 files changed, 692 insertions, 599 deletions
diff --git a/README.md b/README.md
index 302928a..ac01b30 100644
--- a/README.md
+++ b/README.md
@@ -282,14 +282,30 @@ Edges are numbered as follows (see also constants.h):
282UF=0 UB=1 DB=2 DF=3 UR=4 UL=5 DL=6 DR=7 FR=8 FL=9 BL=10 BR=11 282UF=0 UB=1 DB=2 DF=3 UR=4 UL=5 DL=6 DR=7 FR=8 FL=9 BL=10 BR=11
283``` 283```
284 284
285If the edge is misoriented with respect to the F/B axis, the value
286is increased by 16.
287
285Corners are numbered as follows: 288Corners are numbered as follows:
286 289
287``` 290```
288UFR=0 UBL=1 DFL=2 DBR=3 UFL=4 UBR=5 DFR=6 DBL=7 291UFR=0 UBL=1 DFL=2 DBR=3 UFL=4 UBR=5 DFR=6 DBL=7
289``` 292```
290 293
291At the moment, the only orientation supported is the standard one, as wide 294If the corner is twisted clockwise with respect to the U/D
292moves, rotations and slice moves are not supported. 295axis orientation, the value is increased by 8. If it is twisted
296counter-clowsie, the value is increased by 16.
297
298The orientations of the cube are numbered as follows, where e.g. "RB"
299means that the R face in on top and the B face is on front:
300
301```
302UF=0 UR=1 UB=2 UL=3
303DF=4 DR=5 DB=6 DL=7
304RF=8 RD=9 RB=10 RU=11
305LF=12 LD=13 LB=14 LU=15
306FD=16 FR=17 FU=18 FL=19
307BD=20 BR=21 BU=22 BL=23
308```
293 309
294In this format, the solved cube looks like this: 310In this format, the solved cube looks like this:
295 311
@@ -297,10 +313,10 @@ In this format, the solved cube looks like this:
297ABCDEFGH=ABCDEFGHIJKL=A 313ABCDEFGH=ABCDEFGHIJKL=A
298``` 314```
299 315
300The cube after the move F looks like this: 316The cube after the move Fw looks like this:
301 317
302``` 318```
303MBODSFQH=ZBCYEFGHQTKL=A 319ANCPETGR=AbaDEFGHIJRS=L
304``` 320```
305 321
306A cube in B32 format is always 23 characters long (24 if the terminating 322A cube in B32 format is always 23 characters long (24 if the terminating
diff --git a/src/arch/common.h b/src/arch/common.h
index e57fba9..922ea51 100644
--- a/src/arch/common.h
+++ b/src/arch/common.h
@@ -1,3 +1,17 @@
1#define EOSHIFT UINT8_C(4)
2#define COSHIFT UINT8_C(5)
3
4#define PBITS UINT8_C(0xF)
5#define ESEPBIT_1 UINT8_C(0x4)
6#define ESEPBIT_2 UINT8_C(0x8)
7#define CSEPBIT UINT8_C(0x4)
8#define EOBIT UINT8_C(0x10)
9#define COBITS UINT8_C(0xF0)
10#define COBITS_2 UINT8_C(0x60)
11#define CTWIST_CW UINT8_C(0x20)
12#define CTWIST_CCW UINT8_C(0x40)
13#define EFLIP UINT8_C(0x10)
14
1STATIC_INLINE int popcount_u32(uint32_t); 15STATIC_INLINE int popcount_u32(uint32_t);
2 16
3STATIC void pieces(cube_t [static 1], uint8_t [static 8], uint8_t [static 12]); 17STATIC void pieces(cube_t [static 1], uint8_t [static 8], uint8_t [static 12]);
diff --git a/src/core/constant_cubes.h b/src/core/constant_cubes.h
deleted file mode 100644
index 9657e1a..0000000
--- a/src/core/constant_cubes.h
+++ /dev/null
@@ -1,229 +0,0 @@
1#define MOVE_CUBE_U STATIC_CUBE( \
2 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11)
3#define MOVE_CUBE_U2 STATIC_CUBE( \
4 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11)
5#define MOVE_CUBE_U3 STATIC_CUBE( \
6 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11)
7#define MOVE_CUBE_D STATIC_CUBE( \
8 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11)
9#define MOVE_CUBE_D2 STATIC_CUBE( \
10 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11)
11#define MOVE_CUBE_D3 STATIC_CUBE( \
12 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11)
13#define MOVE_CUBE_R STATIC_CUBE( \
14 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4)
15#define MOVE_CUBE_R2 STATIC_CUBE( \
16 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8)
17#define MOVE_CUBE_R3 STATIC_CUBE( \
18 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7)
19#define MOVE_CUBE_L STATIC_CUBE( \
20 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11)
21#define MOVE_CUBE_L2 STATIC_CUBE( \
22 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11)
23#define MOVE_CUBE_L3 STATIC_CUBE( \
24 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11)
25#define MOVE_CUBE_F STATIC_CUBE( \
26 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11)
27#define MOVE_CUBE_F2 STATIC_CUBE( \
28 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11)
29#define MOVE_CUBE_F3 STATIC_CUBE( \
30 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11)
31#define MOVE_CUBE_B STATIC_CUBE( \
32 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18)
33#define MOVE_CUBE_B2 STATIC_CUBE( \
34 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10)
35#define MOVE_CUBE_B3 STATIC_CUBE( \
36 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17)
37
38#define TRANS_CUBE_UFr STATIC_CUBE( \
39 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
40#define TRANS_CUBE_UFr_INVERSE STATIC_CUBE( \
41 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
42#define TRANS_CUBE_ULr STATIC_CUBE( \
43 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24)
44#define TRANS_CUBE_ULr_INVERSE STATIC_CUBE( \
45 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26)
46#define TRANS_CUBE_UBr STATIC_CUBE( \
47 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9)
48#define TRANS_CUBE_UBr_INVERSE STATIC_CUBE( \
49 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9)
50#define TRANS_CUBE_URr STATIC_CUBE( \
51 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26)
52#define TRANS_CUBE_URr_INVERSE STATIC_CUBE( \
53 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24)
54#define TRANS_CUBE_DFr STATIC_CUBE( \
55 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10)
56#define TRANS_CUBE_DFr_INVERSE STATIC_CUBE( \
57 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10)
58#define TRANS_CUBE_DLr STATIC_CUBE( \
59 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27)
60#define TRANS_CUBE_DLr_INVERSE STATIC_CUBE( \
61 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27)
62#define TRANS_CUBE_DBr STATIC_CUBE( \
63 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8)
64#define TRANS_CUBE_DBr_INVERSE STATIC_CUBE( \
65 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8)
66#define TRANS_CUBE_DRr STATIC_CUBE( \
67 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25)
68#define TRANS_CUBE_DRr_INVERSE STATIC_CUBE( \
69 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25)
70#define TRANS_CUBE_RUr STATIC_CUBE( \
71 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3)
72#define TRANS_CUBE_RUr_INVERSE STATIC_CUBE( \
73 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21)
74#define TRANS_CUBE_RFr STATIC_CUBE( \
75 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18)
76#define TRANS_CUBE_RFr_INVERSE STATIC_CUBE( \
77 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17)
78#define TRANS_CUBE_RDr STATIC_CUBE( \
79 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1)
80#define TRANS_CUBE_RDr_INVERSE STATIC_CUBE( \
81 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20)
82#define TRANS_CUBE_RBr STATIC_CUBE( \
83 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16)
84#define TRANS_CUBE_RBr_INVERSE STATIC_CUBE( \
85 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16)
86#define TRANS_CUBE_LUr STATIC_CUBE( \
87 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2)
88#define TRANS_CUBE_LUr_INVERSE STATIC_CUBE( \
89 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23)
90#define TRANS_CUBE_LFr STATIC_CUBE( \
91 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17)
92#define TRANS_CUBE_LFr_INVERSE STATIC_CUBE( \
93 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18)
94#define TRANS_CUBE_LDr STATIC_CUBE( \
95 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0)
96#define TRANS_CUBE_LDr_INVERSE STATIC_CUBE( \
97 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22)
98#define TRANS_CUBE_LBr STATIC_CUBE( \
99 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19)
100#define TRANS_CUBE_LBr_INVERSE STATIC_CUBE( \
101 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19)
102#define TRANS_CUBE_FUr STATIC_CUBE( \
103 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6)
104#define TRANS_CUBE_FUr_INVERSE STATIC_CUBE( \
105 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6)
106#define TRANS_CUBE_FRr STATIC_CUBE( \
107 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21)
108#define TRANS_CUBE_FRr_INVERSE STATIC_CUBE( \
109 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3)
110#define TRANS_CUBE_FDr STATIC_CUBE( \
111 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4)
112#define TRANS_CUBE_FDr_INVERSE STATIC_CUBE( \
113 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7)
114#define TRANS_CUBE_FLr STATIC_CUBE( \
115 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23)
116#define TRANS_CUBE_FLr_INVERSE STATIC_CUBE( \
117 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2)
118#define TRANS_CUBE_BUr STATIC_CUBE( \
119 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7)
120#define TRANS_CUBE_BUr_INVERSE STATIC_CUBE( \
121 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4)
122#define TRANS_CUBE_BRr STATIC_CUBE( \
123 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22)
124#define TRANS_CUBE_BRr_INVERSE STATIC_CUBE( \
125 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0)
126#define TRANS_CUBE_BDr STATIC_CUBE( \
127 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5)
128#define TRANS_CUBE_BDr_INVERSE STATIC_CUBE( \
129 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5)
130#define TRANS_CUBE_BLr STATIC_CUBE( \
131 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20)
132#define TRANS_CUBE_BLr_INVERSE STATIC_CUBE( \
133 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1)
134#define TRANS_CUBE_UFm STATIC_CUBE( \
135 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10)
136#define TRANS_CUBE_UFm_INVERSE STATIC_CUBE( \
137 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10)
138#define TRANS_CUBE_ULm STATIC_CUBE( \
139 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25)
140#define TRANS_CUBE_ULm_INVERSE STATIC_CUBE( \
141 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25)
142#define TRANS_CUBE_UBm STATIC_CUBE( \
143 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8)
144#define TRANS_CUBE_UBm_INVERSE STATIC_CUBE( \
145 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8)
146#define TRANS_CUBE_URm STATIC_CUBE( \
147 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27)
148#define TRANS_CUBE_URm_INVERSE STATIC_CUBE( \
149 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27)
150#define TRANS_CUBE_DFm STATIC_CUBE( \
151 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11)
152#define TRANS_CUBE_DFm_INVERSE STATIC_CUBE( \
153 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11)
154#define TRANS_CUBE_DLm STATIC_CUBE( \
155 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26)
156#define TRANS_CUBE_DLm_INVERSE STATIC_CUBE( \
157 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24)
158#define TRANS_CUBE_DBm STATIC_CUBE( \
159 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9)
160#define TRANS_CUBE_DBm_INVERSE STATIC_CUBE( \
161 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9)
162#define TRANS_CUBE_DRm STATIC_CUBE( \
163 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24)
164#define TRANS_CUBE_DRm_INVERSE STATIC_CUBE( \
165 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26)
166#define TRANS_CUBE_RUm STATIC_CUBE( \
167 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3)
168#define TRANS_CUBE_RUm_INVERSE STATIC_CUBE( \
169 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22)
170#define TRANS_CUBE_RFm STATIC_CUBE( \
171 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18)
172#define TRANS_CUBE_RFm_INVERSE STATIC_CUBE( \
173 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18)
174#define TRANS_CUBE_RDm STATIC_CUBE( \
175 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1)
176#define TRANS_CUBE_RDm_INVERSE STATIC_CUBE( \
177 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23)
178#define TRANS_CUBE_RBm STATIC_CUBE( \
179 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16)
180#define TRANS_CUBE_RBm_INVERSE STATIC_CUBE( \
181 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19)
182#define TRANS_CUBE_LUm STATIC_CUBE( \
183 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2)
184#define TRANS_CUBE_LUm_INVERSE STATIC_CUBE( \
185 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20)
186#define TRANS_CUBE_LFm STATIC_CUBE( \
187 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17)
188#define TRANS_CUBE_LFm_INVERSE STATIC_CUBE( \
189 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17)
190#define TRANS_CUBE_LDm STATIC_CUBE( \
191 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0)
192#define TRANS_CUBE_LDm_INVERSE STATIC_CUBE( \
193 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21)
194#define TRANS_CUBE_LBm STATIC_CUBE( \
195 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19)
196#define TRANS_CUBE_LBm_INVERSE STATIC_CUBE( \
197 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16)
198#define TRANS_CUBE_FUm STATIC_CUBE( \
199 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7)
200#define TRANS_CUBE_FUm_INVERSE STATIC_CUBE( \
201 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7)
202#define TRANS_CUBE_FRm STATIC_CUBE( \
203 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20)
204#define TRANS_CUBE_FRm_INVERSE STATIC_CUBE( \
205 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2)
206#define TRANS_CUBE_FDm STATIC_CUBE( \
207 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5)
208#define TRANS_CUBE_FDm_INVERSE STATIC_CUBE( \
209 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6)
210#define TRANS_CUBE_FLm STATIC_CUBE( \
211 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22)
212#define TRANS_CUBE_FLm_INVERSE STATIC_CUBE( \
213 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3)
214#define TRANS_CUBE_BUm STATIC_CUBE( \
215 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6)
216#define TRANS_CUBE_BUm_INVERSE STATIC_CUBE( \
217 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5)
218#define TRANS_CUBE_BRm STATIC_CUBE( \
219 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23)
220#define TRANS_CUBE_BRm_INVERSE STATIC_CUBE( \
221 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1)
222#define TRANS_CUBE_BDm STATIC_CUBE( \
223 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4)
224#define TRANS_CUBE_BDm_INVERSE STATIC_CUBE( \
225 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4)
226#define TRANS_CUBE_BLm STATIC_CUBE( \
227 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21)
228#define TRANS_CUBE_BLm_INVERSE STATIC_CUBE( \
229 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0)
diff --git a/src/core/constants.h b/src/core/constants.h
new file mode 100644
index 0000000..824c0a5
--- /dev/null
+++ b/src/core/constants.h
@@ -0,0 +1,655 @@
1#define ZERO_ORIENTED_CUBE ((oriented_cube_t) {0})
2#define SOLVED_ORIENTED_CUBE \
3 ((oriented_cube_t) { .cube = SOLVED_CUBE, .orientation = 0 })
4
5#define MOVE_CUBE_U STATIC_CUBE( \
6 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11)
7#define MOVE_CUBE_U2 STATIC_CUBE( \
8 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11)
9#define MOVE_CUBE_U3 STATIC_CUBE( \
10 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11)
11#define MOVE_CUBE_D STATIC_CUBE( \
12 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11)
13#define MOVE_CUBE_D2 STATIC_CUBE( \
14 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11)
15#define MOVE_CUBE_D3 STATIC_CUBE( \
16 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11)
17#define MOVE_CUBE_R STATIC_CUBE( \
18 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4)
19#define MOVE_CUBE_R2 STATIC_CUBE( \
20 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8)
21#define MOVE_CUBE_R3 STATIC_CUBE( \
22 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7)
23#define MOVE_CUBE_L STATIC_CUBE( \
24 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11)
25#define MOVE_CUBE_L2 STATIC_CUBE( \
26 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11)
27#define MOVE_CUBE_L3 STATIC_CUBE( \
28 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11)
29#define MOVE_CUBE_F STATIC_CUBE( \
30 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11)
31#define MOVE_CUBE_F2 STATIC_CUBE( \
32 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11)
33#define MOVE_CUBE_F3 STATIC_CUBE( \
34 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11)
35#define MOVE_CUBE_B STATIC_CUBE( \
36 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18)
37#define MOVE_CUBE_B2 STATIC_CUBE( \
38 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10)
39#define MOVE_CUBE_B3 STATIC_CUBE( \
40 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17)
41
42#define TRANS_CUBE_UFr STATIC_CUBE( \
43 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
44#define TRANS_CUBE_UFr_INVERSE STATIC_CUBE( \
45 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
46#define TRANS_CUBE_ULr STATIC_CUBE( \
47 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24)
48#define TRANS_CUBE_ULr_INVERSE STATIC_CUBE( \
49 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26)
50#define TRANS_CUBE_UBr STATIC_CUBE( \
51 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9)
52#define TRANS_CUBE_UBr_INVERSE STATIC_CUBE( \
53 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9)
54#define TRANS_CUBE_URr STATIC_CUBE( \
55 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26)
56#define TRANS_CUBE_URr_INVERSE STATIC_CUBE( \
57 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24)
58#define TRANS_CUBE_DFr STATIC_CUBE( \
59 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10)
60#define TRANS_CUBE_DFr_INVERSE STATIC_CUBE( \
61 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10)
62#define TRANS_CUBE_DLr STATIC_CUBE( \
63 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27)
64#define TRANS_CUBE_DLr_INVERSE STATIC_CUBE( \
65 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27)
66#define TRANS_CUBE_DBr STATIC_CUBE( \
67 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8)
68#define TRANS_CUBE_DBr_INVERSE STATIC_CUBE( \
69 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8)
70#define TRANS_CUBE_DRr STATIC_CUBE( \
71 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25)
72#define TRANS_CUBE_DRr_INVERSE STATIC_CUBE( \
73 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25)
74#define TRANS_CUBE_RUr STATIC_CUBE( \
75 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3)
76#define TRANS_CUBE_RUr_INVERSE STATIC_CUBE( \
77 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21)
78#define TRANS_CUBE_RFr STATIC_CUBE( \
79 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18)
80#define TRANS_CUBE_RFr_INVERSE STATIC_CUBE( \
81 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17)
82#define TRANS_CUBE_RDr STATIC_CUBE( \
83 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1)
84#define TRANS_CUBE_RDr_INVERSE STATIC_CUBE( \
85 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20)
86#define TRANS_CUBE_RBr STATIC_CUBE( \
87 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16)
88#define TRANS_CUBE_RBr_INVERSE STATIC_CUBE( \
89 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16)
90#define TRANS_CUBE_LUr STATIC_CUBE( \
91 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2)
92#define TRANS_CUBE_LUr_INVERSE STATIC_CUBE( \
93 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23)
94#define TRANS_CUBE_LFr STATIC_CUBE( \
95 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17)
96#define TRANS_CUBE_LFr_INVERSE STATIC_CUBE( \
97 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18)
98#define TRANS_CUBE_LDr STATIC_CUBE( \
99 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0)
100#define TRANS_CUBE_LDr_INVERSE STATIC_CUBE( \
101 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22)
102#define TRANS_CUBE_LBr STATIC_CUBE( \
103 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19)
104#define TRANS_CUBE_LBr_INVERSE STATIC_CUBE( \
105 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19)
106#define TRANS_CUBE_FUr STATIC_CUBE( \
107 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6)
108#define TRANS_CUBE_FUr_INVERSE STATIC_CUBE( \
109 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6)
110#define TRANS_CUBE_FRr STATIC_CUBE( \
111 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21)
112#define TRANS_CUBE_FRr_INVERSE STATIC_CUBE( \
113 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3)
114#define TRANS_CUBE_FDr STATIC_CUBE( \
115 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4)
116#define TRANS_CUBE_FDr_INVERSE STATIC_CUBE( \
117 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7)
118#define TRANS_CUBE_FLr STATIC_CUBE( \
119 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23)
120#define TRANS_CUBE_FLr_INVERSE STATIC_CUBE( \
121 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2)
122#define TRANS_CUBE_BUr STATIC_CUBE( \
123 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7)
124#define TRANS_CUBE_BUr_INVERSE STATIC_CUBE( \
125 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4)
126#define TRANS_CUBE_BRr STATIC_CUBE( \
127 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22)
128#define TRANS_CUBE_BRr_INVERSE STATIC_CUBE( \
129 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0)
130#define TRANS_CUBE_BDr STATIC_CUBE( \
131 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5)
132#define TRANS_CUBE_BDr_INVERSE STATIC_CUBE( \
133 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5)
134#define TRANS_CUBE_BLr STATIC_CUBE( \
135 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20)
136#define TRANS_CUBE_BLr_INVERSE STATIC_CUBE( \
137 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1)
138#define TRANS_CUBE_UFm STATIC_CUBE( \
139 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10)
140#define TRANS_CUBE_UFm_INVERSE STATIC_CUBE( \
141 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10)
142#define TRANS_CUBE_ULm STATIC_CUBE( \
143 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25)
144#define TRANS_CUBE_ULm_INVERSE STATIC_CUBE( \
145 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25)
146#define TRANS_CUBE_UBm STATIC_CUBE( \
147 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8)
148#define TRANS_CUBE_UBm_INVERSE STATIC_CUBE( \
149 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8)
150#define TRANS_CUBE_URm STATIC_CUBE( \
151 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27)
152#define TRANS_CUBE_URm_INVERSE STATIC_CUBE( \
153 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27)
154#define TRANS_CUBE_DFm STATIC_CUBE( \
155 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11)
156#define TRANS_CUBE_DFm_INVERSE STATIC_CUBE( \
157 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11)
158#define TRANS_CUBE_DLm STATIC_CUBE( \
159 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26)
160#define TRANS_CUBE_DLm_INVERSE STATIC_CUBE( \
161 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24)
162#define TRANS_CUBE_DBm STATIC_CUBE( \
163 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9)
164#define TRANS_CUBE_DBm_INVERSE STATIC_CUBE( \
165 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9)
166#define TRANS_CUBE_DRm STATIC_CUBE( \
167 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24)
168#define TRANS_CUBE_DRm_INVERSE STATIC_CUBE( \
169 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26)
170#define TRANS_CUBE_RUm STATIC_CUBE( \
171 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3)
172#define TRANS_CUBE_RUm_INVERSE STATIC_CUBE( \
173 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22)
174#define TRANS_CUBE_RFm STATIC_CUBE( \
175 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18)
176#define TRANS_CUBE_RFm_INVERSE STATIC_CUBE( \
177 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18)
178#define TRANS_CUBE_RDm STATIC_CUBE( \
179 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1)
180#define TRANS_CUBE_RDm_INVERSE STATIC_CUBE( \
181 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23)
182#define TRANS_CUBE_RBm STATIC_CUBE( \
183 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16)
184#define TRANS_CUBE_RBm_INVERSE STATIC_CUBE( \
185 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19)
186#define TRANS_CUBE_LUm STATIC_CUBE( \
187 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2)
188#define TRANS_CUBE_LUm_INVERSE STATIC_CUBE( \
189 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20)
190#define TRANS_CUBE_LFm STATIC_CUBE( \
191 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17)
192#define TRANS_CUBE_LFm_INVERSE STATIC_CUBE( \
193 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17)
194#define TRANS_CUBE_LDm STATIC_CUBE( \
195 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0)
196#define TRANS_CUBE_LDm_INVERSE STATIC_CUBE( \
197 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21)
198#define TRANS_CUBE_LBm STATIC_CUBE( \
199 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19)
200#define TRANS_CUBE_LBm_INVERSE STATIC_CUBE( \
201 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16)
202#define TRANS_CUBE_FUm STATIC_CUBE( \
203 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7)
204#define TRANS_CUBE_FUm_INVERSE STATIC_CUBE( \
205 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7)
206#define TRANS_CUBE_FRm STATIC_CUBE( \
207 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20)
208#define TRANS_CUBE_FRm_INVERSE STATIC_CUBE( \
209 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2)
210#define TRANS_CUBE_FDm STATIC_CUBE( \
211 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5)
212#define TRANS_CUBE_FDm_INVERSE STATIC_CUBE( \
213 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6)
214#define TRANS_CUBE_FLm STATIC_CUBE( \
215 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22)
216#define TRANS_CUBE_FLm_INVERSE STATIC_CUBE( \
217 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3)
218#define TRANS_CUBE_BUm STATIC_CUBE( \
219 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6)
220#define TRANS_CUBE_BUm_INVERSE STATIC_CUBE( \
221 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5)
222#define TRANS_CUBE_BRm STATIC_CUBE( \
223 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23)
224#define TRANS_CUBE_BRm_INVERSE STATIC_CUBE( \
225 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1)
226#define TRANS_CUBE_BDm STATIC_CUBE( \
227 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4)
228#define TRANS_CUBE_BDm_INVERSE STATIC_CUBE( \
229 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4)
230#define TRANS_CUBE_BLm STATIC_CUBE( \
231 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21)
232#define TRANS_CUBE_BLm_INVERSE STATIC_CUBE( \
233 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0)
234
235#define MOVE_U UINT8_C(0)
236#define MOVE_U2 UINT8_C(1)
237#define MOVE_U3 UINT8_C(2)
238#define MOVE_D UINT8_C(3)
239#define MOVE_D2 UINT8_C(4)
240#define MOVE_D3 UINT8_C(5)
241#define MOVE_R UINT8_C(6)
242#define MOVE_R2 UINT8_C(7)
243#define MOVE_R3 UINT8_C(8)
244#define MOVE_L UINT8_C(9)
245#define MOVE_L2 UINT8_C(10)
246#define MOVE_L3 UINT8_C(11)
247#define MOVE_F UINT8_C(12)
248#define MOVE_F2 UINT8_C(13)
249#define MOVE_F3 UINT8_C(14)
250#define MOVE_B UINT8_C(15)
251#define MOVE_B2 UINT8_C(16)
252#define MOVE_B3 UINT8_C(17)
253
254#define TRANS_UFr UINT8_C(0)
255#define TRANS_ULr UINT8_C(1)
256#define TRANS_UBr UINT8_C(2)
257#define TRANS_URr UINT8_C(3)
258#define TRANS_DFr UINT8_C(4)
259#define TRANS_DLr UINT8_C(5)
260#define TRANS_DBr UINT8_C(6)
261#define TRANS_DRr UINT8_C(7)
262#define TRANS_RUr UINT8_C(8)
263#define TRANS_RFr UINT8_C(9)
264#define TRANS_RDr UINT8_C(10)
265#define TRANS_RBr UINT8_C(11)
266#define TRANS_LUr UINT8_C(12)
267#define TRANS_LFr UINT8_C(13)
268#define TRANS_LDr UINT8_C(14)
269#define TRANS_LBr UINT8_C(15)
270#define TRANS_FUr UINT8_C(16)
271#define TRANS_FRr UINT8_C(17)
272#define TRANS_FDr UINT8_C(18)
273#define TRANS_FLr UINT8_C(19)
274#define TRANS_BUr UINT8_C(20)
275#define TRANS_BRr UINT8_C(21)
276#define TRANS_BDr UINT8_C(22)
277#define TRANS_BLr UINT8_C(23)
278
279#define TRANS_UFm UINT8_C(24)
280#define TRANS_ULm UINT8_C(25)
281#define TRANS_UBm UINT8_C(26)
282#define TRANS_URm UINT8_C(27)
283#define TRANS_DFm UINT8_C(28)
284#define TRANS_DLm UINT8_C(29)
285#define TRANS_DBm UINT8_C(30)
286#define TRANS_DRm UINT8_C(31)
287#define TRANS_RUm UINT8_C(32)
288#define TRANS_RFm UINT8_C(33)
289#define TRANS_RDm UINT8_C(34)
290#define TRANS_RBm UINT8_C(35)
291#define TRANS_LUm UINT8_C(36)
292#define TRANS_LFm UINT8_C(37)
293#define TRANS_LDm UINT8_C(38)
294#define TRANS_LBm UINT8_C(39)
295#define TRANS_FUm UINT8_C(40)
296#define TRANS_FRm UINT8_C(41)
297#define TRANS_FDm UINT8_C(42)
298#define TRANS_FLm UINT8_C(43)
299#define TRANS_BUm UINT8_C(44)
300#define TRANS_BRm UINT8_C(45)
301#define TRANS_BDm UINT8_C(46)
302#define TRANS_BLm UINT8_C(47)
303
304#define AXIS_UD UINT8_C(0)
305#define AXIS_RL UINT8_C(1)
306#define AXIS_FB UINT8_C(2)
307
308#define NMOVES (1+MOVE_B3)
309#define NTRANS (1+TRANS_BLm)
310
311#define MM_ALLMOVES UINT32_C(0x3FFFF)
312#define MM_NOHALFTURNS UINT32_C(0x2DB6D)
313#define MM_SINGLE(m) (UINT32_C(1) << (uint32_t)(m))
314#define MM_FACE(m) (UINT32_C(7) << (uint32_t)(m))
315#define MM_EO (\
316 MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\
317 MM_FACE(MOVE_R) | MM_FACE(MOVE_L) |\
318 MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2))
319#define MM_DR (\
320 MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\
321 MM_SINGLE(MOVE_R2) | MM_SINGLE(MOVE_L2) |\
322 MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2))
323#define MM_HTR (MM_ALLMOVES & ~MM_NOHALFTURNS)
324
325#define TM_ALLTRANS UINT64_C(0xFFFFFFFFFFFF)
326#define TM_SINGLE(t) (UINT64_C(1) << (uint64_t)(t))
327#define TM_UDRLFIX (\
328 TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_UFm) | \
329 TM_SINGLE(TRANS_UBm) | TM_SINGLE(TRANS_DFr) | TM_SINGLE(TRANS_DBr) | \
330 TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm))
331#define TM_UDFIX (\
332 TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_URr) | \
333 TM_SINGLE(TRANS_ULr) | TM_SINGLE(TRANS_UFm) | TM_SINGLE(TRANS_UBm) | \
334 TM_SINGLE(TRANS_URm) | TM_SINGLE(TRANS_ULm) | TM_SINGLE(TRANS_DFr) | \
335 TM_SINGLE(TRANS_DBr) | TM_SINGLE(TRANS_DRr) | TM_SINGLE(TRANS_DLr) | \
336 TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm) | TM_SINGLE(TRANS_DRm) | \
337 TM_SINGLE(TRANS_DLm))
338
339#define CORNER_UFR UINT8_C(0)
340#define CORNER_UBL UINT8_C(1)
341#define CORNER_DFL UINT8_C(2)
342#define CORNER_DBR UINT8_C(3)
343#define CORNER_UFL UINT8_C(4)
344#define CORNER_UBR UINT8_C(5)
345#define CORNER_DFR UINT8_C(6)
346#define CORNER_DBL UINT8_C(7)
347
348#define EDGE_UF UINT8_C(0)
349#define EDGE_UB UINT8_C(1)
350#define EDGE_DB UINT8_C(2)
351#define EDGE_DF UINT8_C(3)
352#define EDGE_UR UINT8_C(4)
353#define EDGE_UL UINT8_C(5)
354#define EDGE_DL UINT8_C(6)
355#define EDGE_DR UINT8_C(7)
356#define EDGE_FR UINT8_C(8)
357#define EDGE_FL UINT8_C(9)
358#define EDGE_BL UINT8_C(10)
359#define EDGE_BR UINT8_C(11)
360
361#define ORIENTATION_UF UINT8_C(0)
362#define ORIENTATION_UR UINT8_C(1)
363#define ORIENTATION_UB UINT8_C(2)
364#define ORIENTATION_UL UINT8_C(3)
365#define ORIENTATION_DF UINT8_C(4)
366#define ORIENTATION_DR UINT8_C(5)
367#define ORIENTATION_DB UINT8_C(6)
368#define ORIENTATION_DL UINT8_C(7)
369#define ORIENTATION_RF UINT8_C(8)
370#define ORIENTATION_RD UINT8_C(9)
371#define ORIENTATION_RB UINT8_C(10)
372#define ORIENTATION_RU UINT8_C(11)
373#define ORIENTATION_LF UINT8_C(12)
374#define ORIENTATION_LD UINT8_C(13)
375#define ORIENTATION_LB UINT8_C(14)
376#define ORIENTATION_LU UINT8_C(15)
377#define ORIENTATION_FD UINT8_C(16)
378#define ORIENTATION_FR UINT8_C(17)
379#define ORIENTATION_FU UINT8_C(18)
380#define ORIENTATION_FL UINT8_C(19)
381#define ORIENTATION_BD UINT8_C(20)
382#define ORIENTATION_BR UINT8_C(21)
383#define ORIENTATION_BU UINT8_C(22)
384#define ORIENTATION_BL UINT8_C(23)
385
386STATIC const uint32_t allowedmask[] = {
387 UINT32_C(0x3FFF8),
388 UINT32_C(0x3FFC0),
389 UINT32_C(0x3FE3F),
390 UINT32_C(0x3F03F),
391 UINT32_C(0x38FFF),
392 UINT32_C(0x00FFF)
393};
394
395STATIC const char *cornerstr[] = {
396 [CORNER_UFR] = "UFR",
397 [CORNER_UBL] = "UBL",
398 [CORNER_DFL] = "DFL",
399 [CORNER_DBR] = "DBR",
400 [CORNER_UFL] = "UFL",
401 [CORNER_UBR] = "UBR",
402 [CORNER_DFR] = "DFR",
403 [CORNER_DBL] = "DBL"
404};
405
406STATIC const char *cornerstralt[] = {
407 [CORNER_UFR] = "URF",
408 [CORNER_UBL] = "ULB",
409 [CORNER_DFL] = "DLF",
410 [CORNER_DBR] = "DRB",
411 [CORNER_UFL] = "ULF",
412 [CORNER_UBR] = "URB",
413 [CORNER_DFR] = "DRF",
414 [CORNER_DBL] = "DLB"
415};
416
417STATIC const char *edgestr[] = {
418 [EDGE_UF] = "UF",
419 [EDGE_UB] = "UB",
420 [EDGE_DB] = "DB",
421 [EDGE_DF] = "DF",
422 [EDGE_UR] = "UR",
423 [EDGE_UL] = "UL",
424 [EDGE_DL] = "DL",
425 [EDGE_DR] = "DR",
426 [EDGE_FR] = "FR",
427 [EDGE_FL] = "FL",
428 [EDGE_BL] = "BL",
429 [EDGE_BR] = "BR"
430};
431
432STATIC const char *movestr[] = {
433 [MOVE_U] = "U",
434 [MOVE_U2] = "U2",
435 [MOVE_U3] = "U'",
436 [MOVE_D] = "D",
437 [MOVE_D2] = "D2",
438 [MOVE_D3] = "D'",
439 [MOVE_R] = "R",
440 [MOVE_R2] = "R2",
441 [MOVE_R3] = "R'",
442 [MOVE_L] = "L",
443 [MOVE_L2] = "L2",
444 [MOVE_L3] = "L'",
445 [MOVE_F] = "F",
446 [MOVE_F2] = "F2",
447 [MOVE_F3] = "F'",
448 [MOVE_B] = "B",
449 [MOVE_B2] = "B2",
450 [MOVE_B3] = "B'",
451};
452
453STATIC const char *transstr[] = {
454 [TRANS_UFr] = "rotation UF",
455 [TRANS_UFm] = "mirrored UF",
456 [TRANS_ULr] = "rotation UL",
457 [TRANS_ULm] = "mirrored UL",
458 [TRANS_UBr] = "rotation UB",
459 [TRANS_UBm] = "mirrored UB",
460 [TRANS_URr] = "rotation UR",
461 [TRANS_URm] = "mirrored UR",
462 [TRANS_DFr] = "rotation DF",
463 [TRANS_DFm] = "mirrored DF",
464 [TRANS_DLr] = "rotation DL",
465 [TRANS_DLm] = "mirrored DL",
466 [TRANS_DBr] = "rotation DB",
467 [TRANS_DBm] = "mirrored DB",
468 [TRANS_DRr] = "rotation DR",
469 [TRANS_DRm] = "mirrored DR",
470 [TRANS_RUr] = "rotation RU",
471 [TRANS_RUm] = "mirrored RU",
472 [TRANS_RFr] = "rotation RF",
473 [TRANS_RFm] = "mirrored RF",
474 [TRANS_RDr] = "rotation RD",
475 [TRANS_RDm] = "mirrored RD",
476 [TRANS_RBr] = "rotation RB",
477 [TRANS_RBm] = "mirrored RB",
478 [TRANS_LUr] = "rotation LU",
479 [TRANS_LUm] = "mirrored LU",
480 [TRANS_LFr] = "rotation LF",
481 [TRANS_LFm] = "mirrored LF",
482 [TRANS_LDr] = "rotation LD",
483 [TRANS_LDm] = "mirrored LD",
484 [TRANS_LBr] = "rotation LB",
485 [TRANS_LBm] = "mirrored LB",
486 [TRANS_FUr] = "rotation FU",
487 [TRANS_FUm] = "mirrored FU",
488 [TRANS_FRr] = "rotation FR",
489 [TRANS_FRm] = "mirrored FR",
490 [TRANS_FDr] = "rotation FD",
491 [TRANS_FDm] = "mirrored FD",
492 [TRANS_FLr] = "rotation FL",
493 [TRANS_FLm] = "mirrored FL",
494 [TRANS_BUr] = "rotation BU",
495 [TRANS_BUm] = "mirrored BU",
496 [TRANS_BRr] = "rotation BR",
497 [TRANS_BRm] = "mirrored BR",
498 [TRANS_BDr] = "rotation BD",
499 [TRANS_BDm] = "mirrored BD",
500 [TRANS_BLr] = "rotation BL",
501 [TRANS_BLm] = "mirrored BL",
502};
503
504static uint8_t inverse_trans_table[] = {
505 [TRANS_UFr] = TRANS_UFr,
506 [TRANS_UFm] = TRANS_UFm,
507 [TRANS_ULr] = TRANS_URr,
508 [TRANS_ULm] = TRANS_ULm,
509 [TRANS_UBr] = TRANS_UBr,
510 [TRANS_UBm] = TRANS_UBm,
511 [TRANS_URr] = TRANS_ULr,
512 [TRANS_URm] = TRANS_URm,
513 [TRANS_DFr] = TRANS_DFr,
514 [TRANS_DFm] = TRANS_DFm,
515 [TRANS_DLr] = TRANS_DLr,
516 [TRANS_DLm] = TRANS_DRm,
517 [TRANS_DBr] = TRANS_DBr,
518 [TRANS_DBm] = TRANS_DBm,
519 [TRANS_DRr] = TRANS_DRr,
520 [TRANS_DRm] = TRANS_DLm,
521 [TRANS_RUr] = TRANS_FRr,
522 [TRANS_RUm] = TRANS_FLm,
523 [TRANS_RFr] = TRANS_LFr,
524 [TRANS_RFm] = TRANS_RFm,
525 [TRANS_RDr] = TRANS_BLr,
526 [TRANS_RDm] = TRANS_BRm,
527 [TRANS_RBr] = TRANS_RBr,
528 [TRANS_RBm] = TRANS_LBm,
529 [TRANS_LUr] = TRANS_FLr,
530 [TRANS_LUm] = TRANS_FRm,
531 [TRANS_LFr] = TRANS_RFr,
532 [TRANS_LFm] = TRANS_LFm,
533 [TRANS_LDr] = TRANS_BRr,
534 [TRANS_LDm] = TRANS_BLm,
535 [TRANS_LBr] = TRANS_LBr,
536 [TRANS_LBm] = TRANS_RBm,
537 [TRANS_FUr] = TRANS_FUr,
538 [TRANS_FUm] = TRANS_FUm,
539 [TRANS_FRr] = TRANS_RUr,
540 [TRANS_FRm] = TRANS_LUm,
541 [TRANS_FDr] = TRANS_BUr,
542 [TRANS_FDm] = TRANS_BUm,
543 [TRANS_FLr] = TRANS_LUr,
544 [TRANS_FLm] = TRANS_RUm,
545 [TRANS_BUr] = TRANS_FDr,
546 [TRANS_BUm] = TRANS_FDm,
547 [TRANS_BRr] = TRANS_LDr,
548 [TRANS_BRm] = TRANS_RDm,
549 [TRANS_BDr] = TRANS_BDr,
550 [TRANS_BDm] = TRANS_BDm,
551 [TRANS_BLr] = TRANS_RDr,
552 [TRANS_BLm] = TRANS_LDm,
553};
554
555static uint8_t trans_move_table[][3] = {
556 [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F },
557 [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F },
558 [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L },
559 [TRANS_ULm] = { MOVE_U, MOVE_F, MOVE_R },
560 [TRANS_UBr] = { MOVE_U, MOVE_L, MOVE_B },
561 [TRANS_UBm] = { MOVE_U, MOVE_R, MOVE_B },
562 [TRANS_URr] = { MOVE_U, MOVE_B, MOVE_R },
563 [TRANS_URm] = { MOVE_U, MOVE_B, MOVE_L },
564 [TRANS_DFr] = { MOVE_D, MOVE_L, MOVE_F },
565 [TRANS_DFm] = { MOVE_D, MOVE_R, MOVE_F },
566 [TRANS_DLr] = { MOVE_D, MOVE_B, MOVE_L },
567 [TRANS_DLm] = { MOVE_D, MOVE_B, MOVE_R },
568 [TRANS_DBr] = { MOVE_D, MOVE_R, MOVE_B },
569 [TRANS_DBm] = { MOVE_D, MOVE_L, MOVE_B },
570 [TRANS_DRr] = { MOVE_D, MOVE_F, MOVE_R },
571 [TRANS_DRm] = { MOVE_D, MOVE_F, MOVE_L },
572 [TRANS_RUr] = { MOVE_R, MOVE_F, MOVE_U },
573 [TRANS_RUm] = { MOVE_L, MOVE_F, MOVE_U },
574 [TRANS_RFr] = { MOVE_R, MOVE_D, MOVE_F },
575 [TRANS_RFm] = { MOVE_L, MOVE_D, MOVE_F },
576 [TRANS_RDr] = { MOVE_R, MOVE_B, MOVE_D },
577 [TRANS_RDm] = { MOVE_L, MOVE_B, MOVE_D },
578 [TRANS_RBr] = { MOVE_R, MOVE_U, MOVE_B },
579 [TRANS_RBm] = { MOVE_L, MOVE_U, MOVE_B },
580 [TRANS_LUr] = { MOVE_L, MOVE_B, MOVE_U },
581 [TRANS_LUm] = { MOVE_R, MOVE_B, MOVE_U },
582 [TRANS_LFr] = { MOVE_L, MOVE_U, MOVE_F },
583 [TRANS_LFm] = { MOVE_R, MOVE_U, MOVE_F },
584 [TRANS_LDr] = { MOVE_L, MOVE_F, MOVE_D },
585 [TRANS_LDm] = { MOVE_R, MOVE_F, MOVE_D },
586 [TRANS_LBr] = { MOVE_L, MOVE_D, MOVE_B },
587 [TRANS_LBm] = { MOVE_R, MOVE_D, MOVE_B },
588 [TRANS_FUr] = { MOVE_F, MOVE_L, MOVE_U },
589 [TRANS_FUm] = { MOVE_F, MOVE_R, MOVE_U },
590 [TRANS_FRr] = { MOVE_F, MOVE_U, MOVE_R },
591 [TRANS_FRm] = { MOVE_F, MOVE_U, MOVE_L },
592 [TRANS_FDr] = { MOVE_F, MOVE_R, MOVE_D },
593 [TRANS_FDm] = { MOVE_F, MOVE_L, MOVE_D },
594 [TRANS_FLr] = { MOVE_F, MOVE_D, MOVE_L },
595 [TRANS_FLm] = { MOVE_F, MOVE_D, MOVE_R },
596 [TRANS_BUr] = { MOVE_B, MOVE_R, MOVE_U },
597 [TRANS_BUm] = { MOVE_B, MOVE_L, MOVE_U },
598 [TRANS_BRr] = { MOVE_B, MOVE_D, MOVE_R },
599 [TRANS_BRm] = { MOVE_B, MOVE_D, MOVE_L },
600 [TRANS_BDr] = { MOVE_B, MOVE_L, MOVE_D },
601 [TRANS_BDm] = { MOVE_B, MOVE_R, MOVE_D },
602 [TRANS_BLr] = { MOVE_B, MOVE_U, MOVE_L },
603 [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R },
604};
605
606static uint8_t orientation_transition_table[][3] = {
607 [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF },
608 [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR },
609 [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB },
610 [ORIENTATION_UL] = { ORIENTATION_LD, ORIENTATION_UF, ORIENTATION_BL },
611 [ORIENTATION_DF] = { ORIENTATION_FU, ORIENTATION_DL, ORIENTATION_RF },
612 [ORIENTATION_DR] = { ORIENTATION_RU, ORIENTATION_DF, ORIENTATION_BR },
613 [ORIENTATION_DB] = { ORIENTATION_BU, ORIENTATION_DR, ORIENTATION_LB },
614 [ORIENTATION_DL] = { ORIENTATION_LU, ORIENTATION_DB, ORIENTATION_FL },
615 [ORIENTATION_RF] = { ORIENTATION_FL, ORIENTATION_RD, ORIENTATION_UF },
616 [ORIENTATION_RD] = { ORIENTATION_DL, ORIENTATION_RB, ORIENTATION_FD },
617 [ORIENTATION_RB] = { ORIENTATION_BL, ORIENTATION_RU, ORIENTATION_DB },
618 [ORIENTATION_RU] = { ORIENTATION_UL, ORIENTATION_RF, ORIENTATION_BU },
619 [ORIENTATION_LF] = { ORIENTATION_FR, ORIENTATION_LU, ORIENTATION_DF },
620 [ORIENTATION_LD] = { ORIENTATION_DR, ORIENTATION_LB, ORIENTATION_BD },
621 [ORIENTATION_LB] = { ORIENTATION_BR, ORIENTATION_LD, ORIENTATION_UB },
622 [ORIENTATION_LU] = { ORIENTATION_UR, ORIENTATION_LF, ORIENTATION_FU },
623 [ORIENTATION_FD] = { ORIENTATION_DB, ORIENTATION_FR, ORIENTATION_LD },
624 [ORIENTATION_FR] = { ORIENTATION_RB, ORIENTATION_FU, ORIENTATION_DR },
625 [ORIENTATION_FU] = { ORIENTATION_UB, ORIENTATION_FL, ORIENTATION_RU },
626 [ORIENTATION_FL] = { ORIENTATION_LB, ORIENTATION_FD, ORIENTATION_UL },
627 [ORIENTATION_BD] = { ORIENTATION_DF, ORIENTATION_BL, ORIENTATION_RD },
628 [ORIENTATION_BR] = { ORIENTATION_RF, ORIENTATION_BU, ORIENTATION_UR },
629 [ORIENTATION_BU] = { ORIENTATION_UF, ORIENTATION_BR, ORIENTATION_LU },
630 [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL },
631};
632
633static struct {
634 uint8_t moves[3];
635 uint8_t rotations[6];
636} equivalent_move_table[] = {
637 [MOVE_U] = { { MOVE_U, UINT8_MAX }, {UINT8_MAX} },
638 [MOVE_U2] = { { MOVE_U2, UINT8_MAX }, {UINT8_MAX} },
639 [MOVE_U3] = { { MOVE_U3, UINT8_MAX }, {UINT8_MAX} },
640 [MOVE_D] = { { MOVE_D, UINT8_MAX }, {UINT8_MAX} },
641 [MOVE_D2] = { { MOVE_D2, UINT8_MAX }, {UINT8_MAX} },
642 [MOVE_D3] = { { MOVE_D3, UINT8_MAX }, {UINT8_MAX} },
643 [MOVE_R] = { { MOVE_R, UINT8_MAX }, {UINT8_MAX} },
644 [MOVE_R2] = { { MOVE_R2, UINT8_MAX }, {UINT8_MAX} },
645 [MOVE_R3] = { { MOVE_R3, UINT8_MAX }, {UINT8_MAX} },
646 [MOVE_L] = { { MOVE_L, UINT8_MAX }, {UINT8_MAX} },
647 [MOVE_L2] = { { MOVE_L2, UINT8_MAX }, {UINT8_MAX} },
648 [MOVE_L3] = { { MOVE_L3, UINT8_MAX }, {UINT8_MAX} },
649 [MOVE_F] = { { MOVE_F, UINT8_MAX }, {UINT8_MAX} },
650 [MOVE_F2] = { { MOVE_F2, UINT8_MAX }, {UINT8_MAX} },
651 [MOVE_F3] = { { MOVE_F3, UINT8_MAX }, {UINT8_MAX} },
652 [MOVE_B] = { { MOVE_B, UINT8_MAX }, {UINT8_MAX} },
653 [MOVE_B2] = { { MOVE_B2, UINT8_MAX }, {UINT8_MAX} },
654 [MOVE_B3] = { { MOVE_B3, UINT8_MAX }, {UINT8_MAX} },
655};
diff --git a/src/core/core.h b/src/core/core.h
index c211788..b56106e 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -1,5 +1,5 @@
1#include "core_types.h" 1#include "core_types.h"
2#include "constant_cubes.h" 2#include "constants.h"
3#include "cube.h" 3#include "cube.h"
4#include "moves.h" 4#include "moves.h"
5#include "transform.h" 5#include "transform.h"
diff --git a/src/core/cube.h b/src/core/cube.h
index 76c3ff1..91bb284 100644
--- a/src/core/cube.h
+++ b/src/core/cube.h
@@ -1,7 +1,3 @@
1#define ZERO_ORIENTED_CUBE ((oriented_cube_t) {0})
2#define SOLVED_ORIENTED_CUBE \
3 ((oriented_cube_t) { .cube = SOLVED_CUBE, .orientation = 0 })
4
5STATIC oriented_cube_t solvedcube(void); 1STATIC oriented_cube_t solvedcube(void);
6STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); 2STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]);
7STATIC bool isconsistent(oriented_cube_t); 3STATIC bool isconsistent(oriented_cube_t);
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