Closed Apricot-S closed 2 months ago
条件の変更で
1111444478m
は修正された (未コミット fix/3-miscalculation にコミットした)
代わりに以下の手牌の置換数が誤計算されるようになった
11 (11) 24 77 77 (カッコは死に対子、雀頭と同じ牌のため対子として数えない)と 111 1 24 777 7 にしか分解できていない
111 12 4 777 7 に分解する必要がある
6ed5572225befda946ff715fc43eaf3d93b50273 で面子・ターツ・対子の数が同じときは4枚使いの孤立牌が少ない分解を選ぶようにしたところすべての単体テストが通った。
しかし、Nyanten との比較テストで手牌 7 枚以降のとき不明なエラーが発生するようになった。 test プロファイルでビルドしたところ、Ctrl+C で強制終了するまでテストが終了しなくなった。
しかし、Nyanten との比較テストで手牌 7 枚以降のとき不明なエラーが発生するようになった。 test プロファイルでビルドしたところ、Ctrl+C で強制終了するまでテストが終了しなくなった。
以下のデバッグ用 println! が残っていたせいだと思われる。
println!(
"雀頭: {:?}, 面子数: {}, 搭子数: {}, 対子数: {}, 孤立牌数: {}, 置換数: {} ",
jiangpai, num_mianzi, num_dazi, num_duizi, num_gulipai, temp
);
f15459ae00a71c495b5fd3355ff2dce64f061568 で単体テストはすべて通った。 また、Nyanten との比較テストで 10 枚のときまでが通った。
比較テスト実行時間の参考
Finished `release` profile [optimized] target(s) in 7.97s
Running unittests src/lib.rs (target/release/deps/xiangting-39300c774503dea4)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 115 filtered out; finished in 0.00s
Running tests/correctness.rs (target/release/deps/correctness-5dd416d06c82eabe)
running 1 test
test tests::verify_correctness_10 has been running for over 60 seconds
test tests::verify_correctness_10 ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 9 filtered out; finished in 3065.95s
Running tests/nyanten.rs (target/release/deps/nyanten-c69f4217025dad28)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
副露牌を計算に含めないルールに関してはおそらく修正が完了したが、含めるルールで誤計算することがわかった。
例: 13333m11z [2222m, 4444m] 正しい値: 2、計算結果: 3
先にターツを抜いて計算した後でターツをブロックに含めるかを待ちの有無で判定しているのが原因と思われる。 先にターツの待ちの有無を判定し、待ちがあるときだけターツを抜いて計算すればよいと思われる。
2d331ab553e84fcf4c127d2ec09efca5bb302f5f にて修正した。
Nyanten との比較テストにより発見した例 (数値は置換数)
1111444478m : 正しい値: 3 計算値: 2