4 solve_problems( tree_t * restrict ptree, unsigned int nposition )
8 unsigned int game_status_save, move, uposition, te1, te0;
9 int iret, success, failure, ianswer, istatus, iresult;
11 success = failure = 0;
13 if ( get_elapsed( &te0 ) < 0 ) { return -1; };
15 for ( uposition = 0; uposition < nposition; uposition++ )
17 istatus = in_CSA( ptree, &record_problems, NULL,
18 ( flag_nomake_move | flag_detect_hang
19 | flag_rejections ) );
20 if ( istatus < 0 ) { return istatus; }
22 if ( istatus > record_next )
24 snprintf( str_message, SIZE_MESSAGE, str_fmt_line,
25 record_problems.lines, str_bad_record );
26 str_error = str_message;
30 /* examine all of answers */
32 for ( ianswer = 0; ianswer < MAX_ANSWER; ianswer++ )
34 str_move = &( record_problems.info.str_move[ianswer][0] );
35 if ( str_move[0] == '\0' ) { break; }
36 if ( ( root_turn && str_move[0] != '-' )
37 || ( ! root_turn && str_move[0] != '+' ) )
39 snprintf( str_message, SIZE_MESSAGE, str_fmt_line,
40 record_problems.lines,
41 "Answers has invalid sign of turn." );
42 str_error = str_message;
46 iret = interpret_CSA_move( ptree, &move, str_move+1 );
47 if ( iret < 0 ) { return iret; }
49 iret = make_move_root( ptree, move, ( flag_detect_hang | flag_rep
50 | flag_nomake_move ) );
51 if ( iret < 0 ) { return iret; }
53 Out( "%s ", str_move );
58 snprintf( str_message, SIZE_MESSAGE, str_fmt_line,
59 record_problems.lines,
60 "No answers in the record" );
61 str_error = str_message;
65 iret = out_board( ptree, stdout, 0, 0 );
66 if ( iret < 0 ) { return iret; }
68 if ( get_elapsed( &time_start ) < 0 ) { return -1; };
69 time_turn_start = time_start;
71 game_status_save = game_status;
72 game_status |= flag_problem | flag_nopeek | flag_thinking;
73 iresult = iterate( ptree, 0 );
74 game_status = game_status_save;
75 if ( iresult < 0 ) { return iresult; }
77 if ( iresult ) { success++; }
80 total_node += ptree->node_searched;
82 str_move = str_CSA_move( last_pv.a[1] );
83 Out( "problem #%d answer=%s -- %s (correct=%d, incorrect=%d)\n\n",
84 success+failure, str_move, iresult ? "correct" : "incorrect",
87 if ( istatus == record_eof ) { break; }
88 if ( istatus == record_misc )
90 iret = record_wind( &record_problems );
91 if ( iret < 0 ) { return iret; }
92 if ( iret == record_eof ) { break; }
96 if ( get_elapsed( &te1 ) < 0 ) { return -1; }
98 Out( "Total Nodes: %" PRIu64 "\n", total_node );
99 Out( "Total Elapsed: %.2f\n", (double)( te1 - te0 ) / 1000.0 );