LoginSignup
12
10

More than 5 years have passed since last update.

Python競プロerのためのテスト環境構築 with Atom

Posted at

対象とする人:raising_hand:

これから Python で競技プログラミングを始める方や,すでに競プロerだけどテスト環境を持っていないよって人のための記事です.テスト環境の作り方の記事が見当たらなくて困ったので書きました.単純に標準入力の受け方が知りたい人は以下の記事がまとまっていてすごくいいです.

Pythonで競プロやるときによく書くコードをまとめてみた

例えば入力として

N M
s1 t1 w1 
s2 t2 w3
...
sN tN wN

のような複数行の入力があるとき,実行のたびにこれを打ち込むのはとてもとてもつらいです….この記事では Atom でローカルのテスト環境を作っていきます.VSCode などを使っている人は普通にターミナルが使えると思うので、Powershellで実行する から読み進めてください.ただしMacやLinuxの人は

python spam.py < input.txt

という風に入力データをtextファイルに書いておいて,リダイレクトして読み込むだけでいいみたいです.お疲れさまでした.以下 Windows10 を想定します.

Atom と package の導入

以下の記事を参考に Atom と package platformio-ide-terminalの導入をしてください(atom・pythonで競技プログラミングのテスト環境構築).これで Atom から簡単に PowerShell を起動できるようになります.

上にあげた記事では

import sys
f = open('input.txt', 'r')
sys.stdin = f

x = input()
print(x)

のようにしてファイルから標準入力を受け取っていますが,競プロではこのまま提出できないので少し不便です(批判しているわけではないです).ローカルでテストしてそのまま提出できることを目標にします.

PowerShellで実行する

Windows ではpython spam.py < input.txt の代わりに

Get-Content ./input.txt | python ./spam.py

のように実行できます.PowerShell は Atom 下部の [+] から起動できます(下の図).
atom_terminal-1554263259387.PNG

毎回これを打ち込むのは面倒くさいのでスクリプトを書いてさぼります.これから PowerShell スクリプトを作りますが難しくないので初めてでも大丈夫です.(私もこれが2回目なので…)

スクリプトをかいてラクしたい

先ほどのコードを実行する PowerShell スクリプトtest.ps1を書きます.

test.ps1
Get-Content ./input.txt | python ./spam.py

注意点ですが PowerShell ではカレントディレクトリであっても相対パスを明示しないとだめです.hoge.txt ではなく ./hoge.txt のように書きましょう(自戒).

実は PowerShell スクリプトはこのままでは実行できません.実行ポリシーを変更しないと実行できないようになっているからです.そこで Atom から Powershell を起動したら自動的に実行ポリシーを変更するようにします.Atom の [file]->[setting]->[Packages]->[platformio-ide-terminal]->[Core]->[Auto Run Command] に

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

を追加します.必要があれば [Working Directrory] も変更しておくといいかもです.私は [Active File] にしました.

これで準備ができました!!!

試してみる!

spam.py
import sys
N,M = map(int, sys.stdin.readline().split())
print(N, M)
for _ in range(M):
    s,t,w = map(int, sys.stdin.readline().split())
    print(s,t,w)
input.txt
5 3
0 1 4
0 2 3
1 1 2

準備ができたらAtom から PowerShellを開いて,test.ps1を実行してみてください.標準入力を正しく受け取れたでしょうか?

最後に

経験が浅いので,こうしたほうがいいよという指摘などお待ちしております m(__)m.またわかりにくい点は気軽に聞いてください!

参考

PowerShellのリダイレクト
PowerShellスクリプティングの第一歩

12
10
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
12
10