ナンプレ(数独)問題作成プログラム その11
solve.c
/** 候補を減らす関数タイプ */ typedef int (*solver_t)(numpl_array *); /** 関数の数 */ static const int max_solvers = 5; /** 関数 */ static solver_t solvers[] = { kill_single, kill_hidden_single, kill_locked_candidate, kill_tuple, kill_fish, NULL}; /** * 人間がナンプレを解くときの手法を使って解く * どの手法を使ったかをinfo に記録する。 * @param array ナンプレ盤面配列 * @param info どの解法を使ったかを記録する * @return 1 解けた * @return 0 解けていない * @return -1 矛盾が発生していて解けない */ int solve(numpl_array * array, solve_info * info) { info->ks_count = 0; info->kh_count = 0; info->kt_count = 0; info->kl_count = 0; info->sf_count = 0; info->fx_count = 0; info->solved = 0; int c = 0; do { for (int i = 0; i < max_solvers; i++) { if (solvers[i] == NULL) { break; } c = solvers[i](array); if (c > 0) { set_info(info, c, solvers[i]); break; } if (c < 0) { break; } } } while (c > 0); if (c < 0) { info->solved = 0; } else { if (is_solved(array)) { info->solved = 1; } else { info->solved = 0; } } info->fx_count = count_fixed(array); if (c < 0) { return -1; } else { return info->solved; } }
ここには挙げていないset_info の中身が美しくない。make して実行する。locked candidate は大丈夫。
./solve "5 71 3 2 4 9 91 8 6 19 1 5 65 4 8 29 8 6 4 4 16 8" solved 547196823 628345719 391278564 756419382 214783956 983652471 165834297 832967145 479521638 kill_single:213 kill_hidden:18 kill_locked:1 kill_tuple :0 max_tuple :0 max_hidden :0 swordfish :0 max_fish :0 fx_count :28 solved :1
次は tuple
./solve " 24 1 7 3 6 4 3 1 74 8 6 5 2 98 2 9 9 3 4 826 95 " 1 31 31 3 56 6[2][4] 5 56 8 8 7 97 89 [1][9][7][8][3][2][6][5][4] [4][3] 56 56 5 [1][2][7] 8 9 89 23 31 3 123 [7][4][9][8] 5 [6] 5 23 2 3 3 3 23 6 6[9][1] 5 564 4 5 8 8 7 7 7 7 3 3 6[5][1] 6[2][4][9][8] 7 7 1 1 3 1 3 564 6 56[2] 6[8]4 [9] 7 7 7 [9][1][3] 5 [4] 5 [8][2][6] 7 7 2 2 1 1 1 64 6 6[3] 6[9][5]4 78 8 8 7 kill_single:170 kill_hidden:9 kill_locked:3 kill_tuple :0 max_tuple :0 max_hidden :0 swordfish :0 max_fish :0 fx_count :27 solved :0
ダメじゃん。動いているプログラムを書き直しているだけなんだけど、動作がおかしい。こういうことは珍しくないのだ。しかし1行目にNaked Pair があるからわかりやすいぞ。でも日曜だからデバッグはまたあとでやろう。
ディスガイア4
昨日今日とふと思い出してディスガイア4をやっていた。なんで急にディスガイアを思い出したのか考えてみたら、これは選挙がテーマになっていたのだな。バールソードを1から逆海賊までアイテム界で鍛え上げるだけの作業ですよ。なんという人生の無駄でしょうか。まあ、無駄でないことなどそう多くはないけど。
- 出版社/メーカー: 日本一ソフトウェア
- 発売日: 2011/02/24
- メディア: Video Game
- 購入: 3人 クリック: 38回
- この商品を含むブログ (23件) を見る
魔界戦記ディスガイア5 初回限定版 初回限定特典 ゲーム内で使用できるプロダクトコード「着せ替えセラフィーヌ(バニーガールVer.)」 付
- 出版社/メーカー: 日本一ソフトウェア
- 発売日: 2015/03/26
- メディア: Video Game
- この商品を含むブログ (3件) を見る