31
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

快適なAtCoder環境構築【コマンド無しで提出まで】

Posted at

毎度のごとくMacを初期化しまして、AtCoderの環境も再構築が必要になったのでこれを機に記事でも書くかと私の使っていたVSCodeでAtCoderの環境を作っていきたいと思います。

Mac + Python + 提出ショートカットの記事も無かったのでね。。。(もちろんC++などPython以外、Mac以外でも役に立ちます)

Macの環境

プロセッサだったりOSだったりの情報は以下です。

ハード情報

環境.png

  • MacBook Pro(2018年モデル)
  • Intel プロセッサ

ソフト情報

  • MacOS Monterey
  • シェルはzsh
  • ほぼほぼ初期化した状態でChromeやらbrew、python、node.jsだけ入れた

AtCoder-cliのインストール

AtCoder-cliのインストールからです。
これにはNode.jsが必要なのでまだインストールできていない人はこちらを参考にインストールしてください。

インストールしている方は以下のコマンドを打ってatcoder-cliをインストールしてください。

zsh
sudo npm install -g atcoder-cli

インストールが終わったら

zsh
acc --version

でバージョンが表示されるか確認しましょう!

accのアップデートチェックにエラーがあると表示される方は指示に従い

zsh
sudo chown -R $USER:$(id -gn $USER) /Users/[パソコンのユーザー名]/.config

を実行して権限を与えます。

online-judge-toolsのインストール

online-judge-toolsをインストールしていきます。

インストールにはpipコマンドが使える環境が必要ですので、AtCoderでC++などpython以外を使っている方もpythonインストールが必要です。
pythonをインストールしていない方はこちらからインストールを行なってください。

インストールができたら

zsh
pip3 install online-judge-tools

こちらのコマンドでonline-judge-toolsをインストールします。

スクリーンショット 2022-03-20 2.45.59.png

こちらも

zsh
oj --version

でバージョンが表示されたらOKです。

AtCoder-cliのログイン

AtCoder-cliとonline-judge-toolsのインストールが出来たら、AtCoder-cli(以下acc)にログインしましょう。

スクリーンショット 2022-03-20 2.51.54.png

zsh
acc login

と打ってAtCoderのユーザー名とパスワードを入力します。

zsh
OK

と表示されるはずです。

online-judge-toolsのログイン

online-judge-tools(以下oj)にもログインします。

zsh
oj login https://atcoder.jp

このコマンドを打ってAtCoderのユーザー名とパスワードを入力します。

「Seleniumが無い」とのエラーが出ますが問題なく動きますので機になる人はインストールしてください。
私は普通に使うのでインストールしました。

解答のテンプレを作成

問題を取得した際に解答のテンプレもあった方が素早くコーディングできると思いますのでテンプレを作成していきます。

zsh
cd `acc config-dir`
mkdir python
cd python
touch main.py
touch template.json

このコマンドを入力します。

main.pyには

main.py
import math
from collections import defaultdict

などなど好きなようにテンプレを作っておきます。
(ちなみに私は空です笑)

template.jsonには

template.json
{
    "task":{
        "program":["main.py"],
        "submit":"main.py"
    }
}

を入力します。保存も忘れずに。

zsh
acc config default-template python

でデフォルトでpythonフォルダのテンプレを使う様にします。

zsh
acc config default-task-choice all

この設定も行う事で、abcdefgなど問題を全て取ってきてくれるのでした方がいいでしょう。

とりあえず確認

まだやることはありますが一旦確認しておきます。

zsh
acc new abc100

とやるとabc問題の100を取ってきます。
この問題のIDはコンテストのURL部分ですので覚えておきましょう。

実行するとabc100というディレクトリができて、その中にabcd問題まであり、さらにその中にmain.pyというテンプレとtestsディレクトリがあると思います。

ディレクトリ構造
.
└── abc100
    ├── a
    │   ├── main.py
    │   └── tests
    ├── b
    │   ├── main.py
    │   └── tests
    ├── c
    │   ├── main.py
    │   └── tests
    ├── d
    │   ├── main.py
    │   └── tests
    └── contest.acc.json

そこまで確認できればひとまずOKです。
本番はmain.pyにコードを書いていきます。

main.py
# abc100 A問題の解答
a,b=map(int,input().split())
print(":(" if a>8 or b>8 else "Yay!")

テストの確認をしたいのでa問題の解答は載せておきます。

自動テストとショートカット

自動テストを行うには、abc100のA問題を例にすると

zsh
oj t -c 'python3 abc100/a/main.py' -d abc100/a/tests/

というコマンドを実行する必要があるのですが、これを毎回打っていると時間がかかるのでショートカットを設定します。

まずは、ショートカットで実行するタスクとして設定しなければいけないので.vscodeディレクトリを作成しtasks.jsonを作成します。

.
├── .vscode
│   └── tasks.json
└── abc100
    ├── a
    ├── b
    ├── c
    ├── d
    └── contest.acc.json

こんな感じになればOKです。

tasks.json
{
	"version": "2.0.0",
	"tasks": [
		{
			"label": "CheckTestCase",
			"type": "shell",
			"command": "cd ${fileDirname} && oj t -c 'python3 main.py' -d ./tests/",
			"presentation": {
				"reveal": "always",
				"focus": true,
				"panel": "shared"
			}
		}
	]
}

tasks.jsonの中には上のものを追加してください。

次にcmd + K cmd + Sを順に押してキーボードショートカットを開きます。
以下の画像の様にもいけます。
スクリーンショット 2022-03-20 15.27.47.png

そしたら
スクリーンショット 2022-03-20 15.44.10.png
この真ん中のマークを押します。
これでkeybindings.jsonが開くと思うのでそこに

keybindings.json
[
  {
    "key": "ctrl+t",
    "command": "workbench.action.tasks.runTask",
    "when": "editorTextFocus",
    "args": "CheckTestCase"
  }
]

上のものを入力して保存します。
この状態でabc100/a/main.pyを開いた状態でcontrol + Tを押すと、、、
スクリーンショット 2022-03-20 15.49.21.png
こんな感じでテストケースを全て試してくれます。

自動提出とショートカット

ここまできたら提出も自動でできる様にしましょう。

tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "CheckTestCase",
      "type": "shell",
      "command": "cd ${fileDirname} && oj t -c 'python3 main.py' -d ./tests/",
      "presentation": {
        "reveal": "always",
        "focus": true,
        "panel": "shared"
      }
    },
    {
      "label": "SubmitCode",
      "type": "shell",
      "command": "cd ${fileDirname} && acc s ${fileBasename}",
      "presentation": {
        "reveal": "always",
        "focus": true,
        "panel": "shared"
      }
    }
  ]
}

tasks.jsonを以上のように変更します。そのままコピペで大丈夫です。

keybindings.json
[
  {
    "key": "ctrl+t",
    "command": "workbench.action.tasks.runTask",
    "when": "editorTextFocus",
    "args": "CheckTestCase"
  },
  {
    "key": "ctrl+s",
    "command": "workbench.action.tasks.runTask",
    "when": "editorTextFocus",
    "args": "SubmitCode"
  }
]

keybindings.jsonは以上の様に変更します。そのままコピペで大丈夫です。
どちらも保存忘れないように。
これでabc100/a/main.pyを開いた状態でcontrol + Sを押します。
(事情により画像は出せないですが)abcaと入力してと出てくるので入力します。

自動でブラウザが開き、提出することができました!
スクリーンショット 2022-03-20 16.01.22.png

おわりに

出来るだけ分かりやすく説明したつもりなのですがどうでしたかね?
少しでもよければLGTMしてくれると嬉しいです。
また何かあれば記事にします。

それでは良いAtCoderライフを!

31
19
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?