下記を前提とします。記事作成時の手元のバージョンも一応書いておきます。
- Windows10
- VSCodeインストール済み(1.40.1)
- Windows版のPythonインストール済み(3.8.0)
- Python導入後のWindowsに右記もインストール済み⇒online-judge-tools
ゴール
Ctrl+Shift+B
でサンプルケースでのテスト実行できて、
Ctrl+Shift+T
で手入力でのテスト実行できる環境を作ります。
フォルダー構成
以下のようにしました。1問ごとに1ファイルとして、全部src以下に放り込みます。
work
│ cptest.bat
│ input.txt
│
├─.vscode
│ launch.json
│ settings.json
│ tasks.json
│
├─src
│ abc114_a.py
│
└─test
cptest.bat
@echo off
set problemname=%1
set testdir=test\%problemname%
set baseurl=%problemname:~0,-2%
set baseurlreplaced=%baseurl:_=-%
rem # log in
oj login -u username -p password "https://atcoder.jp/"
oj login --check "https://atcoder.jp/"
rem # make test directory
if not exist %testdir% (
oj dl -d test/%problemname%/ https://atcoder.jp/contests/%baseurlreplaced%/tasks/%problemname%
)
oj test -c "python src/%problemname%.py" -d test/%problemname%/
説明
cptest.bat abc114_a
のように引数を一つ与えて動かすバッチファイルです。
なお、cptest.bat ddcc2020_qual_a
でも動くように無理やり変換処理を入れています。
oj login -u
の行にあるusername
やpassword
は適切に変更してから使います。
最後の行ではpython
コマンドにパスが通っていることを前提に、ゴリゴリと実行して結果を標準出力に吐き出します。
input.txt
(標準入力として渡したい内容を書く)
説明
python xxxxx.py < input.txt
のように使うテキストファイルです。
自前でテストしたい入力を気合で書きます。
launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"args": [
"<",
"input.txt"
]
}
]
}
説明
F5
でデバッガを走らせるための設定ファイルです。
以下は作り方:
.pyファイルを開いてから唐突にF5
を押せばデバッグを開けます。
下記のような画面の「構成の追加」を押すとlaunch.json
ひな形が用意できます。
用意されたひな形にargs
のあたりを記載してあげれば完成です。
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "test_atcorder_sample",
"group": {
"kind": "build",
"isDefault": true
},
"type": "shell",
"command": "${workspaceFolder}/cptest.bat",
"args": [
"${fileBasenameNoExtension}"
],
"problemMatcher": []
},
{
"label": "test_manual_input",
"group": {
"kind": "test",
"isDefault": true
},
"type": "shell",
"command": "python",
"args": [
"${file}",
"<",
"input.txt"
]
}
]
}
説明
Ctrl+Shift+B
(ビルドタスク)やCtrl+Shift+T
(テストタスク)を書いておく設定ファイルです。
以下は作り方:
.pyファイルを開いてから唐突にCtrl+Shift+B
を押せば下記のような画面が出てきてtasks.json
のひな形が用意できます。
用意されたひな形をゴリゴリと編集しまくって完成です。
abc114_a.py
def main():
x = int(input())
ans = "NO"
if (x == 7 or x == 5 or x == 3):
ans = "YES"
print(ans)
if __name__ == '__main__':
main()
説明
[コンテスト名]_[問題名].py
となるようにファイル名を気を付けます。
上記の場合、ABC114のA問題を解くコードを書きます。
運用
コンテストに合わせて、適切なファイル名の.pyファイルをsrc以下に作ります。
回答を作ったら、Ctrl+Shift+B
でサンプルケースの動作確認をして、よかったらそのまま提出します。
怪しい箇所に気が付いたらinput.txt
を適宜変えつつ、F5
やCtrl+Shift+T
での動作確認しつつ修正して提出します。