AtcoderをWSL2環境で楽しむ方法

技術関連

休みといえども中々ゆっくりすることが難しかったのですが、本日久しぶりに、ゆっくりできる日を得て、windowsマシンに切り替えてからAtcoder環境を整えることができたのでまとめておきます。

Atcoderとは何?

AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

日本最大で最高峰の、つまり世界最大で最高峰の競技プログラミングサイトです。毎週のようにコンテストが開催されております。プログラミング能力というより、数学的アルゴリズム力を競う側面が強いように思います。

私も脳トレ的に参加しておりますが、とても難しいのです。若いパワーが必要のようです。

環境構築

何はともあれ、環境を作ります。

WSL2上でうごくubuntuをインストールしており、VSCodeをwindowsにインストールしている前提とします。またatcoder.jpのアカウントをもっている前提とします。

コンソールにて以下のようにパッケージを追加します

$ sudo aptitude install python3-pip
$ sudo pip install online-judge-tools
$ npm -g install atcoder-cli

インストールの確認です

$ acc -v
2.2.0
$ oj --version
online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.0)

ログインします

$acc login

テンプレート準備

テンプレートを作成します

$ echo $(acc config-dir)
/home/myusername/.config/atcoder-cli-nodejs

# 上記フォルダにテンプレートを作成します
$ cd $(acc config-dir) 
$ mkdir cpp   #テンプレートの名前を指定します。何でもOK
$ cd cpp
$ vim main.cpp # テンプレート作成
$ vim template.json # このテンプレートを使う場合の設定を作成 

$ acc templates 登録したテンプレートの一覧表示

テンプレートは、https://zenn.dev/antyuntyun/articles/atcoder-cpp-template に素晴らしいものが公開されていました。

また、jsonファイルは以下のような感じで。
参照:https://github.com/Tatamo/atcoder-cli

// template.json
  {
    "task": {
      "program": ["main.cpp"],
      "submit": "main.cpp"
    },
    "contest": {
      "static": [["gitignore", ".gitignore"]]
    }
  }

atcoderを楽しむディレクトを作成しておきます。

$ mkdir ~/atcoder

VSCodeの設定

ubuntu上からVSCodeを立ち上げます。

$ code .

拡張機能で、C/C++の拡張機能を入れます

続いてC++を簡単にコンパイルできるようタスクを作成します

// ~/atcoder/.vscode/tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ アクティブなファイルのビルド",
            "command": "/usr/bin/g++",
            "args": [
                "-O2",
                "-std=c++14",
                "-o",
                "${fileDirname}/a.out",
                "${file}",
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "ビルドします"
        }
    ]
}

これで、編集したC++ファイルを、CTRL + SHIFT + Bでビルドできるようになります。

さあ、楽しみましょう

コンテストは以下の形式ですので、このxxxxxの部分を指定します

https://atcoder.jp/contests/xxxxx/  
$ cd ~/atcoder
$ acc new abc102 --template cpp

–template とすると予め用意していたテンプレートを入れることができます。いろいろと引数の取り方によって予めいろいろと準備しておくと便利そうです。

$ acc new abc102 --template cpp
abc102/contest.acc.json created.
Error: ENOENT: no such file or directory, stat '/home/hashimoto/.config/atcoder-cli-nodejs/cpp/gitignore'
"/home/hashimoto/.config/atcoder-cli-nodejs/cpp/gitignore" -> "/home/hashimoto/proj/atcoder/abc102/.gitignore"
create project of AtCoder Beginner Contest 102
? select tasks (Press <space> to select, <a> to toggle all, <i> to invert selection)
❯◉ A Multiple of 2 and N
 ◯ B Maximum Difference
 ◯ C Linear Approximation
 ◯ D Equal Cut

こんな感じで展開されます

$ cd abc102/a

さっそく問題を解きます。解き終わったら、
ビルドします(CTRL+Shift + B)

予めテストが用意されているので、すべて通るかチェックをします

$ ob t

問題なければ、提出です

$ acc s

次の問題に取り掛かります

$ cd ..
$ acc add --template cpp

どの問題を取り組むか選択肢が出てきますので、実施する問題を選びます。

こんな感じ。まとめて置かないと、また迷ってしまうのでメモしておきました。

初心者向けのBootCamp

初心者向けの100問などがあります。こちらで力をつけましょう

AtCoder Problems

コメント

タイトルとURLをコピーしました