このリポジトリでは、AtCoderやCodeforcesなどの競技プログラミング用の環境を提供します。
VS Code Dev Containersを利用することで、WindowsやMacなどに関わらず、統一された環境で競プロを行えます。
oj、accを利用したラッパーコマンドcompeteを実装しており、コードのテストや提出をコマンド一つでできます。
デフォルトでRust、C++、Pythonの基礎環境が構築されますが、設定ファイルを調整することで任意の言語に置き換えることができます。
このリポジトリをローカルにクローン、もしくはフォークします。
$ git clone https://github.com/Kawa0x5F/CompetitiveProgramming-DevContainer.gitログイン情報などを格納するための.envファイルと、Rustのプロジェクト情報を持つためのsetting.jsonファイル、それを格納するための.vscodeディレクトリを作成します。
$ cp .devcontainer/.env.example .devcontainer/.env
$ mkdir .vscode
$ cp .devcontainer/setting.sample.json .vscode/setting.json作成した.devcontainer/.envファイルを開き、ログイン情報・セッション情報を入力してください。
# AtCoder
ATCODER_USERNAME="YOUR_ATCODER_USERNAME"
ATCODER_PASSWORD="YOUR_ATCODER_PASSWORD"
# ブラウザでAtCoderにログイン後、開発者ツールでCookieからREVEL_SESSIONの値をコピー
ATCODER_REVEL_SESSION="YOUR_REVEL_SESSION_COOKIE"
# Codeforces
CODEFORCES_USERNAME="YOUR_CODEFORCES_USERNAME"
CODEFORCES_PASSWORD="YOUR_CODEFORCES_PASSWORD"```- VS Codeでこのリポジトリのフォルダを開きます。
- 左下の
><アイコンをクリックし、表示されたメニューから「Reopen in Container」を選択します。 - 初回起動時はDockerイメージのビルドが実行されるため、起動に数分かかります。ビルド完了後、環境が自動的にセットアップされ、
.envファイルの情報に基づいてログイン処理が実行されます。
この環境では、ターミナルからcompeteコマンドが利用できます。
新しいコンテストのディレクトリとテンプレートファイルを自動で作成します。コンテストIDからAtCoder (ABC/ARC/AGC/AHC) やCodeforcesを自動判別します。
# AtCoderのコンテスト準備
compete new abc365
compete new arc180
# Codeforcesのコンテスト準備
compete new 1985コンテストがオープンになってからでないとうまく正常に動作しない点に注意してください。
カレントディレクトリの問題に対するテストを実行します。 サンプルのテストケースがなかった場合、自動でダウンロードします。
# abc365/a ディレクトリに移動してから実行
cd solutions/AtCoder/ABC/abc365/a
# main.rs を自動で見つけてテストする
compete test
# ファイルを明示的に指定してテストする
compete test main.cppファイルを指定して解答を提出します。提出前に自動でテストが実行されます。
# main.rs を自動で見つけてテストし、提出する
compete submit
# テストをスキップして強制的に提出する
compete submit --force main.rs設定ファイルconfig.defaultを簡単に表示・編集できます。
# 設定内容を表示
compete config view
# エディタで設定ファイルを開く
compete config edit.
├── .devcontainer/
│ ├── Dockerfile # Dev Containerの環境定義
│ ├── devcontainer.json # Dev Containerの設定
│ └── .env # 環境変数ファイル(Git管理外)
├── config.default # competeコマンドや各ツールの設定ファイル
├── scripts/ # competeコマンドのスクリプト群
├── src/ # 解答コードを保存するディレクトリ
└── templates/ # 各言語・サイトのテンプレートファイル
config.defaultファイル(またはcompete config edit)を編集することで、解答を保存するディレクトリ名や、テスト時に優先する言語などを変更できます。
templates/ディレクトリ内の各テンプレート(acc/やcf/など)を編集することで、compete newで生成されるファイルの雛形を自由に変更できます。