パソコンを買いました。
競技プログラミング用にパソコンを買ったので、環境構築を全部書きます。
目標は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なので、重さに驚きました。
パソコンのセットアップ
Section titled “パソコンのセットアップ”地域を設定したりします。
デバイスの名前はLAPTOP-KP-shogoにしました(後から変更できます)。
Microsoftアカウントは既に持っていますが、新規にメールアドレスを取得してみます。名前を姓名別に入力させるフォーム…。
サインインしてPINを設定出来たらあとは全部スキップして完了。
WSLをインストール
Section titled “WSLをインストール”PowerShellを管理者として実行
wsl --install指示通り再起動する
Restart-Computerこれで再起動できる(手動でいい)。 再起動すると、Ubuntuのターミナルが開かれた状態でusernameを入力するよう指示があるので入力する。次にパスワードを入力するよう指示があるので入力する(入力時、画面に文字が出ない)。もう一回パスワードを入力すると設定完了。 パスワードは簡単にしておいた方がいい。
VS Codeをインストール
Section titled “VS Codeをインストール”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にしておきます。
追加タスクを選択できます。せっかくなので全部チェックしておきます。
インストールを押して完了です。
VS Codeに拡張機能を追加
Section titled “VS Codeに拡張機能を追加”拡張機能の
をインストール
VSCodeとWSLの連携をとる?
Section titled “VSCodeとWSLの連携をとる?”左下の><みたいなのを押して、Connect to WSLを選択
左下が><WSL-Ubuntuになる
これでVSCodeからWSLのファイルを触れるようになる
ターミナルを開いて
shogo314@LAPTOP-KP-shogo:~$のように表示されている
コンパイラをインストール
Section titled “コンパイラをインストール”ターミナルで
sudo apt-get updatesudo apt install build-essential -ysudo apt install gdb -yを実行
g++ --versionで正しく表示されたらOK
VS Codeに拡張機能を追加2
Section titled “VS Codeに拡張機能を追加2”を入れる
shogo314@LAPTOP-KP-shogo:~$ mkdir AtCoder/ABC/abc211/a -pshogo314@LAPTOP-KP-shogo:~$ cd AtCoder/ABC/abc211/ashogo314@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.out300 50133.333g++がちゃんと使えている
atcoder-cliをインストール
Section titled “atcoder-cliをインストール”Python3をインストール
Section titled “Python3をインストール”sudo apt install python3既にインストールされてる?
$ python3 --versionPython 3.10.12Pythonをインストールするとpipもついてくるはずだけど、なかったのでインストール。
pip3をインストール
Section titled “pip3をインストール”sudo apt install python3-pip -yNode.jsをインストール
Section titled “Node.jsをインストール”curlは既にインストールされている node.jsはバージョンが結構複雑らしい
Node Version Managerをインストール
Section titled “Node Version Managerをインストール”curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bashNode.jsをインストール
Section titled “Node.jsをインストール”ターミナルを開き直す
nvm install nodenpm install -g npmonline-judge-toolsをインストール
Section titled “online-judge-toolsをインストール”pip3 install online-judge-toolspip listだと表示されるがojが認識されない。 ターミナルを開き直せば使えた。
atcoder-cliをインストール
Section titled “atcoder-cliをインストール”npm install -g atcoder-clioj login https://atcoder.jpacc loginログイン
$ cd ~/AtCoder/ABC$ acc new abc210abc210/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提出成功。テストケースのディレクトリ名を変えたせいでテストしてないけど大丈夫?みたいなのが出た。
atcoder-cliの設定
Section titled “atcoder-cliの設定”$ 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 abc206abc206を開く
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 tac-libraryをコンパイル出来ている。
verification-helperをインストール
Section titled “verification-helperをインストール”これだとAtCoderにしか提出出来ないので、インクルードしているものを自動で展開できるようにする。
$ pip3 install online-judge-verify-helperこれでインストールできる。念のためターミナルを開き直して
$ oj-bundle main.cpp -I ~/library/ac-library > a.cpp展開したものが標準出力に出るので> a.cppを付けて出力先をファイルにする。
展開したいものは<atcoder/dsu>のように<>で囲んでいると駄目で、""で囲む必要がある。
CPLUS_INCLUDE_PATHを設定
Section titled “CPLUS_INCLUDE_PATHを設定”これまでだと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に変える。
トラブル発生
Section titled “トラブル発生”VSCodeを開き直すと急にojやoj-bundleが使えなくなった。acc check-ojは使えるし、動いているのでPATHの問題っぽい。
home/shogo314/.local/bin/oj --versionが動くのでこれを呼べるようにすればよい。
~/.bash_profileに
export PATH="~/.local/bin:$PATH"を追加する。
結構大変だった。
ライブラリを作る(執筆中)に続く…