VSCode + online-judge-tools + AtCoder Libraryの環境構築
以前競プロ用のVSCodeの環境構築の記事を書きました。 先日AtCoder Library (ACL)がリリースされたので、それに対応するための記事を書こうと思います。 また、前の記事ではサンプルの自動テスト・提出用のツールをAtCoderとCodeforcesで別のものを紹介しましたが、現在は複数の競技プログラミングサイトに対応していて高機能なonline-judge-toolsを使っているのでそれも書きます。
自分用のメモでもあるので少し雑かもしれませんがおかしいところがあったらtwitterなどで連絡してくださると助かります。 また、VSCode自体のインストールや環境構築がすんでいない方は旧記事も参照してください。
AtCoder Library (ACL)の導入
ここからzipファイルをダウンロードして~/
に展開しておきましょう。
$ ls ~/ac-library/
atcoder document_en document_ja expander.py
VSCodeのパスの設定
補完やシンタックスハイライトが聞くように、.vscode/c_cpp_properties.json
のincludePath
にライブラリのパスを追加します。
{
"configurations": [
{
// ...
"includePath": [
"~/ac-library/**",
"${workspaceFolder}/**"
],
// ...
}
],
}
Code Runnerの設定
settings.json
のCode Runnerのコンパイルオプションに-I ~/ac-library
を追加します。
以下は例です。自分の好きなコンパイルオプションを設定してください。
"code-runner.executorMap": {
"cpp": "cd $dir && g++ -O0 -std=c++17 -Wshadow -Wall -Wno-sign-compare -D_GLIBCXX_DEBUG -include ~/.competitive_local.hpp -I ~/ac-library $fileName && ./a.out",
},
online-judge-toolsの導入
ドキュメントに従ってインストールしてログインなどを済ませておきましょう。
サンプルのダウンロード
以下のような関数を.bashrc
などに書いておくと便利です。
function dl_problem() {
if [ $# -ne 1 ]; then
echo "number of argments should be 1"
return 1
fi
dir_name=${1##*/}
echo $dir_name
mkdir $dir_name
cd $dir_name
oj d $1
}
dl_problem https://atcoder.jp/contests/abc178/tasks/abc178_f
などのように実行することで、現在いる場所に問題名のディレクトリを作ってくれます。
提出ショートカットの設定
.vscode/tasks.json
の設定例です。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "competitiveTestSample",
"type": "shell",
"command": "cd ${fileDirname} && g++ -O0 -std=c++17 -D_GLIBCXX_DEBUG -I ~/ac-library ${fileBasename} && oj t",
"presentation": {
"reveal": "always",
"focus": true,
"panel": "shared",
}
},
{
"label": "competitiveSubmit",
"type": "shell",
"command": "cd ${fileDirname} && CPLUS_INCLUDE_PATH=~/ac-library python3 ~/ac-library/expander.py ${fileBasename} && oj s combined.cpp",
"presentation": {
"reveal": "always",
"focus": true,
"panel": "shared",
}
}
]
}
AtCoder以外のサイトでの提出もふまえて、提出するファイルはACLのexpander.py
を用いて#include
を展開したものにしています。
提出ファイルサイズ制限などに引っかからないように、<atcoder/all>
ではなく使うライブラリだけをインクルードしたほうがいいかもしれません。
こうすることで、keybindings.json
を以下のように設定することでショートカットでテストや提出ができるようになります。
[
{
"key": "ctrl+t",
"command": "workbench.action.tasks.runTask",
"when": "editorTextFocus",
"args": "competitiveTestSample"
},
{
"key": "ctrl+s",
"command": "workbench.action.tasks.runTask",
"when": "editorTextFocus",
"args": "competitiveSubmit"
},
]