はじめに
久しぶりに競技プログラミング欲が出たのでAtCoderやろーと思ったところ、便利なCLIツールが出ていたのでセットアップをしました。加えて暗黙知なところを少し書き残して置こうと思います。
使用ツール
online-judge-tools
atcoder-cli
ツールのインストール
こちらの製作者様ページに丁寧に解説されています。
@Adaachillさんの記事も非常に参考になります。
やりたいこと
- デフォルトで指定したコンテストの問題すべてをダウンロードしておきたい(面倒なので)
- コンテスト用ディレクトリを作成したらテンプレートを用いたファイルの生成をしておいて欲しい
- なんらかのショートカットキーで実行ファイルを作って欲しい
-
oj t
でテストして欲しい
以上の欲求を解決していこうと思います。
デフォルトで指定したコンテストの問題全てをダウンロードしておきたい。
デフォルト動作の設定を見つつ設定していきます。
atcoder-cliのconfigで設定するだけでOKです。
$ acc config default-task-choice all
- 終わり
コンテスト用のディレクトリを作成したらテンプレートを用いたファイルの生成をしておいて欲しい
テンプレートの設定を見つつ設定していきます。リンク元と内容一緒です。
1.$ cd `acc config-dir`
2. cppという名前のディレクトリを作成します。
$ mkdir cpp
3. 雛形であるmain.cpp
とtemplate.json
ファイルを作ります
{
"task":{
"program":["main.cpp"],
"submit":"main.cpp"
}
}
#include<bits/stdc++.h>
using namespace std;
int main() {
}
-
$ acc templates
を使用して正常に読み込まれているか確認する。 - デフォルトでテンプレートを使用するように変更する
$ acc config default-template cpp
- 終わり
ショートカットキーで実行ファイルを作って欲しい
oj t
でテストしてもらう為には実行ファイルを作る必要があります。codeRunnerとか使ってもいいですが、ビルドタスクでショートカットキーを使い、実行ファイルを作っていきます。
Visual Studio Codeを使ってC++でHello World
- 上のリンクに書いてある通り手順をこなす。
- ⌘+shift+Pでコマンドパレットを開く
- Tasks: Configure Tasksを入力してEnter
- テンプレートからtask.jsonを生成を選択
- 最後にOthers を選択
- 出現した
task.json
ファイルを編集
なお、ここではc++14を使う前提にしています。
設定値の詳細は上記のリンク先で確認してください。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build main.cpp",
"type": "shell",
"command": "g++",
"args": [
"-O2", "-std=c++14", "-o", "${fileDirname}/a.out", "${file}",
],
"group": {
"kind": "build",
"isDefault": true,
}
}
]
}
- ショートカットキーを設定する
VScodeの[Code] -> [基本設定] -> [キーボードショートカット] -> [run build task]で検索 -> お好きなキー割り当てに変更 - 実行ファイルを作りたいファイルと同じディレクトリでビルドタスクを実行する。
- 終わり
oj t
でテストして欲しい
上の実行ファイルをビルドタスクで作るようにしたのであれば、configをいじるだけで終わりです。
- ビルドタスクを作る
-
$ acc config default-test-dirname-format test
をする
ojのテストディレクトリはtestで作成するため、そちらに合わせる。oj側を変えてもOK -
oj t
でテストする - 終わり
まとめ
あとは通常の使用法通りに
$ acc new <contest>
$ cd <contest>
-
main.cpp
にコードを書く - ビルドタスク実行
-
oj t
でテスト -
acc s
で提出
といった流れで簡単にできます。シェルスクリプトも書く必要が無くなって、かなり便利ですね。
環境がノンストレスになったので精進に励みたいと思います。