UltiMorseのブログ

vscode+wslでC++のAtCoder環境構築

概要

この記事では、vscodeとwslを使用して、C++のAtCoder環境構築の手順をメモしておきます。筆者はAtCoderの環境構築を4回ほどやっており(?)、今回一番いい感じにできたのでメモしておきます。コマンドランナーを使うやつとかいろいろ試しましたが、設定がたびたび飛んで動かなかったり、そもそも余分な拡張を入れたくなかったので。

できるようにすること

  • accとojを使って、問題の取得とテストを簡単にする。
  • vscodeのtasks.jsonのテンプレを少しいじって、cdコマンドを使ったディレクトリ移動をせずに、Ctrl+Shift+Bで開いているcppファイルのビルドとテストを一発でできるようにする。

前提

  1. VS Codeは.exeで落としてくる。https://code.visualstudio.com/
  2. WSLは管理者PowerShellで公式の手順でインストール。https://learn.microsoft.com/ja-jp/windows/wsl/install
  3. wsl拡張機能、C/C++拡張
  4. gcc、g++をaptで
  5. ワークスペースにc_cpp_properties.json、tasks.json、(launch.json、ac-libraryは任意)を置く。
  6. ほかの人の優秀な記事でacc,ojを導入済み。ただし、ログインがセッションの値を直書きでしかできなくなっていたり、コンテスト中止かaccの提出ができなくなっていたり、いろいろと注意が必要。.configにaccの設定があるとか、テストの入っているディレクトリ指定がtestとtestsの違いとか、見るものによってバラバラなので、各自で統一。

template.jsonの設定例

accでテンプレを設定する方法をほかの人が解説しているが、template.jsonはこんな感じ。testなのかtestsにするのか、main.cppという名前で置くのかなどは各自で統一。

// template.json
{
  "task": {
    "program": ["main.cpp"],
    "submit": "main.cpp",
    "testdir": "test",
    "cmd": "oj d -a {url}"
  },
  "contest": {
    "static": []
  }
}
                

tasks.jsonの設定例

// tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build & Test (AtCoder)",
            "type": "shell",
            "command": "g++ -g -O0 -Wall main.cpp -o main.out && oj t -c ./main.out -d test",
            "options": {
                "cwd": "${fileDirname}" 
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": [
                "$gcc"
            ],
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": true
            }
        }
    ]
}
                

まとめ

Ctrl+Shift+Bでcdとかしないでビルドとテストが走るのでめちゃ便利。いろいろなやり方がある感じなので、自分が使いやすい環境を作れるといいですね。

参考書籍の紹介

Amazonで「競技プログラミングの鉄則」を見る

関連記事:AtCoderを始めた件