46
43
#include "inline.h"
48
45
#include "range_solvers_gen_ms_boards.h"
50
struct fc_solve_display_information_context_struct
52
fcs_bool_t debug_iter_state_output;
56
fcs_bool_t parseable_output;
57
fcs_bool_t canonized_order_output;
58
fcs_bool_t display_10_as_t;
59
fcs_bool_t display_parent_iter_num;
60
fcs_bool_t debug_iter_output_on;
61
fcs_bool_t display_moves;
62
fcs_bool_t display_states;
63
int standard_notation;
66
typedef struct fc_solve_display_information_context_struct fc_solve_display_information_context_t;
46
#include "output_to_file.h"
68
48
static void my_iter_handler(
69
49
void * user_instance,
189
169
"-i", "--iter-output",
190
170
"-s", "--state-output",
191
171
"-p", "--parseable-output",
172
"-c", "--canonized-order-output",
173
"-sn", "--standard-notation",
174
"-snx", "--standard-notation-extended",
175
"-sam", "--display-states-and-moves",
192
176
"-t", "--display-10-as-t",
193
177
"-pi", "--display-parent-iter",
270
254
int start_board, end_board, stop_at;
277
int total_num_iters_temp = 0;
279
long long total_num_iters = 0;
281
__int64 total_num_iters = 0;
255
fcs_portable_time_t mytime;
257
fcs_int64_t total_num_iters = 0;
283
258
char * error_string;
261
fcs_bool_t was_total_iterations_limit_per_board_set = FALSE;
286
262
int total_iterations_limit_per_board = -1;
288
264
char * binary_output_filename = NULL;
289
265
fcs_state_string_t state_string;
291
267
binary_output_t binary_output;
268
const char * solutions_directory = NULL;
269
char * solution_filename = NULL;
293
271
int arg = 1, start_from_arg;
301
279
end_board = atoi(argv[arg++]);
302
280
stop_at = atoi(argv[arg++]);
282
init_debug_context(&user.display_context);
304
284
for (;arg < argc; arg++)
306
286
if (!strcmp(argv[arg], "--binary-output-to"))
306
was_total_iterations_limit_per_board_set = TRUE;
326
307
total_iterations_limit_per_board = atoi(argv[arg]);
309
else if (!strcmp(argv[arg], "--solutions-directory"))
314
fprintf(stderr, "--solutions-directory came without an argument!\n");
318
solutions_directory = argv[arg];
319
solution_filename = malloc(strlen(solutions_directory) + 1024);
334
327
start_from_arg = arg;
338
/* for(board_num=1;board_num<100000;board_num++) */
340
gettimeofday(&tv,&tz);
341
printf("Started at %li.%.6li\n",
347
printf("Started at %li.%.6i\n",
329
FCS_PRINT_STARTED_AT(mytime);
354
332
if (binary_output_filename)
444
422
fprintf(stderr, "Unknown option: %s", argv[arg]);
448
(parser_ret == FCS_CMD_LINE_PARAM_WITH_NO_ARG)
425
else if (parser_ret == FCS_CMD_LINE_PARAM_WITH_NO_ARG)
451
427
fprintf(stderr, "The command line parameter \"%s\" requires an argument"
452
428
" and was not supplied with one.\n", argv[arg]);
456
(parser_ret == FCS_CMD_LINE_ERROR_IN_ARG)
431
else if (parser_ret == FCS_CMD_LINE_ERROR_IN_ARG)
459
433
if (error_string != NULL)
473
443
for(board_num=start_board;board_num<=end_board;board_num++)
475
445
get_board(board_num, state_string);
477
freecell_solver_user_limit_iterations(user.instance, total_iterations_limit_per_board);
447
if (was_total_iterations_limit_per_board_set)
449
freecell_solver_user_limit_iterations(user.instance, total_iterations_limit_per_board);
480
453
freecell_solver_user_solve_board(
485
458
if (ret == FCS_STATE_SUSPEND_PROCESS)
488
gettimeofday(&tv,&tz);
489
printf("Intractable Board No. %i at %li.%.6li\n",
496
printf("Intractable Board No. %i at %li.%.6i\n",
460
FCS_PRINT_INTRACTABLE_BOARD(mytime, board_num);
503
462
print_int_wrapper(-1);
505
464
else if (ret == FCS_STATE_FLARES_PLAN_ERROR)
507
const char * error_string;
466
const char * flares_error_string;
468
flares_error_string =
510
469
freecell_solver_user_get_last_error_string(user.instance);
512
printf("Flares Plan: %s\n", error_string);
471
printf("Flares Plan: %s\n", flares_error_string);
516
475
else if (ret == FCS_STATE_IS_NOT_SOLVEABLE)
519
gettimeofday(&tv,&tz);
520
printf("Unsolved Board No. %i at %li.%.6li\n",
527
printf("Unsolved Board No. %i at %li.%.6i\n",
477
FCS_PRINT_UNSOLVED_BOARD(mytime, board_num);
533
478
print_int_wrapper(-2);
537
482
print_int_wrapper(freecell_solver_user_get_num_times(user.instance));
540
total_num_iters_temp += freecell_solver_user_get_num_times(user.instance);
541
if (total_num_iters_temp > 1000000)
485
if (solutions_directory)
543
total_num_iters += total_num_iters_temp;
544
total_num_iters_temp = 0;
488
sprintf(solution_filename, "%s%09d.sol",
489
solutions_directory, board_num
492
output_fh = fopen(solution_filename, "wt");
497
"Could not open output file '%s' for writing!",
503
fc_solve_output_result_to_file(
504
output_fh, user.instance, ret, &user.display_context
511
total_num_iters += freecell_solver_user_get_num_times(user.instance);
546
513
if (board_num % stop_at == 0)
548
total_num_iters += total_num_iters_temp;
549
total_num_iters_temp = 0;
553
gettimeofday(&tv,&tz);
554
printf("Reached Board No. %i at %li.%.6li (total_num_iters=%lli)\n",
564
"Reached Board No. %i at %li.%.6i (total_num_iters=%lli)\n",
566
"Reached Board No. %i at %li.%.6i (total_num_iters=%I64i)\n",
515
FCS_PRINT_REACHED_BOARD(mytime, board_num, total_num_iters);