LoginSignup
2
2

AtCoder用のディレクトリを爆速で用意するコマンド

Last updated at Posted at 2023-09-19

はじめに

AtCoderのABCやARCに参加する際、私は以下のようなディレクトリ構造で臨みます。

atcoder
- abc234
    - a.cpp
    - b.cpp
    - c.cpp
    - ...
- abc235
    - a.cpp
    - b.cpp
    - ...
- ...

しかし、手動でディレクトリを作成し、その中にファイルを作成するのは時間がかかります。また、以下のような共通するコードを手動で貼り付けるのも時間がかかってしまいます。

template.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に以下のようなファイルを用意します。
こちらのテンプレートの内容は任意です。普段お使いいただいてるもので構いません。

template.cpp
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
}

ソースコード

mkcpp
#!/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

使い方

input
mkcpp 任意のコンテスト名

このコマンドを実行することで、任意のコンテスト用のディレクトリが作成され、a.cppやb.cppといったファイルがテンプレート付きで生成されます。また、vscodeを入れている場合は、vscodeでこのディレクトリが開きます。

余談

catの代わりに、teeコマンドとパイプを使うことで、ファイルに書き出すこともできます。

追記

atcoder cliとonline-judge-toolsというものがありまして、めちゃ車輪の再開発をしていました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2