コンテンツにスキップ

パソコンを買いました。

競技プログラミング用にパソコンを買ったので、環境構築を全部書きます。

目標はWSL+VSCodeでC++を実行できるようにして、atcoder-cliで提出出来るようにすることです。

Lenovo IdeaPad Slim 170 14型 (AMD) 49,830円
プロセッサー: AMD Ryzen™ 5 7520U (2.80 GHz 最大 4.30 GHz)
初期導入OS: Windows 11 Home 64bit
グラフィックカード: AMD Radeon™ 610M グラフィックス
メモリー: 8 GB LPDDR5-5500MHz (オンボード)
ストレージ1: 512 GB SSD, M.2 PCIe-NVMe Gen4 QLC
ディスプレイ: 14” FHD液晶 (1920 x 1080)
重さ: 1.4kg

パソコンに詳しくないので、5万円以下でなるべく性能がいいらしいものを買いました。(参考)
普段使いは生協で買ったLIFEBOOKなので、重さに驚きました。

地域を設定したりします。

デバイスの名前はLAPTOP-KP-shogoにしました(後から変更できます)。

Microsoftアカウントは既に持っていますが、新規にメールアドレスを取得してみます。名前を姓名別に入力させるフォーム…。

サインインしてPINを設定出来たらあとは全部スキップして完了。

PowerShellを管理者として実行

wsl --install

指示通り再起動する

Restart-Computer

これで再起動できる(手動でいい)。 再起動すると、Ubuntuのターミナルが開かれた状態でusernameを入力するよう指示があるので入力する。次にパスワードを入力するよう指示があるので入力する(入力時、画面に文字が出ない)。もう一回パスワードを入力すると設定完了。 パスワードは簡単にしておいた方がいい。

Microsoft Storeにもありますが、公式ページからインストーラーをダウンロードしている人が多いのでそっちにします。

https://code.visualstudio.com/download

にアクセスして、WindowsのUser Installerのx64をクリック。 VSCodeUserSetup-x64-1.81.1.exeがダウンロードされるので実行。

使用許諾契約書が出るので同意

インストール先を指定できますが、デフォルトの C:\Users\username\AppData\Local\Programs\Microsoft VS Codeにしておきます。

追加タスクを選択できます。せっかくなので全部チェックしておきます。

インストールを押して完了です。

拡張機能の

をインストール

左下の><みたいなのを押して、Connect to WSLを選択

左下が><WSL-Ubuntuになる

これでVSCodeからWSLのファイルを触れるようになる

ターミナルを開いて

shogo314@LAPTOP-KP-shogo:~$

のように表示されている

ターミナルで

sudo apt-get update
sudo apt install build-essential -y
sudo apt install gdb -y

を実行

g++ --version

で正しく表示されたらOK

を入れる

shogo314@LAPTOP-KP-shogo:~$ mkdir AtCoder/ABC/abc211/a -p
shogo314@LAPTOP-KP-shogo:~$ cd AtCoder/ABC/abc211/a
shogo314@LAPTOP-KP-shogo:~/AtCoder/ABC/abc211/a$

VSCodeで/AtCoder/ABC/abc211/を開いてa/にmain.cppを作る

#include <iostream>
int main()
{
int A,B;
std::cin >> A >> B;
std::cout << (float)(A - B) / 3 + B << std::endl;
}

拡張機能が働いていることがわかる。 ファイルを保存して下を実行

$ g++ a/main.cpp
$ ./a.out
300 50
133.333

g++がちゃんと使えている

sudo apt install python3

既にインストールされてる?

$ python3 --version
Python 3.10.12

Pythonをインストールするとpipもついてくるはずだけど、なかったのでインストール。

sudo apt install python3-pip -y

curlは既にインストールされている node.jsはバージョンが結構複雑らしい

https://github.com/nvm-sh/nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

ターミナルを開き直す

nvm install node
npm install -g npm
pip3 install online-judge-tools

pip listだと表示されるがojが認識されない。 ターミナルを開き直せば使えた。

npm install -g atcoder-cli
oj login https://atcoder.jp
acc login

ログイン

$ cd ~/AtCoder/ABC
$ acc new abc210

abc210/aの中にmain.cppを作る

#include <iostream>
int main()
{
int N, A, X, Y;
std::cin >> N >> A >> X >> Y;
std::cout << std::min(N, A) * X + std::max(0, N - A) * Y << std::endl;
}
oj t

が実行できない テストケースのディレクトリがtestsに作られたのにtestを参照している。とりあえずディレクトリ名を変更して実行。 正常に動くことが確認できる。

acc submit main.cpp

提出成功。テストケースのディレクトリ名を変えたせいでテストしてないけど大丈夫?みたいなのが出た。

$ acc config default-test-dirname-format test
$ acc config default-task-choice all

テストケースのディレクトリ名を変更する。 コンテストを選んだときすべての問題のディレクトリが作成されるようにする。

$ acc config-dir

で設定用のディレクトリがわかるので、それを開く。 ~/.config/atcoder-cli-nodejs ここにcppディレクトリを作りtemplate.jsonを置く

{
"task":{
"program": ["main.cpp"],
"submit": "main.cpp"
}
}

main.cppも作る。 テンプレートを適当に作る。

acc config default-template cpp

これで設定したテンプレートが使用できる。

ライブラリを使えるようにする

Section titled “ライブラリを使えるようにする”

仮にac-libraryを使ってみる

$ cd ~
$ mkdir library
$ cd library
$ git clone https://github.com/atcoder/ac-library.git
$ cd ~/AtCoder/ABC
$ acc new abc206

abc206を開く d/main.cppを

#include <bits/stdc++.h>
#include "atcoder/dsu"
int main()
{
using namespace std;
int N;
cin >> N;
vector<int> A(N);
for (int i; i < N; i++)
cin >> A[i];
atcoder::dsu uf(200001);
int ans = 0;
for (int i = 0; i < N / 2; i++)
{
if (!uf.same(A[i], A[N - i - 1]))
{
uf.merge(A[i], A[N - i - 1]);
ans++;
}
}
cout << ans << endl;
}

にする

$ cd d
$ g++ main.cpp -I ~/library/ac-library
$ oj t

ac-libraryをコンパイル出来ている。

これだとAtCoderにしか提出出来ないので、インクルードしているものを自動で展開できるようにする。

$ pip3 install online-judge-verify-helper

これでインストールできる。念のためターミナルを開き直して

$ oj-bundle main.cpp -I ~/library/ac-library > a.cpp

展開したものが標準出力に出るので> a.cppを付けて出力先をファイルにする。 展開したいものは<atcoder/dsu>のように<>で囲んでいると駄目で、""で囲む必要がある。

これまでだとVSCodeの拡張機能が”atcoder/dsu”を認識できておらずエラーが出ていた。 ホームディレクトリに.bash_profileを作り

export CPLUS_INCLUDE_PATH=~/library/ac-library

と書く。2つ以上設定したい場合は:で区切るらしい。‘/home’から書いた方が確実かも。 ここのファイルはbashを起動したときに実行されるのでターミナルを開き直す。

echo $CPLUS_INCLUDE_PATH

で表示されてたら成功。

これでエラーが出なくなった。またg++を実行するときに-I ~/library/ac-libraryを書かずとも動くようになった。 しかし、oj-bundleは書く必要がある。

if(1)
{
}

より

if(1){
}

が好きなのでフォーマッタの設定を変える。 設定を開く。Ctrl+,で開ける。 C_Cpp: Clang_format_fallback StyleがデフォルトだとVisual StudioになっているのでGoogleに変える。

VSCodeを開き直すと急にojやoj-bundleが使えなくなった。acc check-ojは使えるし、動いているのでPATHの問題っぽい。 home/shogo314/.local/bin/oj --versionが動くのでこれを呼べるようにすればよい。 ~/.bash_profileに

export PATH="~/.local/bin:$PATH"

を追加する。

結構大変だった。

ライブラリを作る(執筆中)に続く…