VSCodeで競技プログラミング環境(C++)を構築してみた
はじめに
競技プログラミング(AtCoder)向けのC++開発環境を構築したので、自身の備忘として残しておきます。
コンテストを経験していく中で、環境をアップデートしていくことになると思うので、都度記事を更新していく予定です。
概要
今回は、以下の流れで競技プログラミング(AtCoder)向けのC++開発環境を構築します。
- WSLの設定
- C++の設定
- AtCoder向け設定
参考
こちらのブログを参考にさせていただきました。
とても分かりやすかったです。感謝!WSLの設定
WSL拡張機能のインストール
VSCodeでWSL拡張機能を検索し、インストールします。
WSL拡張機能を開きます。
Ubuntuのインストール
Ubuntuをインストールします。
VSCode上部のコマンドパレットをクリックすると、インストール可能なOSが表示されます。
今回は、Ubuntu LTSの最新バージョンとします。
LTSとは、Long Term Supportの略で、OSの不具合に対するサポート期間が長いというメリットがあります。
ユーザ名を入力します。何でも構いません。
パスワードを入力します。入力したパスワードは忘れないようにしましょう。
インストールが完了しました。
C++の設定
gcc、g++をインストール
gccのインストール有無を確認します。
$ gcc --version
デフォルトではインストールされていないようなので、インストールします。
$ sudo apt install gcc
何やらエラーが発生しました。
パッケージ管理コマンドであるapt-get
を更新します。
$ sudo apt-get update
下のようなエラーが発生しました。
E: Release file for http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease is not valid yet (invalid for another 20h 18min 53s). Updates for this repository will not be applied.
is not valid yet
とのことですが、恐らく日付関係のエラーではないかと思います。
OSの日付を確認します。
$ date
予想どおりOSの時間が合っておらず、リポジトリからパッケージが取得できなかったようです。
ひとまずOSの再起動を試します。
$ sudo reboot
無事時間が合ったので、作業を進めます。
調べる段階で、便利なパッケージの存在を発見しました。
ビルドに必要なものが一通り揃う便利なパッケージのようです。
インストールします。
$ sudo apt-get install build-essential
gccとg++のバージョンを確認することで、無事インストールされていることを確認できました。
$ gcc --version
$ g++ --version
拡張機能をインストールする
C/C++:C/C++開発のためのコード補完やデバッグ機能を提供するアドオン
インストールが完了しました。
WSL上のUbuntuにインストールされていることをご確認ください。
AtCoder向け設定
ベースとなるディレクトリを作成する
問題を解くときにベースとなるatcoder
ディレクトリを作成します。
ディレクトリの名前は何でも構いません。
$ mkdir atcoder
Open Folderボタンを押し、atcoder
ディレクトリを開きます。
atcoder
ディレクトリを開きました。今後はこのディレクトリをベースに作業を進めていきます。
ACLを使えるようにする
ACLは次のサイトからダウンロードすることができます。
次のコマンドで、WSL上のディレクトリをWindowsのエクスプローラーで開きます。$ explorer.exe .
開かれたフォルダに、ac-libraryをコピーします。
WSL上にフォルダがコピーされていることがわかります。
コンテスト別のフォルダを作る
New Folderを押すことで、フォルダーを作成することができます。
また、New Fileを押すことで、ファイルを作成することができます。
下のようにフォルダを作成しました。
参考までに、a.cpp
の内容を記載しておきます。
マクロ/エイリアスは最低限のみとしています。今後、解ける問題が増えてくると、必要なマクロ/エイリアスが増えていくと思います。
なお、この内容をtemplate.cpp
として置いておいて、問題を解くたびにコピーして使うのもおすすめです。
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using ll = long long;
using P = pair<int,int>;
int main() {
int n;
cin >> n;
int ans = 0;
cout << ans << endl;
return 0;
}
ビルドできるようにする
.vscode
フォルダ配下にtasks.json
を作成します。
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "/usr/bin/g++",
"args": [
"-std=gnu++17",
"-Wall",
"-Wextra",
"-O2",
"-DONLINE_JUDGE",
"-I${workspaceFolder}/ac-library",
"-o",
"'${workspaceFolder}/program'",
"'${file}'",
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
これで、対象のファイルを開いた状態でCtrl+Shift+B
を押すことで、ビルドされ、atcoder
フォルダ直下にprogram
という実行ファイルが作成されるようになります。
そして、次のコマンドを実行することで、プログラムを実行することができます。
$ ./program
一通り実行してみるとわかるのですが、作業はすべてatcoder
フォルダ直下で行います。
コンテスト別フォルダを行ったり来たりする必要はありません。
おわりに
最低限の環境構築ができたので、バリバリ問題を解いていこうと思います!
まずは茶色を抜け出したい!
Discussion