Google CodeJamをVSC上でデバッグする
Qualification RoundはAtCoderのコードテストを間借りしてコーディングしたのだけど、やっぱりVisual Studio Codeを使いたい。
input()だけ書き換えて、printと想定解を目でみて比較すればよいのだけど、 'Case' → 'CASE' ': ' → ':' あたりでWAになったことがあるので、できればサンプルケースはコピペして実行したい。
ついでに、input()もコピペを間違えると怖いので、提出へもそのままコピペしたい。
ということで、真ん中にそのままコピペできるコード部を残して前後に挟むスクリプトを作った。
stdoutをredirectする方法は見つかったのだけど、自身のstdinに流し込む方法はなさそうなので、inputメソッドをgeneraterで書き換えている。sys.stdin()などinput()以外には対応していない。redirect_stdoutはwith文で使うことが多いようだが、インデントが残ってしまうのでenter()とexit()を使っている。#mainのセクションのみコピペすると幸せになれる、はず!
########### # header # ########### from contextlib import redirect_stdout from io import StringIO from difflib import Differ from itertools import zip_longest as _zip_longest with open('input.txt', 'r') as f: _input = f.read() def input_generator(_input): for line in _input.splitlines(): yield line input_gen=input_generator(_input) input = input_gen.__next__ captured_stdout = StringIO() _redirect_stdout = redirect_stdout(captured_stdout) _redirect_stdout.__enter__() ######## # main # ######## def solve(a,b): print(a+b) print(a) T=int(input()) for _ in range(T): a=int(input()) b=int(input()) solve(a,b) ########## # footer # ########## _redirect_stdout.__exit__(None, None, None) with open('output.txt', 'r') as f: out = f.read() for x,y in _zip_longest(captured_stdout.getvalue().splitlines(), out.splitlines()): print('\n'.join(Differ().compare([x],[y])))
使っているところはこんな感じ。input, outputともひとまずサンプルケースのコピペで良いし、必要があれば適宜自作のテストケースを書き加える。