- 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
の後につける。
- 使える変数(全て文字列):