tqkoh / ac

自分用競プロ環境

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Test generate Tqk Tqk

自分用競プロツール備忘録(575)

  • 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 apython3 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 で書いて、提出されるときに埋め込まれるやつもかっこいいが、ライブラリの中身をその場でいじりたいためこうしている

対応するサイト

  • ✔️ AtCoder
  • ❌ ばちゃ AtCoder Problems
  • ばちゃ AVC
  • ❌ CodeForces

config

ac/config.yml

  • source_path: メインのソースファイルの場所
  • template_path: テンプレートファイルの場所 generate に使われる
  • snippets_path: スニペットが生成される場所 make-snippet
  • compile: コンパイルコマンド
    • {{source}}source_path を展開
  • execute: 実行コマンド 上と合わせる

template の書き方

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 の後につける。

About

自分用競プロ環境


Languages

Language:Python 89.9%Language:C++ 9.5%Language:Shell 0.6%