atcoder用のvscode+docker+git環境構築ファイルです。
pythonとc++を使用可能です。
以下の3つがメインとなっています。 vscodeのタスクランナーを使用することでGUIで簡単に動かせることを目標にしてます。
1.dockerコンテナの構築設定周り
2.online-judge-toolsの実行
3.グラフ問題の入力可視化
atcoder_docker_sample
│
├── README.md
├── .devcontainerdocker
│ ├── devcontainer.json
│ └── Dockerfile
├── requirements.txt
├── version_check.py
│
├── .vscode
│ ├── launch.json
│ ├── task.json
│ └── py_atcoder_snippet.code-snippets
│
├── field
│ ├── contests
│ │ └── past1
│ │ └── a.py
│ │
│ └── other_problems
│ └── abc023_b.py
│
├── library
│
├── scripts
│ ├── clean_tmp.sh
│ ├── graph_visualization.py
│ ├── oj_test.py
│ └── oj_submit.py
│
└── tmp
- .devcontainerdocker : dokcerコンテナ構築用
- requirements.txt : dokcer構築の際にpip installする一覧。atcoderの環境,matplotlib,online-judge-tools,streamlitを導入
- version_check.py : atcoderの環境確認用
- .vscode : スニペット一覧やデバッカー、タスクランナーの設定など
- field : 問題の解法ファイル
- library : コピペ用のライブラリ一覧
- scripts : グラフ可視化とonline-judge-toolsの実行ファイル
- tmp : online-judge-toolsでダウンロードした入力サンプルの保存場所
簡単な導入&立ち上げ方法です。わかる人はスキップ推奨
-
前準備
vscode+dockerが動かせる環境が必要です。 導入については下記参照: https://code.visualstudio.com/docs/remote/containers https://code.visualstudio.com/blogs/2020/03/02/docker-in-wsl2
-
gitからのダウンロード
githubからのダウンロード方法です。
git clone https://github.com/yamatia/atcoder_docker_sample.git
-
VSCodeで開く
左下の緑色の
><
マークをクリックして、Remote Containers:Open Foleder in Container
から1でダウンロードしたatcoder-docker-samlpeをクリックする初回は少し時間がかかりますが、dockerイメージがビルドされて実行可能になります。
※docker imageのサイズが大きいですが、不満な人はdevcontainer.jsonからextensionを適宜削除してください -
atcoderへのログイン
online-judge-toolsでの提出を行うのであればログイン作業が必要です。 以下を入力するとユーザー名とパスワードを求められるので適宜入力してください。seleniumがインストールされていない旨が通知されますが特に入れなくても大丈夫です。oj login https://atcoder.jp/
-
コンテストの解法はfield以下に収める事を想定してます。/field/contest/abc168/d.pyのようにフォルダで管理するか、/field/other_problems/abc168_d.pyのように問題で管理することができます。
.gitignoreには/field/contestsを記載しているので、この部分はGitしても上がりません。なのでPASTの問題などをここで管理して賠償問題事故などをおこさないようにしています。 -
基本的に、解法ファイルを作成する以外の操作はすべてタスクランナーでGUIから実行可能です。解法ファイルを開いた状態で、左下のTASK RUNNNERから以下の5つを選択することで操作できます。
-
oj_download&test
online-judge-toolsのdownloadとtestをいい感じに実行するようにしています。
フォルダ名とファイル名から、atcoderの問題URLにアクセスし、tmp以下に問題ファイルをダウンロード、実行テストという作業をまとめて行っています。
※企業コンなどで時に問題URLに辿り着けないことがあるので、その時はterminalから入力を求められます。 -
oj_submit
online-judge-toolsのsubmitを実行するようにしてます。これでatcoderへの提出が行えます。
※1つ注意点として、そのままだと実行時にoj側から最後にエラーメッセージが表示されます。しかしコンテストページを見るとわかるのですが、提出はできています。 これは、online-judge-toolsの挙動として、ファイル提出後にwebbrowserで提出画面を自動で開こうとするのですが、dockerからホストのブラウザが参照できないことが原因です。提出後にブラウザで開いてほしい人は適宜パスを追加すればいいと思います。
-
clean tmp folder
上記1を実行すると、tmp以下にsampleファイルがたまっていくので、その掃除用です。実行すると、1日以上前にダウンロードしたファイルを削除します。
-
cpp runner
C++の実行ファイル(.cpp形式)をコンパイル、実行します。入力はterminalから行ってください。
-
graph viewer
streamlitによるグラフ問題の簡易な可視化用です。
実行すると、https://localhost:8501/でブラウザからアクセスできます。基本的に上からポチポチ操作すれば、対応してるグラフ形式であればnetworkxによる可視化が可能です。他には、サイドバーからグラフの描画設定をいじることができます。一応保存も可能です。
終わったらCtr+Cなどで閉じてあげてください。
-
-
他には、pythonとc++についてはF5でvscodeのデバッグを実行できます。c++についてはstep overで末端まで進んでしまうとエラーメッセージが流れることもあり少し微妙です。
-
dockerコンテナビルド関連
.devcontainerにあるdevcontainer.json,Dockerfile、とrequirements.txtでイメージの立ち上げを行っています。
atocderのジャッジ(2020/6/21時点)でのpython3.8とそのモジュール、他にはグラフ問題の可視化用にjupyter,matplotlib、あとはonline-judge-toolsを導入しています。あとC++(GCC)も
dockerのイメージをコピペしていじりたい人はこの3つだけコピーして環境構築すれば楽だと思います。
-
.vscode
-
launch.json
vscodeでのpythonデバッグ設定です。python,c++で実行可能です。
※c++は仕様上、step overでプログラムで末端まで走らせるとエラーメッセージ出ます -
task.json
vscodeの
Tasks:Run Build Task
を使用して、いろいろ動かす設定をしてます。
解法ファイル(e.g.abc168_a.py)を開いた状態で、Ctr+Shift+Bでデフォルトのビルドタスクを実行可能です。 -
py_atcoder_snippet.code-snippets
vscodeのスニペットです。現状pythonの入力回りだけ設定してます。適宜追加すればより便利に。
-
-
field
コンテストの解法ファイルをまとめて入れています。contestsでは開催中コンテスト、other_problemsではその他の問題を放り込んでいます。.gitignoreにcontestsを記載することで、PASTの問題などで事故らないようにする想定です。
-
library
典型的なライブラリをコピペ用に入れていく予定のフォルダです -
scripts
タスクランナーで動かす用のファイルをおいています。 -
requirements.txt
docker立ち上げ時にpip installするモジュールのリストです -
version_check.py
AtCoderのコードテストで実行することで、ジャッジに導入されているモジュールのバージョンを確認することができます。 -
.gitignore
GitHubで管理を行う際に、更新を反映しないファイルを指定できます。デフォルトではfield/contestsとtmpを指定しています。