- ジェネレーターを作る
{problem_dir}/info.toml
にジェネレーターを登録する- (存在する場合)
{problem_dir}/info.toml
に嘘解法を登録する - 手元で動かしてみる
という流れになります({problem_dir}
は例えばsample/aplusb
など)
既に山ほどジェネレーターがあるので、それらを参考にするといい感じに作れます。
大事なこととして、
- 乱数生成器は
#include "random.h"
し、common/random.h
の中のstruct Random
を使う - 乱数の初期化は、
argv[1]
を使う - 大量に出力する場合、iostream高速化をする
を守って欲しいです。sample/aplusb/gen/random.cpp をそのまま使い回すといいです。
現状コーディング規約とかは無いんですが、あまりに大量の競プロテンプレートなどは避けてください。 また、
bits/stdc++.h
を使わない- 警告を無視しない
- 配列を出力するときに、末尾には空白を入れない
- 手元とCIで全く同じケースが生成できる(=環境依存性が無い)
を守らないとCIが通らないです。
手作業で作れるケースの場合(目安: 整数20個ぐらいまで)、直接テキストファイルで用意しても大丈夫です。
- ファイル最後の改行をちゃんと入れているか
- 余分な空白文字が入っていないか
{problem_dir}/gen
に作ったジェネレーターを入れ、
info.toml
に以下のように追記します。これで作ったジェネレーターを登録することができます。
[[tests]]
name = "my_generator.cpp"
number = 2
もう登録されているやつをパクれば大丈夫です。
- 名前はケースの内容を表していると嬉しいです(もちろん出来る限りで)
- ケース数は種類によりますが、特定の嘘解法を落とすタイプなら1か2にしてください
嘘解法が通ってしまうからケースを追加するという場合、{problem_dir}/sol
に嘘解答のコードを入れ、info.toml
に以下のように追記すると嘘解法を登録することが出来ます。
[[solutions]]
name = "wa.cpp"
wrong = true
- 名前は嘘解法の内容を表せていると嬉しいです(もちろん出来る限りで)
- ライセンスに注意してください 他人の提出したコードを勝手に突っ込むとかはダメです
README の How to use に従い、実際にジェネレーターを動かしてみると、うまく動いているかがチェックできます。