[Commit] rrsolve/src args.c, 1.1.1.1, 1.2 args.h, 1.1.1.1, 1.2 rrsolve.c, 1.6, 1.7

Carl Worth commit at keithp.com
Thu Jul 3 08:43:13 PDT 2003


Committed by: cworth

Update of /local/src/CVS/rrsolve/src
In directory home.keithp.com:/tmp/cvs-serv15180/src

Modified Files:
	args.c args.h rrsolve.c 
Log Message:
Added support for solving boards in files provided on the command line.
Added a few example boards in the boards directory.

Index: args.c
===================================================================
RCS file: /local/src/CVS/rrsolve/src/args.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- args.c	25 Jun 2003 10:45:06 -0000	1.1.1.1
+++ args.c	3 Jul 2003 14:43:10 -0000	1.2
@@ -35,7 +35,7 @@
 
 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 */
@@ -66,15 +66,10 @@
 	break;
 
     case ARGP_KEY_ARG:
-	argp_usage (state);
-	break;
-
-/*
-    case ARGP_KEY_END:
-	if (state->arg_num < 1)
-	    argp_usage (state);
+	/* Consume all remaining non-option arguments */
+	args->files =  &state->argv[state->next - 1];
+	state->next = state->argc;
 	break;
-*/
 
     default:
 	return ARGP_ERR_UNKNOWN;
@@ -98,6 +93,9 @@
     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);
 }

Index: args.h
===================================================================
RCS file: /local/src/CVS/rrsolve/src/args.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- args.h	25 Jun 2003 10:45:06 -0000	1.1.1.1
+++ args.h	3 Jul 2003 14:43:10 -0000	1.2
@@ -44,6 +44,7 @@
     char *port;
     char *user;
     char *game;
+    char **files;
 } args_t;
 
 error_t

Index: rrsolve.c
===================================================================
RCS file: /local/src/CVS/rrsolve/src/rrsolve.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- rrsolve.c	27 Jun 2003 03:16:49 -0000	1.6
+++ rrsolve.c	3 Jul 2003 14:43:10 -0000	1.7
@@ -74,67 +74,6 @@
 		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[])
 {
@@ -144,24 +83,41 @@
 
     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;
+	}
 
-    rr_client_destroy (client);
+	handle_events (client);
+
+	rr_client_destroy (client);
+    }
 
     return 0;
 }




More information about the Commit mailing list