😊

VSCodeで競技プログラミング環境(C++)を構築してみた

2023/10/22に公開

はじめに

競技プログラミング(AtCoder)向けのC++開発環境を構築したので、自身の備忘として残しておきます。
コンテストを経験していく中で、環境をアップデートしていくことになると思うので、都度記事を更新していく予定です。

概要

今回は、以下の流れで競技プログラミング(AtCoder)向けのC++開発環境を構築します。

  • WSLの設定
  • C++の設定
  • AtCoder向け設定

参考

こちらのブログを参考にさせていただきました。
https://iconcreator.hatenablog.com/entry/2021/09/19/200000#7-ACLを使えるようにする
とても分かりやすかったです。感謝!

WSLの設定

WSL拡張機能のインストール

VSCodeでWSL拡張機能を検索し、インストールします。
VSCodeでWSL拡張機能&インストールを検索
WSL拡張機能を開きます。
WSL拡張機能を開く

Ubuntuのインストール

Ubuntuをインストールします。
VSCode上部のコマンドパレットをクリックすると、インストール可能なOSが表示されます。
今回は、Ubuntu LTSの最新バージョンとします。
LTSとは、Long Term Supportの略で、OSの不具合に対するサポート期間が長いというメリットがあります。
Ubuntuをインストール
ユーザ名を入力します。何でも構いません。
ユーザ名を入力
パスワードを入力します。入力したパスワードは忘れないようにしましょう。
パスワードを設定
インストールが完了しました。
インストール完了

C++の設定

gcc、g++をインストール

gccのインストール有無を確認します。

$ gcc --version

デフォルトではインストールされていないようなので、インストールします。

$ sudo apt install gcc

gccインストール
何やらエラーが発生しました。
gccインストールエラー
パッケージ管理コマンドであるapt-getを更新します。

$ sudo apt-get update

apt-get
下のようなエラーが発生しました。

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++ --version
gccとg++のバージョンを確認することで、無事インストールされていることを確認できました。

$ gcc --version
$ g++ --version

拡張機能をインストールする

C/C++:C/C++開発のためのコード補完やデバッグ機能を提供するアドオン
install c/c++
インストールが完了しました。
WSL上のUbuntuにインストールされていることをご確認ください。
installed c/c++

AtCoder向け設定

ベースとなるディレクトリを作成する

問題を解くときにベースとなるatcoderディレクトリを作成します。
ディレクトリの名前は何でも構いません。

$ mkdir atcoder

Open Folderボタンを押し、atcoderディレクトリを開きます。
open folder
open atcoder directory
atcoderディレクトリを開きました。今後はこのディレクトリをベースに作業を進めていきます。
opened atcoder directory

ACLを使えるようにする

ACLは次のサイトからダウンロードすることができます。
https://atcoder.jp/posts/517
次のコマンドで、WSL上のディレクトリをWindowsのエクスプローラーで開きます。

$ explorer.exe .

開かれたフォルダに、ac-libraryをコピーします。
copy ac-library
WSL上にフォルダがコピーされていることがわかります。
copied ac-library

コンテスト別のフォルダを作る

New Folderを押すことで、フォルダーを作成することができます。
また、New Fileを押すことで、ファイルを作成することができます。
New Folder
下のようにフォルダを作成しました。
Create ABC Folder
参考までに、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