18
24

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 3 years have passed since last update.

VSCodeでの競プロ向けPython環境をWindowsで作る

Last updated at Posted at 2019-11-30

下記を前提とします。記事作成時の手元のバージョンも一応書いておきます。

  • Windows10
  • VSCodeインストール済み(1.40.1)
  • Windows版のPythonインストール済み(3.8.0)

ゴール

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

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の行にあるusernamepasswordは適切に変更してから使います。
最後の行ではpythonコマンドにパスが通っていることを前提に、ゴリゴリと実行して結果を標準出力に吐き出します。

input.txt

input.txt
(標準入力として渡したい内容を書く)

説明

python xxxxx.py < input.txtのように使うテキストファイルです。
自前でテストしたい入力を気合で書きます。

launch.json

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ひな形が用意できます。
image.png
用意されたひな形にargsのあたりを記載してあげれば完成です。

tasks.json

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のひな形が用意できます。
image.png
用意されたひな形をゴリゴリと編集しまくって完成です。

abc114_a.py

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を適宜変えつつ、F5Ctrl+Shift+Tでの動作確認しつつ修正して提出します。

参考

Visual Studio Codeで競プロ環境構築(実践編) - Qiita

18
24
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
18
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?