- tqk の競プロツール
- 全ての人間用は oj などが上位互換
- ツールというかコンテスト中の作業全部をするディレクトリ
- wsl Ubuntu 18.04 LTS
このフォルダで
pip3 install -r requirements.txt- タリンかも
このフォルダで
python3 ac/ac.pyやりたいこと
- 無駄な作業を消す
- コンテスト中に短いコマンドで、入力部分のソースコード(
int n; cin>>n;...のこと)生成、サンプルテスト、提出などの操作をできるようにする - コンテスト中にソースファイルを 1 個だけ使いまわす: デフォルトは
example.cpp(実行すると生成される)- ファイル移動が面倒なため
- 各コマンドでは整形してから処理する:
- 整形方法は ac/command/sub/format.py を編集すれば変えられる
- 今の状態:
//sub-BOFから//sub-EOFまでを抜き出す- 提出ページの一番上に summary を表示する
- テンプレートが邪魔なため
- solve 部分のみを切り取り最上部に表示
- ライブラリを貼った部分は名前だけ表示
- 短く書く:
sub aでpython3 ac/ac.py submit aなど
source init.sh- コンテストに出るとき、この順に実行する
- p は指定しなければ前回実行時の問題番号が使われる(全コマンド共通)
なので基本generateのみで p を指定する - 実装済み: ✔️、未実装: ❌
-
✔️
init [url]: コンテストの準備をする
例:pre abc130- コンテスト url の代わりにコンテスト id でもいい
- まだ始まっていないコンテストなら始まるまで待ってから
- テストケースのダウンロードなどをする
- 問題 a の入力部分を生成する(
int n; cin>>n; ...のこと)
-
(ここで問題を解きメインのソースコード(今は
example.cpp)を編集) -
✔️
submit [p]: 整形して、問題 p のサンプルチェックをして、AC なら提出する
例sub- 提出したら消去して
generate (次の問題)する -c: ステータスにかかわらず、yn で提出するか選択(正答が複数ある問題など)-f: コンパイル、サンプルチェックをせずに提出
- 提出したら消去して
-
✔️
generate [p]: 問題 p の入力部分を生成する
例:g b- 問題のページから入力方法などを推測する。
- Yes/No で答える場合などの答えの文字列、mod を取る問題の mod なども推測して埋め込む。詳しくは template の書き方
- 解く順番を変える場合/提出したものが WA で後から戻る場合に使う
- WA だったことがすぐわかったら、メインのソースを編集しているエディタで Ctrl+Z をして復元する
-
次の問題を解き
submitに戻る。
その他のコマンド
- ✔️
copy: ソースコードを整形して、クリップボードにコピー(submit未対応のコンテストサイトで) - ✔️
clear: solve 内と入力部分を消す - ✔️
compile: 整形してコンパイルする - ✔️
run [n] [p]: 実行する- n が指定なし: 標準入力から入力
- n == 0: クリップボードから入力
- n >= 1: (問題 p の) n 番目のテストケースを入力
- ➖
case: テストケースを操作する- ✔️
copy [n]: n 番目のテストケースをクリップボードにコピー - ❌
add [n]: n 番目のテストケースを作成/変更- 標準入力から input output を入力する
- 特別な文字を入力したら変更しない など
- ❌
remove [n]: n 番目のテストケースを削除
- ✔️
- ✔️
make-snippets: ライブラリからソースコードを持ってきてスニペット化する(Visual Studio 2019 用)- (タイトル)[tab] と入力するとライブラリの中身が貼られる
- #include で書いて、提出されるときに埋め込まれるやつもかっこいいが、ライブラリの中身をその場でいじりたいためこうしている
- (タイトル)[tab] と入力するとライブラリの中身が貼られる
- ✔️ AtCoder
- ❌ ばちゃ AtCoder Problems
- ❌
ばちゃ AVC - ❌ CodeForces
ac/config.yml
source_path: メインのソースファイルの場所template_path: テンプレートファイルの場所generateに使われるsnippets_path: スニペットが生成される場所make-snippetにcompile: コンパイルコマンド{{source}}でsource_pathを展開
execute: 実行コマンド 上と合わせる
example_template.cpp の下の方を見て
{% if [v] %}のみ、({% else %}のみ、){% endif %}のみからなる行で、v が空でないかで場合分けできる{{ [v] }}で、v の中身を展開できる- 使える変数(全て文字列):
prediction_success: 入力部分の推測が失敗したなら空、そうでないなら空でないinput_part: 問題から推測した入力部分の C++ コード。formal_arguments: solve の引数定義部分の C++ コード。lint n, vector<lint> aなどmod: 問題から推測した mod の値。998244353などyes_str: 問題から推測した Yes に対応する答え。Possibleなどno_str: 問題から推測した No に対応する答え。Impossibleなどtest_generate: テスト用、input_partの後につける。
- 使える変数(全て文字列):