-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBasicMove.cpp
221 lines (207 loc) · 8.76 KB
/
BasicMove.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#include "BasicMove.h"
namespace BasicMove {
side rotate_face(const side& face) {
return {face[6], face[3], face[0], face[7], face[4], face[1], face[8],
face[5], face[2]};
}
side counter_rotate_face(const side& face) {
return {face[2], face[5], face[8], face[1], face[4], face[7], face[0],
face[3], face[6]};
}
std::string U(CubePosition& pos) {
pos.get(color::Yellow) = rotate_face(pos.get(color::Yellow));
side temp =
{pos.get(color::Red)[0], pos.get(color::Red)[1],
pos.get(color::Red)[2]};
for (int i = 0; i < 3; ++i) {
pos.get(color::Red)[i] = pos.get(color::Green)[i];
pos.get(color::Green)[i] = pos.get(color::Orange)[i];
pos.get(color::Orange)[i] = pos.get(color::Blue)[i];
pos.get(color::Blue)[i] = temp[i];
}
return "U";
}
std::string F(CubePosition& pos) {
pos.get(color::Blue) = rotate_face(pos.get(color::Blue));
side temp = {pos.get(color::Yellow)[6], pos.get(color::Yellow)[7],
pos.get(color::Yellow)[8]};
pos.get(color::Yellow)[6] = pos.get(color::Orange)[8];
pos.get(color::Yellow)[7] = pos.get(color::Orange)[5];
pos.get(color::Yellow)[8] = pos.get(color::Orange)[2];
pos.get(color::Orange)[2] = pos.get(color::White)[0];
pos.get(color::Orange)[5] = pos.get(color::White)[1];
pos.get(color::Orange)[8] = pos.get(color::White)[2];
pos.get(color::White)[0] = pos.get(color::Red)[6];
pos.get(color::White)[1] = pos.get(color::Red)[3];
pos.get(color::White)[2] = pos.get(color::Red)[0];
pos.get(color::Red)[0] = temp[0];
pos.get(color::Red)[3] = temp[1];
pos.get(color::Red)[6] = temp[2];
return "F";
}
std::string R(CubePosition& pos) {
pos.get(color::Red) = rotate_face(pos.get(color::Red));
side temp = {pos.get(color::Yellow)[2], pos.get(color::Yellow)[5],
pos.get(color::Yellow)[8]};
pos.get(color::Yellow)[2] = pos.get(color::Blue)[2];
pos.get(color::Yellow)[5] = pos.get(color::Blue)[5];
pos.get(color::Yellow)[8] = pos.get(color::Blue)[8];
pos.get(color::Blue)[2] = pos.get(color::White)[2];
pos.get(color::Blue)[5] = pos.get(color::White)[5];
pos.get(color::Blue)[8] = pos.get(color::White)[8];
pos.get(color::White)[2] = pos.get(color::Green)[6];
pos.get(color::White)[5] = pos.get(color::Green)[3];
pos.get(color::White)[8] = pos.get(color::Green)[0];
pos.get(color::Green)[0] = temp[2];
pos.get(color::Green)[3] = temp[1];
pos.get(color::Green)[6] = temp[0];
return "R";
}
std::string B(CubePosition& pos) {
pos.get(color::Green) = rotate_face(pos.get(color::Green));
side temp = {pos.get(color::Yellow)[0], pos.get(color::Yellow)[1],
pos.get(color::Yellow)[2]};
pos.get(color::Yellow)[0] = pos.get(color::Red)[2];
pos.get(color::Yellow)[1] = pos.get(color::Red)[5];
pos.get(color::Yellow)[2] = pos.get(color::Red)[8];
pos.get(color::Red)[2] = pos.get(color::White)[8];
pos.get(color::Red)[5] = pos.get(color::White)[7];
pos.get(color::Red)[8] = pos.get(color::White)[6];
pos.get(color::White)[6] = pos.get(color::Orange)[0];
pos.get(color::White)[7] = pos.get(color::Orange)[3];
pos.get(color::White)[8] = pos.get(color::Orange)[6];
pos.get(color::Orange)[0] = temp[2];
pos.get(color::Orange)[3] = temp[1];
pos.get(color::Orange)[6] = temp[0];
return "B";
}
std::string L(CubePosition& pos) {
pos.get(color::Orange) = rotate_face(pos.get(color::Orange));
side temp = {pos.get(color::Yellow)[0], pos.get(color::Yellow)[3],
pos.get(color::Yellow)[6]};
pos.get(color::Yellow)[0] = pos.get(color::Green)[8];
pos.get(color::Yellow)[3] = pos.get(color::Green)[5];
pos.get(color::Yellow)[6] = pos.get(color::Green)[2];
pos.get(color::Green)[2] = pos.get(color::White)[6];
pos.get(color::Green)[5] = pos.get(color::White)[3];
pos.get(color::Green)[8] = pos.get(color::White)[0];
pos.get(color::White)[0] = pos.get(color::Blue)[0];
pos.get(color::White)[3] = pos.get(color::Blue)[3];
pos.get(color::White)[6] = pos.get(color::Blue)[6];
pos.get(color::Blue)[0] = temp[0];
pos.get(color::Blue)[3] = temp[1];
pos.get(color::Blue)[6] = temp[2];
return "L";
}
std::string D(CubePosition& pos) {
pos.get(color::White) = rotate_face(pos.get(color::White));
side temp =
{pos.get(color::Red)[6], pos.get(color::Red)[7],
pos.get(color::Red)[8]};
for (int i = 0; i < 3; ++i) {
pos.get(color::Red)[6 + i] = pos.get(color::Blue)[6 + i];
pos.get(color::Blue)[6 + i] = pos.get(color::Orange)[6 + i];
pos.get(color::Orange)[6 + i] = pos.get(color::Green)[6 + i];
pos.get(color::Green)[6 + i] = temp[i];
}
return "D";
}
std::string Ul(CubePosition& pos) {
pos.get(color::Yellow) = counter_rotate_face(pos.get(color::Yellow));
side temp =
{pos.get(color::Red)[0], pos.get(color::Red)[1],
pos.get(color::Red)[2]};
for (int i = 0; i < 3; ++i) {
pos.get(color::Red)[i] = pos.get(color::Blue)[i];
pos.get(color::Blue)[i] = pos.get(color::Orange)[i];
pos.get(color::Orange)[i] = pos.get(color::Green)[i];
pos.get(color::Green)[i] = temp[i];
}
return "Ul";
}
std::string Fl(CubePosition& pos) {
pos.get(color::Blue) = counter_rotate_face(pos.get(color::Blue));
side temp = {pos.get(color::Yellow)[6], pos.get(color::Yellow)[7],
pos.get(color::Yellow)[8]};
pos.get(color::Yellow)[6] = pos.get(color::Red)[0];
pos.get(color::Yellow)[7] = pos.get(color::Red)[3];
pos.get(color::Yellow)[8] = pos.get(color::Red)[6];
pos.get(color::Red)[0] = pos.get(color::White)[2];
pos.get(color::Red)[3] = pos.get(color::White)[1];
pos.get(color::Red)[6] = pos.get(color::White)[0];
pos.get(color::White)[0] = pos.get(color::Orange)[2];
pos.get(color::White)[1] = pos.get(color::Orange)[5];
pos.get(color::White)[2] = pos.get(color::Orange)[8];
pos.get(color::Orange)[2] = temp[2];
pos.get(color::Orange)[5] = temp[1];
pos.get(color::Orange)[8] = temp[0];
return "Fl";
}
std::string Rl(CubePosition& pos) {
pos.get(color::Red) = counter_rotate_face(pos.get(color::Red));
side temp = {pos.get(color::Yellow)[2], pos.get(color::Yellow)[5],
pos.get(color::Yellow)[8]};
pos.get(color::Yellow)[2] = pos.get(color::Green)[6];
pos.get(color::Yellow)[5] = pos.get(color::Green)[3];
pos.get(color::Yellow)[8] = pos.get(color::Green)[0];
pos.get(color::Green)[0] = pos.get(color::White)[8];
pos.get(color::Green)[3] = pos.get(color::White)[5];
pos.get(color::Green)[6] = pos.get(color::White)[2];
pos.get(color::White)[2] = pos.get(color::Blue)[2];
pos.get(color::White)[5] = pos.get(color::Blue)[5];
pos.get(color::White)[8] = pos.get(color::Blue)[8];
pos.get(color::Blue)[2] = temp[0];
pos.get(color::Blue)[5] = temp[1];
pos.get(color::Blue)[8] = temp[2];
return "Rl";
}
std::string Bl(CubePosition& pos) {
pos.get(color::Green) = counter_rotate_face(pos.get(color::Green));
side temp = {pos.get(color::Yellow)[0], pos.get(color::Yellow)[1],
pos.get(color::Yellow)[2]};
pos.get(color::Yellow)[0] = pos.get(color::Orange)[6];
pos.get(color::Yellow)[1] = pos.get(color::Orange)[3];
pos.get(color::Yellow)[2] = pos.get(color::Orange)[0];
pos.get(color::Orange)[0] = pos.get(color::White)[6];
pos.get(color::Orange)[3] = pos.get(color::White)[7];
pos.get(color::Orange)[6] = pos.get(color::White)[8];
pos.get(color::White)[6] = pos.get(color::Red)[8];
pos.get(color::White)[7] = pos.get(color::Red)[5];
pos.get(color::White)[8] = pos.get(color::Red)[2];
pos.get(color::Red)[2] = temp[0];
pos.get(color::Red)[5] = temp[1];
pos.get(color::Red)[8] = temp[2];
return "Bl";
}
std::string Ll(CubePosition& pos) {
pos.get(color::Orange) = counter_rotate_face(pos.get(color::Orange));
side temp = {pos.get(color::Yellow)[0], pos.get(color::Yellow)[3],
pos.get(color::Yellow)[6]};
pos.get(color::Yellow)[0] = pos.get(color::Blue)[0];
pos.get(color::Yellow)[3] = pos.get(color::Blue)[3];
pos.get(color::Yellow)[6] = pos.get(color::Blue)[6];
pos.get(color::Blue)[0] = pos.get(color::White)[0];
pos.get(color::Blue)[3] = pos.get(color::White)[3];
pos.get(color::Blue)[6] = pos.get(color::White)[6];
pos.get(color::White)[0] = pos.get(color::Green)[8];
pos.get(color::White)[3] = pos.get(color::Green)[5];
pos.get(color::White)[6] = pos.get(color::Green)[2];
pos.get(color::Green)[2] = temp[2];
pos.get(color::Green)[5] = temp[1];
pos.get(color::Green)[8] = temp[0];
return "Ll";
}
std::string Dl(CubePosition& pos) {
pos.get(color::White) = counter_rotate_face(pos.get(color::White));
side temp =
{pos.get(color::Red)[6], pos.get(color::Red)[7],
pos.get(color::Red)[8]};
for (int i = 0; i < 3; ++i) {
pos.get(color::Red)[6 + i] = pos.get(color::Green)[6 + i];
pos.get(color::Green)[6 + i] = pos.get(color::Orange)[6 + i];
pos.get(color::Orange)[6 + i] = pos.get(color::Blue)[6 + i];
pos.get(color::Blue)[6 + i] = temp[i];
}
return "Dl";
}
} // namespace BasicMove