AtCoderの作業環境を構築する
既成のものだとatcoder-tools もしくは atcoder-cliの2つがGitHubのStar数多め
比較(個人の感想)
atcoder-tools
👍テスト時の出力が、失敗したときだけなのが良い
👍コマンドのオプションが充実している
❌task別のダウンロードができない
atcoder-cli (& onine-judge-tools)
👍taskを対話的に選択してダウンロードするのが良い
👍タイプ数が少なくて済む(コマンドが短い、オプションがない、)
❌atcoder-cliとonline-judge-toolsの両方でログインする必要がある
❌atcoder-cliはNode.js、online-judge-toolsはPythonにそれぞれ依存している
❌contest_id: 一括のダウンロードとtask別のダウンロードのどちらか一方しかできない(たぶん)
❌atcoder-cli: 設定ファイルを指定できない(ユーザディレクトリ下の指定されたパスに置く必要がある)
❌atcoder-cli: コマンドオプションがない
❌online-judge-tools: testとsubmit機能が親切すぎて自分には合わなかった
方針
atcoder-toolsを呼び出すタスクランナーを書いて、task別のダウンロードに無理やり対応させる
使いたいオプションが出てきたらinvoke tasksに追加する
とりあえず
$ pipenv install --dev atcoder-tools invoke
tasks.py
config/atcodertools.toml
config/template.py
Windowsだとc.run('', pty=True)の部分でコケるかもしれない
hr.icon
今は使っていない
online-judge-tools & atcoder-cli
インストール
$ pipenv install online-judge-tools
仮想環境
グローバル汚染したくないので
サブディレクトリからパスが通った状態になるので問題なく使える
$ npm install -g atcoder-cli
グローバルインストール
サブディレクトリから使えないので、グローバルインストール(設定次第?)
設定
$ acc config default-test-dirname-format test
$ acc config default-template python
acc config-dirにpython/template.jsonとpython/main.pyを作成する
code:Config/python/tempalte.json
{
"task": {
"submit": "main.py"
}
}
code:Config/python/main.py
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
N = map(int, read().split())
ログイン
$ acc login
テスト
$ oj t -c "python3 main.py"
atcoder-cliの選定
コマンドが短いから
AtCoder以外でも使う可能性があるから
設定ファイルをユーザー単位に1つ作る設計なのがいまいち