8 #include <boost/program_options.hpp>
14 namespace po = boost::program_options;
17 void analyze_root(
const NumEffectState& state,
const vector<Move>&
moves,
int move_number);
18 int main(
int argc,
char **argv)
20 po::options_description options;
24 (
"filename,f", po::value<std::string>(&filename),
25 "specify .kif or .ki2 file to be analyzed")
26 (
"start,s", po::value<size_t>(&start)->default_value(35),
28 (
"end,e", po::value<size_t>(&end)->default_value(350),
30 (
"help,h",
"Show help message");
34 po::store(po::parse_command_line(argc, argv, options), vm);
36 if (vm.count(
"help")) {
37 std::cerr <<
"Usage: " << argv[0] <<
" [options] files" << std::endl;
38 std::cout << options << std::endl;
42 catch (std::exception& e)
44 std::cerr <<
"error in parsing options" << std::endl
45 << e.what() << std::endl;
46 std::cerr << options << std::endl;
55 if (filename.find(
".kif") == filename.size()-4)
57 KakinokiFile file(filename);
58 moves = file.getRecord().getMoves();
59 state = file.getRecord().getInitialState();
61 else if (filename.find(
".ki2") == filename.size()-4)
63 Ki2File file(filename);
64 moves = file.getRecord().getMoves();
65 state = file.getRecord().getInitialState();
68 catch (KakinokiIOError&)
73 for (
size_t i=0; i<moves.size(); ++i)
75 state.makeMove(moves[i]);
78 std::cerr << i+1 <<
"\n";
87 std::ostringstream ret;
88 ret <<
"[(" << move_number <<
") ";
92 for (
int i=0; i<move_number-1; ++i)
95 s.makeMove(moves[move_number-1]);
103 std::cout << ret.str() << std::endl;