ジャッジシェルスクリプト
ジャッジできるサーバーがないときでも、手元にテストデータさえあればWA/TLE/ACを判定してくれるシェルスクリプトを書きました。
テストしたいコードと同じフォルダに以下のスクリプトを書いた hoge.sh 、inフォルダ、 outフォルダ、 tmp フォルダを作って、inフォルダにinput,outフォルダにoutputを入れてください。tmpフォルダにはプログラムの出力が入ります。
MLE/REは判定してくれません。REなら勝手に segmentation fault するので分かると思いますが、その場合は(出力が偶然一致していない限り)WAと判定されます。
TLEに対する打ち切りとかいうのもないです。
また、TimeLimitは秒単位でしかいじれません。また、実行時間が1分を超えるとおかしくなります(経過秒 mod 60しか見ていない)
テストデータは、対応するinput/outputで拡張子までの文字列が同じ場合にのみ対応しています。inputフォルダには関係のないファイルを入れないでください(隠しファイルにも注意)
コンパイルオプションやら、テストデータの拡張子は自由に変えてください。
元は.in,.outになっています。拡張子なしにもできます。
テストケース数が拡張子になってるやつには対応してません。
二重拡張子にもおそらく対応してません。
WA/TLEになるとそこで実行が打ち切られ、テストケースの数とともにWA/TLEとなったことが表示されます。
すべて通るとACと出ます。
Ubuntu12.04で動作しました。
cygwinとかだと動くのかなあ?
#!/bin/bash g++ ./tmp.cpp -std=c++0x -Wno-sign-compare -O2 -Wno-unused-result -Wall cd ./in TIMELIMIT=2 ACCEPT=1 for INPUT in `ls *` do INPUT=`echo $INPUT | cut -d "." -f 1-1` START=`date '+%S'` ../a.out <./$INPUT.in >../tmp/$INPUT.out END=`date '+%S'` TIME=`expr $END - $START` TIME=`expr $TIME + 60` TIME=`expr $TIME % 60` if [ $TIME -gt $TIMELIMIT ] then echo $INPUT"TLE" ACCEPT=0 break fi DIF=`diff ../out/$INPUT.out ../tmp/$INPUT.out` if [ -n "$DIF" ] then echo $INPUT"WA" ACCEPT=0 break fi done if [ $ACCEPT -eq 1 ] then echo "AC" fi