aboutsummaryrefslogtreecommitdiff
path: root/src/core/constants.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-04-22 18:45:12 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-04-22 18:45:12 +0200
commit77fbe3d7cbd8448f8124dba143bc5110344c6b49 (patch)
tree43a4f9f8966855a54f1e2749e6bfc6861d5f5732 /src/core/constants.h
parentbab22e1946a656088804b61cf765461b48744971 (diff)
downloadnissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.tar.gz
nissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.zip
Progress
Diffstat (limited to '')
-rw-r--r--src/core/constants.h655
1 files changed, 655 insertions, 0 deletions
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};

Generated with cgit - Back to sebastiano.tronto.net