aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
6 files changed, 672 insertions, 595 deletions
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