aboutsummaryrefslogtreecommitdiff
path: root/src/steps.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/steps.h')
-rw-r--r--src/steps.h144
1 files changed, 55 insertions, 89 deletions
diff --git a/src/steps.h b/src/steps.h
index 341be98..0511b27 100644
--- a/src/steps.h
+++ b/src/steps.h
@@ -13,9 +13,8 @@ bool check_cornershtr(Cube *cube);
13bool check_eofb(Cube *cube); 13bool check_eofb(Cube *cube);
14bool check_drud(Cube *cube); 14bool check_drud(Cube *cube);
15bool check_htr(Cube *cube); 15bool check_htr(Cube *cube);
16void compute_ind(StepAlt *a, Cube *cube, Movable *ind); 16void compute_ind(Step *a, Cube *cube, Movable *ind);
17int estimate_stepalt(StepAlt *a, Movable *ind, int goal); 17void prepare_cs(ChoiceStep *cs, SolveOptions *opts);
18void prepare_step(Step *step, SolveOptions *opts);
19bool always_valid(Alg *alg); 18bool always_valid(Alg *alg);
20bool validate_singlecw_ending(Alg *alg); 19bool validate_singlecw_ending(Alg *alg);
21 20
@@ -27,26 +26,25 @@ extern char check_dr_msg[100];
27extern char check_htr_msg[100]; 26extern char check_htr_msg[100];
28extern char check_drany_msg[100]; 27extern char check_drany_msg[100];
29 28
30extern StepAlt sa_nxopt31_HTM; 29extern Step step_eofb_HTM;
31extern StepAlt sa_eofb_HTM; 30extern Step step_drud_HTM;
32extern StepAlt sa_drud_HTM; 31extern Step step_drfin_drud;
33extern StepAlt sa_drfin_drud;
34 32
35extern Step optimal_HTM; 33extern ChoiceStep optimal_HTM;
36extern Step eoany_HTM; 34extern ChoiceStep eoany_HTM;
37extern Step eofb_HTM; 35extern ChoiceStep eofb_HTM;
38extern Step eorl_HTM; 36extern ChoiceStep eorl_HTM;
39extern Step eoud_HTM; 37extern ChoiceStep eoud_HTM;
40extern Step drany_HTM; 38extern ChoiceStep drany_HTM;
41extern Step drud_HTM; 39extern ChoiceStep drud_HTM;
42extern Step drrl_HTM; 40extern ChoiceStep drrl_HTM;
43extern Step drfb_HTM; 41extern ChoiceStep drfb_HTM;
44extern Step dranyfin_DR; 42extern ChoiceStep dranyfin_DR;
45extern Step drudfin_drud; 43extern ChoiceStep drudfin_drud;
46extern Step drrlfin_drrl; 44extern ChoiceStep drrlfin_drrl;
47extern Step drfbfin_drfb; 45extern ChoiceStep drfbfin_drfb;
48 46
49extern Step *steps[]; 47extern ChoiceStep *csteps[];
50 48
51#else 49#else
52 50
@@ -56,83 +54,51 @@ char check_dr_msg[100] = "DR must be solved on given axis";
56char check_htr_msg[100] = "HTR must be solved"; 54char check_htr_msg[100] = "HTR must be solved";
57char check_drany_msg[100] = "DR must be solved on at least one axis"; 55char check_drany_msg[100] = "DR must be solved on at least one axis";
58 56
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 ******************/ 57/* Optimal after EO ******************/
90/* TODO: eofin_eo (generic), eofbfin_eofb, eorlfin_eorl, eoudfin_eoud */ 58/* TODO: eofin_eo (generic), eofbfin_eofb, eorlfin_eorl, eoudfin_eoud */
91 59
92/* EO steps **************************/ 60/* EO steps **************************/
93/* TODO: eoany_HTM (generic), eofb_HTM, eorl_HTM, eoud_HTM */ 61/* TODO: eoany_HTM (generic), eofb_HTM, eorl_HTM, eoud_HTM */
94 62
95StepAlt 63Step
96sa_eofb_HTM = { 64step_eofb_HTM = {
97 .ready = check_centers, 65 .ready = check_centers,
98 .final = false, 66 .final = false,
99 .moveset = &moveset_HTM, 67 .moveset = &moveset_HTM,
100 .n_coord = 1, 68 .n_coord = 1,
101 .coord = {&coord_eofb}, 69 .coord = {&coord_eofb},
102 .coord_trans = {uf}, 70 .coord_trans = {uf},
103 .compact_pd = {false},
104 .n_dbtrick = 0,
105 .is_valid = validate_singlecw_ending, 71 .is_valid = validate_singlecw_ending,
106}; 72};
107Step 73ChoiceStep
108eoany_HTM = { 74eoany_HTM = {
109 .shortname = "eo", 75 .shortname = "eo",
110 .name = "EO on any axis", 76 .name = "EO on any axis",
111 .alt = {&sa_eofb_HTM, &sa_eofb_HTM, &sa_eofb_HTM, NULL}, 77 .step = {&step_eofb_HTM, &step_eofb_HTM, &step_eofb_HTM, NULL},
112 .t = {uf, ur, fd}, 78 .t = {uf, ur, fd},
113 .ready_msg = check_centers_msg, 79 .ready_msg = check_centers_msg,
114}; 80};
115Step 81ChoiceStep
116eofb_HTM = { 82eofb_HTM = {
117 .shortname = "eofb", 83 .shortname = "eofb",
118 .name = "EO on F/B", 84 .name = "EO on F/B",
119 .alt = {&sa_eofb_HTM, NULL}, 85 .step = {&step_eofb_HTM, NULL},
120 .t = {uf}, 86 .t = {uf},
121 .ready_msg = check_centers_msg, 87 .ready_msg = check_centers_msg,
122}; 88};
123Step 89ChoiceStep
124eorl_HTM = { 90eorl_HTM = {
125 .shortname = "eorl", 91 .shortname = "eorl",
126 .name = "EO on R/L", 92 .name = "EO on R/L",
127 .alt = {&sa_eofb_HTM, NULL}, 93 .step = {&step_eofb_HTM, NULL},
128 .t = {ur}, 94 .t = {ur},
129 .ready_msg = check_centers_msg, 95 .ready_msg = check_centers_msg,
130}; 96};
131Step 97ChoiceStep
132eoud_HTM = { 98eoud_HTM = {
133 .shortname = "eoud", 99 .shortname = "eoud",
134 .name = "EO on U/D", 100 .name = "EO on U/D",
135 .alt = {&sa_eofb_HTM, NULL}, 101 .step = {&step_eofb_HTM, NULL},
136 .t = {fd}, 102 .t = {fd},
137 .ready_msg = check_centers_msg, 103 .ready_msg = check_centers_msg,
138}; 104};
@@ -150,93 +116,90 @@ eoud_HTM = {
150/* TODO: dr_eofb (generic), dr_eorl (generic), dr_eoud (generic) */ 116/* TODO: dr_eofb (generic), dr_eorl (generic), dr_eoud (generic) */
151/* TODO: drud_eofb, drrl_eofb, drud_eorl, drfb_eorl, drrl_eoud, drfb_eoud */ 117/* TODO: drud_eofb, drrl_eofb, drud_eorl, drfb_eorl, drrl_eoud, drfb_eoud */
152 118
153StepAlt 119Step
154sa_drud_HTM = { 120step_drud_HTM = {
155 .ready = check_centers, 121 .ready = check_centers,
156 .final = false, 122 .final = false,
157 .moveset = &moveset_HTM, 123 .moveset = &moveset_HTM,
158 .n_coord = 1, 124 .n_coord = 1,
159 .coord = {&coord_drud_sym16}, 125 .coord = {&coord_drud_sym16},
160 .coord_trans = {uf}, 126 .coord_trans = {uf},
161 .compact_pd = {false}, /* TODO: maybe compactify */
162 .n_dbtrick = 0,
163 .is_valid = validate_singlecw_ending, 127 .is_valid = validate_singlecw_ending,
164}; 128};
165Step 129ChoiceStep
166drany_HTM = { 130drany_HTM = {
167 .shortname = "dr", 131 .shortname = "dr",
168 .name = "DR on any axis", 132 .name = "DR on any axis",
169 .alt = {&sa_drud_HTM, &sa_drud_HTM, &sa_drud_HTM, NULL}, 133 .step = {&step_drud_HTM, &step_drud_HTM, &step_drud_HTM, NULL},
170 .t = {uf, rf, fd}, 134 .t = {uf, rf, fd},
171 .ready_msg = check_centers_msg, 135 .ready_msg = check_centers_msg,
172}; 136};
173Step 137ChoiceStep
174drud_HTM = { 138drud_HTM = {
175 .shortname = "drud", 139 .shortname = "drud",
176 .name = "DR on U/D", 140 .name = "DR on U/D",
177 .alt = {&sa_drud_HTM, NULL}, 141 .step = {&step_drud_HTM, NULL},
178 .t = {uf}, 142 .t = {uf},
179 .ready_msg = check_centers_msg, 143 .ready_msg = check_centers_msg,
180}; 144};
181Step 145ChoiceStep
182drrl_HTM = { 146drrl_HTM = {
183 .shortname = "drrl", 147 .shortname = "drrl",
184 .name = "DR on R/L", 148 .name = "DR on R/L",
185 .alt = {&sa_drud_HTM, NULL}, 149 .step = {&step_drud_HTM, NULL},
186 .t = {rf}, 150 .t = {rf},
187 .ready_msg = check_centers_msg, 151 .ready_msg = check_centers_msg,
188}; 152};
189Step 153ChoiceStep
190drfb_HTM = { 154drfb_HTM = {
191 .shortname = "drfb", 155 .shortname = "drfb",
192 .name = "DR on F/B", 156 .name = "DR on F/B",
193 .alt = {&sa_drud_HTM, NULL}, 157 .step = {&step_drud_HTM, NULL},
194 .t = {fd}, 158 .t = {fd},
195 .ready_msg = check_centers_msg, 159 .ready_msg = check_centers_msg,
196}; 160};
197 161
198/* DR finish steps */ 162/* DR finish steps */
199StepAlt 163Step
200sa_drfin_drud = { 164step_drfin_drud = {
201 .ready = check_drud, 165 .ready = check_drud,
202 .final = true, 166 .final = true,
203 .moveset = &moveset_drud, 167 .moveset = &moveset_drud,
204 .n_coord = 1, 168 .n_coord = 1,
205 .coord = {&coord_drudfin_noE_sym16}, /* TODO: maybe no noE */ 169 .coord = {&coord_drudfin_noE_sym16}, /* TODO: maybe no noE */
206 .coord_trans = {uf}, 170 .coord_trans = {uf},
207 .compact_pd = {false}, /* TODO: maybe compactify */
208 .n_dbtrick = 0,
209 .is_valid = NULL, 171 .is_valid = NULL,
210}; 172};
211Step 173ChoiceStep
212dranyfin_DR = { 174dranyfin_DR = {
213 .shortname = "drfin", 175 .shortname = "drfin",
214 .name = "DR finish on any axis without breaking DR", 176 .name = "DR finish on any axis without breaking DR",
215 .alt = {&sa_drfin_drud, &sa_drfin_drud, &sa_drfin_drud, NULL}, 177 .step = {&step_drfin_drud, &step_drfin_drud,
178 &step_drfin_drud, NULL},
216 .t = {uf, rf, fd}, 179 .t = {uf, rf, fd},
217 .ready_msg = check_dr_msg, 180 .ready_msg = check_dr_msg,
218}; 181};
219Step 182ChoiceStep
220drudfin_drud = { 183drudfin_drud = {
221 .shortname = "drudfin", 184 .shortname = "drudfin",
222 .name = "DR finis on U/D without breaking DR", 185 .name = "DR finis on U/D without breaking DR",
223 .alt = {&sa_drfin_drud, NULL}, 186 .step = {&step_drfin_drud, NULL},
224 .t = {uf}, 187 .t = {uf},
225 .ready_msg = check_dr_msg, 188 .ready_msg = check_dr_msg,
226}; 189};
227Step 190ChoiceStep
228drrlfin_drrl = { 191drrlfin_drrl = {
229 .shortname = "drrlfin", 192 .shortname = "drrlfin",
230 .name = "DR finish on R/L without breaking DR", 193 .name = "DR finish on R/L without breaking DR",
231 .alt = {&sa_drfin_drud, NULL}, 194 .step = {&step_drfin_drud, NULL},
232 .t = {rf}, 195 .t = {rf},
233 .ready_msg = check_dr_msg, 196 .ready_msg = check_dr_msg,
234}; 197};
235Step 198ChoiceStep
236drfbfin_drfb = { 199drfbfin_drfb = {
237 .shortname = "drfbfin", 200 .shortname = "drfbfin",
238 .name = "DR finish on F/B without breaking DR", 201 .name = "DR finish on F/B without breaking DR",
239 .alt = {&sa_drfin_drud, NULL}, 202 .step = {&step_drfin_drud, NULL},
240 .t = {fd}, 203 .t = {fd},
241 .ready_msg = check_dr_msg, 204 .ready_msg = check_dr_msg,
242}; 205};
@@ -247,13 +210,16 @@ drfbfin_drfb = {
247/* HTR finish */ 210/* HTR finish */
248/* TODO: htrfin_htr */ 211/* TODO: htrfin_htr */
249 212
250Step *steps[] = { 213ChoiceStep *csteps[] = {
251 &optimal_HTM, /* first is default */ 214/* TODO: re-implement optimal
215 &optimal_HTM,
216*/
252 217
253 &eoany_HTM, &eofb_HTM, &eorl_HTM, &eoud_HTM, 218 &eoany_HTM, &eofb_HTM, &eorl_HTM, &eoud_HTM,
254 &drany_HTM, &drud_HTM, &drrl_HTM, &drfb_HTM, 219 &drany_HTM, &drud_HTM, &drrl_HTM, &drfb_HTM,
255 &dranyfin_DR, &drudfin_drud, &drrlfin_drrl, &drfbfin_drfb, 220 &dranyfin_DR, &drudfin_drud, &drrlfin_drrl, &drfbfin_drfb,
256 221
222NULL
257/* TODO: 223/* TODO:
258 &optimal_light_HTM, 224 &optimal_light_HTM,
259 225

Generated with cgit - Back to sebastiano.tronto.net