diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-07-31 09:47:57 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-07-31 09:47:57 +0200 |
| commit | 992de12cc081e7dde16c3c231f83bfa77c67825a (patch) | |
| tree | af0b2d51b1a6cd92ae2cd6a32d581d752ddce8ea /shell/shell.c | |
| parent | e2b154c40acaac4e7a7b3e379ada0404519c3750 (diff) | |
| download | nissy-core-992de12cc081e7dde16c3c231f83bfa77c67825a.tar.gz nissy-core-992de12cc081e7dde16c3c231f83bfa77c67825a.zip | |
Added move sequence comparison function
Diffstat (limited to '')
| -rw-r--r-- | shell/shell.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/shell/shell.c b/shell/shell.c index a9a1bc7..8800094 100644 --- a/shell/shell.c +++ b/shell/shell.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #define FLAG_COMMAND "-command" | 18 | #define FLAG_COMMAND "-command" |
| 19 | #define FLAG_STR_CUBE "-cubestr" | 19 | #define FLAG_STR_CUBE "-cubestr" |
| 20 | #define FLAG_MOVES "-moves" | 20 | #define FLAG_MOVES "-moves" |
| 21 | #define FLAG_MOVES2 "-moves2" | ||
| 21 | #define FLAG_TRANS "-trans" | 22 | #define FLAG_TRANS "-trans" |
| 22 | #define FLAG_SOLVER "-solver" | 23 | #define FLAG_SOLVER "-solver" |
| 23 | #define FLAG_NISSTYPE "-nisstype" | 24 | #define FLAG_NISSTYPE "-nisstype" |
| @@ -39,6 +40,7 @@ typedef struct { | |||
| 39 | char *str_command; | 40 | char *str_command; |
| 40 | char *str_cube; | 41 | char *str_cube; |
| 41 | char *str_moves; | 42 | char *str_moves; |
| 43 | char *str_moves2; | ||
| 42 | char *str_trans; | 44 | char *str_trans; |
| 43 | char *str_solver; | 45 | char *str_solver; |
| 44 | char *str_nisstype; | 46 | char *str_nisstype; |
| @@ -59,6 +61,7 @@ static int64_t gendata_exec(args_t *); | |||
| 59 | static int64_t solve_exec(args_t *); | 61 | static int64_t solve_exec(args_t *); |
| 60 | static int64_t solve_scramble_exec(args_t *); | 62 | static int64_t solve_scramble_exec(args_t *); |
| 61 | static int64_t countmoves_exec(args_t *); | 63 | static int64_t countmoves_exec(args_t *); |
| 64 | static int64_t comparemoves_exec(args_t *); | ||
| 62 | static int64_t help_exec(args_t *); | 65 | static int64_t help_exec(args_t *); |
| 63 | 66 | ||
| 64 | static int parse_args(int, char **, args_t *); | 67 | static int parse_args(int, char **, args_t *); |
| @@ -69,6 +72,7 @@ static bool set_cube(int, char **, args_t *); | |||
| 69 | static bool set_str_command(int, char **, args_t *); | 72 | static bool set_str_command(int, char **, args_t *); |
| 70 | static bool set_str_cube(int, char **, args_t *); | 73 | static bool set_str_cube(int, char **, args_t *); |
| 71 | static bool set_str_moves(int, char **, args_t *); | 74 | static bool set_str_moves(int, char **, args_t *); |
| 75 | static bool set_str_moves2(int, char **, args_t *); | ||
| 72 | static bool set_str_trans(int, char **, args_t *); | 76 | static bool set_str_trans(int, char **, args_t *); |
| 73 | static bool set_str_solver(int, char **, args_t *); | 77 | static bool set_str_solver(int, char **, args_t *); |
| 74 | static bool set_str_nisstype(int, char **, args_t *); | 78 | static bool set_str_nisstype(int, char **, args_t *); |
| @@ -91,6 +95,7 @@ struct { | |||
| 91 | OPTION(FLAG_COMMAND, 1, set_str_command), | 95 | OPTION(FLAG_COMMAND, 1, set_str_command), |
| 92 | OPTION(FLAG_STR_CUBE, 1, set_str_cube), | 96 | OPTION(FLAG_STR_CUBE, 1, set_str_cube), |
| 93 | OPTION(FLAG_MOVES, 1, set_str_moves), | 97 | OPTION(FLAG_MOVES, 1, set_str_moves), |
| 98 | OPTION(FLAG_MOVES2, 1, set_str_moves2), | ||
| 94 | OPTION(FLAG_TRANS, 1, set_str_trans), | 99 | OPTION(FLAG_TRANS, 1, set_str_trans), |
| 95 | OPTION(FLAG_SOLVER, 1, set_str_solver), | 100 | OPTION(FLAG_SOLVER, 1, set_str_solver), |
| 96 | OPTION(FLAG_NISSTYPE, 1, set_str_nisstype), | 101 | OPTION(FLAG_NISSTYPE, 1, set_str_nisstype), |
| @@ -185,6 +190,13 @@ struct { | |||
| 185 | countmoves_exec | 190 | countmoves_exec |
| 186 | ), | 191 | ), |
| 187 | COMMAND( | 192 | COMMAND( |
| 193 | "compare", | ||
| 194 | "compare " FLAG_MOVES " MOVES " FLAG_MOVES2 " MOVES2", | ||
| 195 | "Compare the two move sequences." | ||
| 196 | INFO_MOVESFORMAT, | ||
| 197 | comparemoves_exec | ||
| 198 | ), | ||
| 199 | COMMAND( | ||
| 188 | "help", | 200 | "help", |
| 189 | "help [" FLAG_COMMAND " COMMAND]", | 201 | "help [" FLAG_COMMAND " COMMAND]", |
| 190 | "If no COMMAND is specified, prints some generic information " | 202 | "If no COMMAND is specified, prints some generic information " |
| @@ -476,6 +488,29 @@ countmoves_exec(args_t *args) | |||
| 476 | } | 488 | } |
| 477 | 489 | ||
| 478 | static int64_t | 490 | static int64_t |
| 491 | comparemoves_exec(args_t *args) | ||
| 492 | { | ||
| 493 | long long cmp; | ||
| 494 | |||
| 495 | if ((cmp = nissy_comparemoves(args->str_moves, args->str_moves2)) < 0) | ||
| 496 | return cmp; | ||
| 497 | |||
| 498 | switch (cmp) { | ||
| 499 | case NISSY_COMPARE_MOVES_EQUAL: | ||
| 500 | printf("The two move sequences are equal\n"); | ||
| 501 | break; | ||
| 502 | case NISSY_COMPARE_MOVES_DIFFERENT: | ||
| 503 | printf("The two move sequences are different\n"); | ||
| 504 | break; | ||
| 505 | default: | ||
| 506 | printf("Error: unknown case\n"); | ||
| 507 | return -1; | ||
| 508 | } | ||
| 509 | |||
| 510 | return 0; | ||
| 511 | } | ||
| 512 | |||
| 513 | static int64_t | ||
| 479 | help_exec(args_t *args) | 514 | help_exec(args_t *args) |
| 480 | { | 515 | { |
| 481 | int i; | 516 | int i; |
| @@ -512,6 +547,7 @@ parse_args(int argc, char **argv, args_t *args) | |||
| 512 | .cube = "", | 547 | .cube = "", |
| 513 | .str_cube = "", | 548 | .str_cube = "", |
| 514 | .str_moves = "", | 549 | .str_moves = "", |
| 550 | .str_moves2 = "", | ||
| 515 | .str_trans = "", | 551 | .str_trans = "", |
| 516 | .str_solver = "", | 552 | .str_solver = "", |
| 517 | .str_nisstype = "", | 553 | .str_nisstype = "", |
| @@ -632,6 +668,14 @@ set_str_moves(int argc, char **argv, args_t *args) | |||
| 632 | } | 668 | } |
| 633 | 669 | ||
| 634 | static bool | 670 | static bool |
| 671 | set_str_moves2(int argc, char **argv, args_t *args) | ||
| 672 | { | ||
| 673 | args->str_moves2 = argv[0]; | ||
| 674 | |||
| 675 | return true; | ||
| 676 | } | ||
| 677 | |||
| 678 | static bool | ||
| 635 | set_str_trans(int argc, char **argv, args_t *args) | 679 | set_str_trans(int argc, char **argv, args_t *args) |
| 636 | { | 680 | { |
| 637 | args->str_trans = argv[0]; | 681 | args->str_trans = argv[0]; |
