aboutsummaryrefslogtreecommitdiff
path: root/src/steps.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/steps.h')
-rw-r--r--src/steps.h276
1 files changed, 268 insertions, 8 deletions
diff --git a/src/steps.h b/src/steps.h
index da5c041..341be98 100644
--- a/src/steps.h
+++ b/src/steps.h
@@ -3,15 +3,275 @@
3 3
4#include "pruning.h" 4#include "pruning.h"
5 5
6extern Step * steps[]; 6bool check_centers(Cube *cube);
7bool check_coud_HTM(Cube *cube);
8bool check_coud_URF(Cube *cube);
9bool check_cp_HTM(Cube *cube);
10bool check_corners_HTM(Cube *cube);
11bool check_corners_URF(Cube *cube);
12bool check_cornershtr(Cube *cube);
13bool check_eofb(Cube *cube);
14bool check_drud(Cube *cube);
15bool check_htr(Cube *cube);
16void compute_ind(StepAlt *a, Cube *cube, Movable *ind);
17int estimate_stepalt(StepAlt *a, Movable *ind, int goal);
18void prepare_step(Step *step, SolveOptions *opts);
19bool always_valid(Alg *alg);
20bool validate_singlecw_ending(Alg *alg);
7 21
8/* Two steps used directly by two-phase solver */ 22#ifndef STEPS_C
9extern Step drany_HTM;
10extern Step dranyfin_DR;
11 23
12void copy_estimatedata(EstimateData *s, EstimateData *d); 24extern char check_centers_msg[100];
13void invert_estimatedata(EstimateData *ed); 25extern char check_eo_msg[100];
14void reset_estimatedata(EstimateData *ed); 26extern char check_dr_msg[100];
15void prepare_step(Step *step, SolveOptions *opts); 27extern char check_htr_msg[100];
28extern char check_drany_msg[100];
29
30extern StepAlt sa_nxopt31_HTM;
31extern StepAlt sa_eofb_HTM;
32extern StepAlt sa_drud_HTM;
33extern StepAlt sa_drfin_drud;
34
35extern Step optimal_HTM;
36extern Step eoany_HTM;
37extern Step eofb_HTM;
38extern Step eorl_HTM;
39extern Step eoud_HTM;
40extern Step drany_HTM;
41extern Step drud_HTM;
42extern Step drrl_HTM;
43extern Step drfb_HTM;
44extern Step dranyfin_DR;
45extern Step drudfin_drud;
46extern Step drrlfin_drrl;
47extern Step drfbfin_drfb;
48
49extern Step *steps[];
50
51#else
52
53char check_centers_msg[100] = "cube must be oriented (centers solved)";
54char check_eo_msg[100] = "EO must be solved on given axis";
55char check_dr_msg[100] = "DR must be solved on given axis";
56char check_htr_msg[100] = "HTR must be solved";
57char check_drany_msg[100] = "DR must be solved on at least one axis";
58
59/* Optimal solvers *******************/
60/* TODO: build options for smaller optimal solvers */
61
62StepAlt
63sa_nxopt31_HTM = {
64 .ready = check_centers,
65 .final = true,
66 .moveset = &moveset_HTM,
67 .n_coord = 6,
68 .coord = {&coord_nxopt31, &coord_nxopt31, &coord_nxopt31,
69 &coord_eposepe, &coord_eposepe, &coord_eposepe},
70 /* TODO: use khuge as fallback? */
71 .coord_trans = {uf, rd, bl, uf, rd, bl},
72 .compact_pd = {true, true, true, false, false, false},
73 .fallback_coord = {&coord_drud_sym16, &coord_drud_sym16,
74 &coord_drud_sym16},
75 .fbmod = {BINOM8ON4, BINOM8ON4, BINOM8ON4},
76 .n_dbtrick = 1, /* TODO: change to 2 when khuge */
77 .dbtrick = {{0, 1, 2}},
78 .is_valid = NULL,
79};
80Step
81optimal_HTM = {
82 .shortname = "optimal",
83 .name = "Optimal solve (in HTM)",
84 .alt = {&sa_nxopt31_HTM, NULL},
85 .t = {uf},
86 .ready_msg = check_centers_msg,
87};
88
89/* Optimal after EO ******************/
90/* TODO: eofin_eo (generic), eofbfin_eofb, eorlfin_eorl, eoudfin_eoud */
91
92/* EO steps **************************/
93/* TODO: eoany_HTM (generic), eofb_HTM, eorl_HTM, eoud_HTM */
94
95StepAlt
96sa_eofb_HTM = {
97 .ready = check_centers,
98 .final = false,
99 .moveset = &moveset_HTM,
100 .n_coord = 1,
101 .coord = {&coord_eofb},
102 .coord_trans = {uf},
103 .compact_pd = {false},
104 .n_dbtrick = 0,
105 .is_valid = validate_singlecw_ending,
106};
107Step
108eoany_HTM = {
109 .shortname = "eo",
110 .name = "EO on any axis",
111 .alt = {&sa_eofb_HTM, &sa_eofb_HTM, &sa_eofb_HTM, NULL},
112 .t = {uf, ur, fd},
113 .ready_msg = check_centers_msg,
114};
115Step
116eofb_HTM = {
117 .shortname = "eofb",
118 .name = "EO on F/B",
119 .alt = {&sa_eofb_HTM, NULL},
120 .t = {uf},
121 .ready_msg = check_centers_msg,
122};
123Step
124eorl_HTM = {
125 .shortname = "eorl",
126 .name = "EO on R/L",
127 .alt = {&sa_eofb_HTM, NULL},
128 .t = {ur},
129 .ready_msg = check_centers_msg,
130};
131Step
132eoud_HTM = {
133 .shortname = "eoud",
134 .name = "EO on U/D",
135 .alt = {&sa_eofb_HTM, NULL},
136 .t = {fd},
137 .ready_msg = check_centers_msg,
138};
139
140/* CO steps **************************/
141/* TODO: coany_HTM (generic), cofb_HTM, corl_HTM, coud_HTM */
142/* TODO: coany_URF (generic), cofb_URF, corl_URF, coud_URF */
143
144/* Misc corner steps *****************/
145/* TODO: cornershtr_HTM, cornershtr_URF, corners_HTM, corners_URF */
146/* TODO (new): corners_drud */
147
148/* DR steps **************************/
149/* TODO: dr_eo (generic) */
150/* TODO: dr_eofb (generic), dr_eorl (generic), dr_eoud (generic) */
151/* TODO: drud_eofb, drrl_eofb, drud_eorl, drfb_eorl, drrl_eoud, drfb_eoud */
152
153StepAlt
154sa_drud_HTM = {
155 .ready = check_centers,
156 .final = false,
157 .moveset = &moveset_HTM,
158 .n_coord = 1,
159 .coord = {&coord_drud_sym16},
160 .coord_trans = {uf},
161 .compact_pd = {false}, /* TODO: maybe compactify */
162 .n_dbtrick = 0,
163 .is_valid = validate_singlecw_ending,
164};
165Step
166drany_HTM = {
167 .shortname = "dr",
168 .name = "DR on any axis",
169 .alt = {&sa_drud_HTM, &sa_drud_HTM, &sa_drud_HTM, NULL},
170 .t = {uf, rf, fd},
171 .ready_msg = check_centers_msg,
172};
173Step
174drud_HTM = {
175 .shortname = "drud",
176 .name = "DR on U/D",
177 .alt = {&sa_drud_HTM, NULL},
178 .t = {uf},
179 .ready_msg = check_centers_msg,
180};
181Step
182drrl_HTM = {
183 .shortname = "drrl",
184 .name = "DR on R/L",
185 .alt = {&sa_drud_HTM, NULL},
186 .t = {rf},
187 .ready_msg = check_centers_msg,
188};
189Step
190drfb_HTM = {
191 .shortname = "drfb",
192 .name = "DR on F/B",
193 .alt = {&sa_drud_HTM, NULL},
194 .t = {fd},
195 .ready_msg = check_centers_msg,
196};
197
198/* DR finish steps */
199StepAlt
200sa_drfin_drud = {
201 .ready = check_drud,
202 .final = true,
203 .moveset = &moveset_drud,
204 .n_coord = 1,
205 .coord = {&coord_drudfin_noE_sym16}, /* TODO: maybe no noE */
206 .coord_trans = {uf},
207 .compact_pd = {false}, /* TODO: maybe compactify */
208 .n_dbtrick = 0,
209 .is_valid = NULL,
210};
211Step
212dranyfin_DR = {
213 .shortname = "drfin",
214 .name = "DR finish on any axis without breaking DR",
215 .alt = {&sa_drfin_drud, &sa_drfin_drud, &sa_drfin_drud, NULL},
216 .t = {uf, rf, fd},
217 .ready_msg = check_dr_msg,
218};
219Step
220drudfin_drud = {
221 .shortname = "drudfin",
222 .name = "DR finis on U/D without breaking DR",
223 .alt = {&sa_drfin_drud, NULL},
224 .t = {uf},
225 .ready_msg = check_dr_msg,
226};
227Step
228drrlfin_drrl = {
229 .shortname = "drrlfin",
230 .name = "DR finish on R/L without breaking DR",
231 .alt = {&sa_drfin_drud, NULL},
232 .t = {rf},
233 .ready_msg = check_dr_msg,
234};
235Step
236drfbfin_drfb = {
237 .shortname = "drfbfin",
238 .name = "DR finish on F/B without breaking DR",
239 .alt = {&sa_drfin_drud, NULL},
240 .t = {fd},
241 .ready_msg = check_dr_msg,
242};
243
244/* HTR from DR */
245/* TODO: htr_any (generic), htr_drud, htr_drrl, htr_drfb */
246
247/* HTR finish */
248/* TODO: htrfin_htr */
249
250Step *steps[] = {
251 &optimal_HTM, /* first is default */
252
253 &eoany_HTM, &eofb_HTM, &eorl_HTM, &eoud_HTM,
254 &drany_HTM, &drud_HTM, &drrl_HTM, &drfb_HTM,
255 &dranyfin_DR, &drudfin_drud, &drrlfin_drrl, &drfbfin_drfb,
256
257/* TODO:
258 &optimal_light_HTM,
259
260 &eofin_eo, &eofbfin_eofb, &eorlfin_eorl, &eoudfin_eoud,
261 &coany_HTM, &coud_HTM, &corl_HTM, &cofb_HTM,
262 &coany_URF, &coud_URF, &corl_URF, &cofb_URF,
263 &dr_eo, &dr_eofb, &dr_eorl, &dr_eoud,
264 &drud_eofb, &drrl_eofb,
265 &drud_eorl, &drfb_eorl,
266 &drfb_eoud, &drrl_eoud,
267 &htr_any, &htr_drud, &htr_drrl, &htr_drfb,
268 &htrfin_htr,
269 &cornershtr_HTM, &cornershtr_URF, &corners_HTM, &corners_URF,
270 NULL
271*/
272
273};
274
275#endif
16 276
17#endif 277#endif

Generated with cgit - Back to sebastiano.tronto.net