AtCoderやCodeforcesなどの競技プログラミングサイトでは、通常、標準入力から入力を受け取ります。例えばPythonで回答する場合、あなたの回答(例としてsolve.py
とします)は、入力が書かれたテキストファイルinput.txt
が
$ python solve.py < input.txt
のように与えられたとき、正しく出力することが求められます。
Visual Studio Codeでは<
を使った入力や出力はdebugger/runtime specificということになっています (https://code.visualstudio.com/docs/editor/debugging#_redirect-inputoutput-tofrom-the-debug-target) 。私の理解が正しければ、Pythonを実行する処理系が<
をうまく扱えない場合、Visual Studio Codeで<
を使う諦めざるを得ないはずです。実際、Windows + Anaconda Pythonという組み合わせで試行錯誤しましたが、うまくいきませんでした。
このように<
を使った入力や出力がうまくいかない処理系を使っている場合であっても、Visual Studio CodeでPythonのデバッグができるような方法を考えました。
手順1. Pythonスクリプトに3行追加
Visual Studio Codeは、以下の形式であれば問題なく引数を受け取ってデバッグ可能です。
$ python solve.py input.txt
そこで、以下のどちらでも同じように入力を受け取れるようにPythonスクリプトを変更します。
$ python solve.py < input.txt $ python solve.py input.txt
そのためには、Pythonスクリプトに以下の行を入れればOKです(参考: how to take a file as input stream in Python - Stack Overflow )。
import sys if len(sys.argv) == 2: sys.stdin = open(sys.argv[1])
例えば ABC146のB問題ですと、回答は以下のようになります。
import sys if len(sys.argv) == 2: sys.stdin = open(sys.argv[1]) N = int(input()) S = input() T = "" for ch in S: T += chr(ord('A') + (ord(ch) - ord('A') + N) % 26) print(T)
手順2. Visual Studio Codeでデバッグ実行
事前にPythonの拡張機能を入れて置く必要があります(多分Python
で検索して最初に出てくるMicrosoftのものでOK)。
Pythonコードを右クリックしてVisual Studio Codeで開きます。
左の方にあるデバッグのアイコンをクリックします。Ctrl + Shift + DでもOKです。
- "create a launch.json file." をクリックします。
- "Python"を選択します。
- "Python File"を選択します。
- 自動で作成される雛形に、
"args": [/path/to/入力ファイルへのパス]
を追加します。パスは、あなたのPythonスクリプトのあるディレクトリを基準とした相対パスでもよいようです。以下に例を示します。
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: 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": ["test/sample-1.in"] } ] }
- さっき作った設定が選ばれていることを確認して、再生ボタンを押します。
- Debugしましょう!