template-generator
template-generator copied to clipboard
generator.py の C++ 版を書く
僕は雑魚すぎてPython全然書けないんですよね...
— こるとん (@kyort0n) April 9, 2020
多分少なからず需要はあると思います
ところで C++ 版といってもいくつかの選択肢がある (まあ全部やれば済むという話はある)
- C++ の標準ライブラリの
random
- cons: 標準的で分かりやすい
- cons: include が不要なので楽
-
testlib.h
を使う- https://github.com/MikeMirzayanov/testlib
- pros: 作問やったことある人にとっては楽
- cons: 作問やったことない人にとってはしんどい (どうせ Python の
generator.py
はすでにあるし、作問してる勢にとっての使いやすさを優先したさはある) - cons: 複数ファイルを生成する形式なので
oj generate-input
subcommand との相性は悪い - pros: 複数ファイルを生成する形式なのでファイル名を指定して生成ができる
- Library Checker の
random.h
を勝手に使う- https://github.com/yosupo06/library-checker-problems/blob/master/common/random.h
- 現時点だとあまりうれしさはないが、
random.h
に「ほとんど直線状の木を生成する機能」「ほとんど同じ要素の数列を生成する機能」など (参考: onlinejudge_random/init.py) が追加されるとうれしくなる cc: @yosupo06
とりあえず標準ライブラリ random
を使うものを書いた
ccされたので、私見を書いておきます
3. Library Checker の
random.h
を勝手に使う
-
pros: Library-Checker勢は使いやすいかも
-
pros: 乱数がxoshiro256**なので、testlib(線形合同法)よりいい(乱数の質が問題になることがあるかはわからない)
-
cons: uniform_int_distributionなど標準
との互換性がない、意図的なので追加もない -
pros: 各種ケース生成機能は入れてもいいと思っている
-
cons: common/randomにテストがないので、高度な機能を入れるとバグりがちそう(これは修正しないと)
中身を把握してる人のコメント助かる とりあえず library-checker-problems 側にも issue を立てておきました https://github.com/yosupo06/library-checker-problems/issues/400