template-generator icon indicating copy to clipboard operation
template-generator copied to clipboard

generator.py の C++ 版を書く

Open kmyk opened this issue 4 years ago • 3 comments

ところで C++ 版といってもいくつかの選択肢がある (まあ全部やれば済むという話はある)

  1. C++ の標準ライブラリの random
    • cons: 標準的で分かりやすい
    • cons: include が不要なので楽
  2. testlib.h を使う
    • https://github.com/MikeMirzayanov/testlib
    • pros: 作問やったことある人にとっては楽
    • cons: 作問やったことない人にとってはしんどい (どうせ Python の generator.py はすでにあるし、作問してる勢にとっての使いやすさを優先したさはある)
    • cons: 複数ファイルを生成する形式なので oj generate-input subcommand との相性は悪い
    • pros: 複数ファイルを生成する形式なのでファイル名を指定して生成ができる
  3. Library Checker の random.h を勝手に使う
    • https://github.com/yosupo06/library-checker-problems/blob/master/common/random.h
    • 現時点だとあまりうれしさはないが、random.h に「ほとんど直線状の木を生成する機能」「ほとんど同じ要素の数列を生成する機能」など (参考: onlinejudge_random/init.py) が追加されるとうれしくなる cc: @yosupo06

kmyk avatar Apr 09 '20 13:04 kmyk

とりあえず標準ライブラリ random を使うものを書いた

kmyk avatar Apr 10 '20 18:04 kmyk

ccされたので、私見を書いておきます

3. Library Checker の random.h を勝手に使う

  • pros: Library-Checker勢は使いやすいかも

  • pros: 乱数がxoshiro256**なので、testlib(線形合同法)よりいい(乱数の質が問題になることがあるかはわからない)

  • cons: uniform_int_distributionなど標準との互換性がない、意図的なので追加もない

  • pros: 各種ケース生成機能は入れてもいいと思っている

  • cons: common/randomにテストがないので、高度な機能を入れるとバグりがちそう(これは修正しないと)

yosupo06 avatar Apr 11 '20 05:04 yosupo06

中身を把握してる人のコメント助かる とりあえず library-checker-problems 側にも issue を立てておきました https://github.com/yosupo06/library-checker-problems/issues/400

kmyk avatar Apr 11 '20 07:04 kmyk