aboutsummaryrefslogtreecommitdiff
path: root/src/nissy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nissy.c')
-rw-r--r--src/nissy.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/nissy.c b/src/nissy.c
index bf56f40..27f2b35 100644
--- a/src/nissy.c
+++ b/src/nissy.c
@@ -17,7 +17,7 @@ long long parse_h48_solver(
17STATIC bool checkdata(const unsigned char *, const tableinfo_t [static 1]); 17STATIC bool checkdata(const unsigned char *, const tableinfo_t [static 1]);
18STATIC bool distribution_equal(const uint64_t [static INFO_DISTRIBUTION_LEN], 18STATIC bool distribution_equal(const uint64_t [static INFO_DISTRIBUTION_LEN],
19 const uint64_t [static INFO_DISTRIBUTION_LEN], uint8_t); 19 const uint64_t [static INFO_DISTRIBUTION_LEN], uint8_t);
20STATIC long long write_result(cube_t, char [static NISSY_SIZE_CUBE]); 20STATIC long long write_result(oriented_cube_t, char [static NISSY_SIZE_CUBE]);
21STATIC size_t my_strnlen(const char *, size_t); 21STATIC size_t my_strnlen(const char *, size_t);
22STATIC long long nissy_dataid(const char *, char [static NISSY_SIZE_DATAID]); 22STATIC long long nissy_dataid(const char *, char [static NISSY_SIZE_DATAID]);
23STATIC long long nissy_gendata_unsafe( 23STATIC long long nissy_gendata_unsafe(
@@ -117,7 +117,7 @@ distribution_equal(
117} 117}
118 118
119STATIC long long 119STATIC long long
120write_result(cube_t cube, char result[static NISSY_SIZE_CUBE]) 120write_result(oriented_cube_t cube, char result[static NISSY_SIZE_CUBE])
121{ 121{
122 writecube(cube, NISSY_SIZE_CUBE, result); 122 writecube(cube, NISSY_SIZE_CUBE, result);
123 123
@@ -147,7 +147,7 @@ nissy_inverse(
147 char result[static NISSY_SIZE_CUBE] 147 char result[static NISSY_SIZE_CUBE]
148) 148)
149{ 149{
150 cube_t c, res; 150 oriented_cube_t c, res;
151 long long err; 151 long long err;
152 152
153 c = readcube(cube); 153 c = readcube(cube);
@@ -158,7 +158,10 @@ nissy_inverse(
158 goto nissy_inverse_error; 158 goto nissy_inverse_error;
159 } 159 }
160 160
161 res = inverse(c); 161 res = (oriented_cube_t) {
162 .cube = inverse(c.cube),
163 .orientation = c.orientation
164 };
162 165
163 if (!isconsistent(res)) { 166 if (!isconsistent(res)) {
164 LOG("[inverse] Unknown error: inverted cube is invalid\n"); 167 LOG("[inverse] Unknown error: inverted cube is invalid\n");
@@ -169,7 +172,7 @@ nissy_inverse(
169 return write_result(res, result); 172 return write_result(res, result);
170 173
171nissy_inverse_error: 174nissy_inverse_error:
172 writecube(ZERO_CUBE, NISSY_SIZE_CUBE, result); 175 writecube(ZERO_ORIENTED_CUBE, NISSY_SIZE_CUBE, result);
173 return err; 176 return err;
174} 177}
175 178
@@ -180,7 +183,7 @@ nissy_applymoves(
180 char result[static NISSY_SIZE_CUBE] 183 char result[static NISSY_SIZE_CUBE]
181) 184)
182{ 185{
183 cube_t c, res; 186 oriented_cube_t c, res;
184 long long err; 187 long long err;
185 188
186 if (moves == NULL) { 189 if (moves == NULL) {
@@ -208,7 +211,7 @@ nissy_applymoves(
208 return write_result(res, result); 211 return write_result(res, result);
209 212
210nissy_applymoves_error: 213nissy_applymoves_error:
211 writecube(ZERO_CUBE, NISSY_SIZE_CUBE, result); 214 writecube(ZERO_ORIENTED_CUBE, NISSY_SIZE_CUBE, result);
212 return err; 215 return err;
213} 216}
214 217
@@ -219,7 +222,7 @@ nissy_applytrans(
219 char result[static NISSY_SIZE_CUBE] 222 char result[static NISSY_SIZE_CUBE]
220) 223)
221{ 224{
222 cube_t c, res; 225 oriented_cube_t c, res;
223 long long err; 226 long long err;
224 227
225 c = readcube(cube); 228 c = readcube(cube);
@@ -241,7 +244,7 @@ nissy_applytrans(
241 return write_result(res, result); 244 return write_result(res, result);
242 245
243nissy_applytrans_error: 246nissy_applytrans_error:
244 writecube(ZERO_CUBE, NISSY_SIZE_CUBE, result); 247 writecube(ZERO_ORIENTED_CUBE, NISSY_SIZE_CUBE, result);
245 return err; 248 return err;
246} 249}
247 250
@@ -269,13 +272,14 @@ nissy_getcube(
269 272
270 c = getcube(ep, eo, cp, co); 273 c = getcube(ep, eo, cp, co);
271 274
272 if (!isconsistent(c)) { 275 if (!isconsistent((oriented_cube_t){ .cube = c, .orientation = 0 })) {
273 LOG("[getcube] Error: could not get cube with ep=%lld, " 276 LOG("[getcube] Error: could not get cube with ep=%lld, "
274 "eo=%lld, cp=%lld, co=%lld.\n", ep, eo, cp, co); 277 "eo=%lld, cp=%lld, co=%lld.\n", ep, eo, cp, co);
275 return NISSY_ERROR_OPTIONS; 278 return NISSY_ERROR_OPTIONS;
276 } 279 }
277 280
278 return write_result(c, result); 281/* TODO: should support orientation */
282 return write_result((oriented_cube_t){.cube = c, .orientation = 0}, result);
279} 283}
280 284
281long long 285long long
@@ -456,6 +460,7 @@ nissy_solve(
456 long long stats[static NISSY_SIZE_SOLVE_STATS] 460 long long stats[static NISSY_SIZE_SOLVE_STATS]
457) 461)
458{ 462{
463 oriented_cube_t oc;
459 cube_t c; 464 cube_t c;
460 long long parse_ret; 465 long long parse_ret;
461 uint8_t h, k; 466 uint8_t h, k;
@@ -466,14 +471,17 @@ nissy_solve(
466 return NISSY_ERROR_NULL_POINTER; 471 return NISSY_ERROR_NULL_POINTER;
467 } 472 }
468 473
469 c = readcube(cube); 474 oc = readcube(cube);
475 c = oc.cube;
470 476
471 if (!isconsistent(c)) { 477/* TODO: solve should handle oriented cubes */
478
479 if (!isconsistent(oc)) {
472 LOG("[solve] Error: cube is invalid\n"); 480 LOG("[solve] Error: cube is invalid\n");
473 return NISSY_ERROR_INVALID_CUBE; 481 return NISSY_ERROR_INVALID_CUBE;
474 } 482 }
475 483
476 if (!issolvable(c)) { 484 if (!issolvable((oriented_cube_t){ .cube = c, .orientation = 0})) {
477/* TODO: this is step-dependent */ 485/* TODO: this is step-dependent */
478 LOG("[solve] Error: cube is not solvable\n"); 486 LOG("[solve] Error: cube is not solvable\n");
479 return NISSY_ERROR_UNSOLVABLE_CUBE; 487 return NISSY_ERROR_UNSOLVABLE_CUBE;

Generated with cgit - Back to sebastiano.tronto.net