--- /dev/null
+ === === === === === === === === === === === === === === === ===
+|... ... ... ...|... ... ... ... ... ...|... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ...|.bc ... .YS|... ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... .gc|... ... ... ... ...|
+ === ===
+|... .yt|... ... g.. ... ... ... ... ... ... ... ... ... ... ...|
+ === ===
+|... ... ... ... ...|.gs ... ... ... ... ... ... ... ... ... ...|
+
+|... ... .ro|... ... ... ... .ww|... ... ... ... ...|.bo ... ...|
+ === === ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ === === === ===
+|... ... ... ... ... ... ...|... ...|Y..|.rt ... ... ... ... ...|
+
+|... ... ... ... ... ... ...|... ...|... ... ... ... ... ... ...|
+ === === === ===
+|... ... ... ... .yc|... ... ... ... ... ... ... .rc|... ... ...|
+ === ===
+|...|rbt ... ... ... ... ... ... ...|.bs ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... b.. ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... .go|... ... ... ... ... ... ... .gt|...|
+ === ===
+|... ... .rs|... ... ... ... ... ...|.yo ... ... ... ... ... ...|
+ ===
+|... ... ... ...|... ... ... ... ... ... ...|... ... ... ... ...|
+ === === === === === === === === === === === === === === === ===
+
--- /dev/null
+ === === === === === === === === === === === === === === === ===
+|... ... ... ...|... ... ... ... ... ... ... ...|... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ...|.rs ... ...|
+
+|... ... ... ... ... .bo|... ... ... .BT|... ... ... ... ... ...|
+ === ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ ===
+|... ... .gc|... ... ... ...|.rt ... ... ... ... ... ...|.go ...|
+ === === === ===
+|... ... ... ... ... ... ... ... ... ... ... .yc|... ... ... ...|
+ === === ===
+|...|.ys ... ... ... ... ...|... ...|... ... ... ... ... ... ...|
+
+|... ... ... ... ... ... ...|... ...|... ... ... ... ... ... ...|
+ === === ===
+|... ... ... ...|.yt ... ... ... ... ... ... ... .bs|y.. ... ...|
+ === === ===
+|... ... ... ... ... ...|Bbc ... ... ... ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ === ===
+|... ... ... ... ... ... ... .ww|...|.yo ... ... ... ... ... ...|
+ ===
+|... .ro|... ... ... ... ... ... ... ... ... ... ... ...|ggt ...|
+ ===
+|... ... ... .gs|... ... ... ... ... ... ... rrc|... ... ... ...|
+ === ===
+|... ... ... ... ...|... ... ... ... ... ... ... ... ...|... ...|
+ === === === === === === === === === === === === === === === ===
--- /dev/null
+ === === === === === === === === === === === === === === === ===
+|... ... ... ...|r.. ... ... ... ... ... ... ...|... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ...|.rs Y.. ...|
+
+|... ... ... ... ... .bo|... ... ... .bt|... ... ... ... ... ...|
+ === ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ ===
+|... ... .gc|... ... ... ...|.rt ... ... ... ... ... ...|.go ...|
+ === === === ===
+|... ... ... ... ... ... ... ... ... ... ... .yc|... ... ... ...|
+ === === ===
+|...|.YS ... ... ... ... ...|... ...|... ... ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ...|... ...|... ... ...|.ww ... ... ...|
+ === === === ===
+|... .yo|... ... ...|bbs ... ... ... ...|.bc ... ... ... ... ...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|
+ === ===
+|... ... ... ... ... ... ... ... ... .yt|... ... ... ... ... ...|
+ === ===
+|... ... ... ... ... ... .rc|... ... ... ... ... ... ... .gs|...|
+ ===
+|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... g..|
+ ===
+|... ...|.gt ... ... ... ... ... ... ... ... ... ...|.ro ... ...|
+ ===
+|... ... ... ... ... ...|... ... ... ... ...|... ... ... ... ...|
+ === === === === === === === === === === === === === === === ===
static char doc[] = "rrsolve - Ricochet Robot solver";
-static char args_doc[] = "";
+static char args_doc[] = "[file ...]";
static struct argp_option options[] = {
/* name, key, arg, flags, doc */
break;
case ARGP_KEY_ARG:
- argp_usage (state);
+ /* Consume all remaining non-option arguments */
+ args->files = &state->argv[state->next - 1];
+ state->next = state->argc;
break;
-/*
- case ARGP_KEY_END:
- if (state->arg_num < 1)
- argp_usage (state);
- break;
-*/
-
default:
return ARGP_ERR_UNKNOWN;
}
args->game = getenv ("RR_GAME");
if (args->game == NULL)
args->game = ARGS_GAME_DEFAULT;
+ args->files = NULL;
- return argp_parse (&argp, argc, argv, 0, 0, args);
+ return argp_parse (&argp, argc, argv,
+ ARGP_LONG_ONLY,
+ NULL, args);
}
rrs_state_t solution_state,
rrs_solution_t *solution);
-char TOUGH[] = "\n"
-" === === === === === === === === === === === === === === === === \n"
-"|... ... ... ...|r.. ... ... ... ... ... ... ...|... ... ... ...|\n"
-" === \n"
-"|... ... ... ... ... ... ... ... ... ... ... ... ...|.rs Y.. ...|\n"
-" \n"
-"|... ... ... ... ... .bo|... ... ... .bt|... ... ... ... ... ...|\n"
-" === === \n"
-"|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|\n"
-" === \n"
-"|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|\n"
-" === \n"
-"|... ... .gc|... ... ... ...|.rt ... ... ... ... ... ...|.go ...|\n"
-" === === === === \n"
-"|... ... ... ... ... ... ... ... ... ... ... .yc|... ... ... ...|\n"
-" === === === \n"
-"|...|.YS ... ... ... ... ...|... ...|... ... ... ... ... ... ...|\n"
-" === \n"
-"|... ... ... ... ... ... ...|... ...|... ... ...|.ww ... ... ...|\n"
-" === === === === \n"
-"|... .yo|... ... ...|bbs ... ... ... ...|.bc ... ... ... ... ...|\n"
-" === \n"
-"|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...|\n"
-" === === \n"
-"|... ... ... ... ... ... ... ... ... .yt|... ... ... ... ... ...|\n"
-" === === \n"
-"|... ... ... ... ... ... .rc|... ... ... ... ... ... ... .gs|...|\n"
-" === \n"
-"|... ... ... ... ... ... ... ... ... ... ... ... ... ... ... g..|\n"
-" === \n"
-"|... ...|.gt ... ... ... ... ... ... ... ... ... ...|.ro ... ...|\n"
-" === \n"
-"|... ... ... ... ... ...|... ... ... ... ...|... ... ... ... ...|\n"
-" === === === === === === === === === === === === === === === === ";
-/*
-Move #1 generated 11 new states.
-Move #2 generated 59 new states.
-Move #3 generated 216 new states.
-Move #4 generated 640 new states.
-Move #5 generated 1701 new states.
-Move #6 generated 4239 new states.
-Move #7 generated 10041 new states.
-Move #8 generated 22678 new states.
-Move #9 generated 49103 new states.
-Move #10 generated 102154 new states.
-Move #11 generated 204086 new states.
-Move #12 generated 391534 new states.
-Move #13 generated 722808 new states.
-Move #14 generated 1285932 new states.
-Move #15 generated 2204971 new states.
-Found solution of 16 moves in 3694.8 seconds.
-Traced solution in 0.052438 seconds.
-Solution (16 moves):
- Move #0: yellow east, south, west
-Move #3: green south, west, north
-Move #6: blue east, north, west, south
-Move #10: yellow south, east, south
-Move #13: green west
-Move #14: yellow north
-*/
-
int
main (int argc, char *argv[])
{
args_parse (&args, argc, argv);
- client = rr_client_create (args.host, args.port, args.user);
- if (client == NULL) {
- fprintf (stderr, "Failed connecting to %s:%s as %s\n",
- args.host, args.port, args.user);
- return 1;
- }
+ if (args.files) {
+ int i;
+ rr_board_t *board;
+ rrs_solution_t solution;
- status = rr_client_join (client, GAME);
- if (status == RR_STATUS_NO_GAME)
- status = rr_client_new (client, GAME);
- if (status) {
- fprintf (stderr, "Error joining or creating game: %s\n", rr_status_str (status));
- return 1;
- }
+ for (i = 0; args.files[i]; i++) {
+ board = rr_board_create_from_file (args.files[i]);
+ if (board == NULL)
+ continue;
+ rrs_solution_init (&solution);
+ solve_board (board, &solution);
+ rrs_solution_print (&solution);
+ rrs_solution_fini (&solution);
+ rr_board_destroy (board);
+ }
+ } else {
+ client = rr_client_create (args.host, args.port, args.user);
+ if (client == NULL) {
+ fprintf (stderr, "Failed connecting to %s:%s as %s\n",
+ args.host, args.port, args.user);
+ return 1;
+ }
- handle_events (client);
+ status = rr_client_join (client, GAME);
+ if (status == RR_STATUS_NO_GAME)
+ status = rr_client_new (client, GAME);
+ if (status) {
+ fprintf (stderr, "Error joining or creating game: %s\n", rr_status_str (status));
+ return 1;
+ }
+
+ handle_events (client);
- rr_client_destroy (client);
+ rr_client_destroy (client);
+ }
return 0;
}