はじめに
AtCoderのABCやARCに参加する際、私は以下のようなディレクトリ構造で臨みます。
atcoder
- abc234
- a.cpp
- b.cpp
- c.cpp
- ...
- abc235
- a.cpp
- b.cpp
- ...
- ...
しかし、手動でディレクトリを作成し、その中にファイルを作成するのは時間がかかります。また、以下のような共通するコードを手動で貼り付けるのも時間がかかってしまいます。
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
int main() {
}
コンテスト開始までに時間があればこれでもいいかもしれませんが、開始まで残り1分といった状況では、すべてやるのは難しいですよね。
今回は、Atcoder用のディレクトリを作成して開くことができるシェルスクリプトについて解説します。
注意
この記事ではMacOSを使用しています。また、shellはBashを使用しています。
下準備
~/Documents/atcoder
に以下のようなファイルを用意します。
こちらのテンプレートの内容は任意です。普段お使いいただいてるもので構いません。
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
int main() {
}
ソースコード
#!/bin/bash
DIR=~/Documents/cpp
files=(a.cpp b.cpp c.cpp d.cpp e.cpp f.cpp)
if [ $# -ne 1 ];then
echo "Usage: mkcpp (ContestName)";
exit 1
fi
if [ -d $DIR/$1 ]; then
echo "$1 exists.";
exit 1
fi
mkdir $DIR/$1
for i in "${files[@]}"
do
cat $DIR/template.cpp > $DIR/$1/$i
done
echo "Success!"
code $DIR/$1
こちらをホームディレクトリなどの任意のディレクトリに配置し、PATHを通します。
PATHの通し方についてはこちら
https://zenn.dev/d0ne1s/articles/1f435463551ac2
使い方
mkcpp 任意のコンテスト名
このコマンドを実行することで、任意のコンテスト用のディレクトリが作成され、a.cppやb.cppといったファイルがテンプレート付きで生成されます。また、vscodeを入れている場合は、vscodeでこのディレクトリが開きます。
余談
catの代わりに、tee
コマンドとパイプを使うことで、ファイルに書き出すこともできます。
追記
atcoder cliとonline-judge-toolsというものがありまして、めちゃ車輪の再開発をしていました。