読者です 読者をやめる 読者になる 読者になる

hogloidのジャッジシェルスクリプトを改造した

programming

hogloidのジャッジシェルスクリプトを改造した。

変更点は以下の通り

  • 自動でtmpファイルを作成してくれる。
  • ソースファイル名を引数で指定できる。
  • ついでに第二引数でTimeLimitを指定できる。
  • 入出力データの拡張子を気にしないようにした。(.txtとかでも大丈夫)(多分拡張子なくても大丈夫)
  • 時間計測をtimeコマンドにしてみた。
  • 打ち切らずに全テストケースで走らせるようにしてみた。(嫌ならbreakを適当に入れて下さい)
  • 全てのケースについて実行時間を出力するようにしてみた。
  • 何となく短くなった。

なんか不具合があったら教えてください。

#!/bin/bash
# usage : ./a.sh SOURCE_FILE TIME_LIMIT

TIMELIMIT=${2:-1}

mkdir -p tmp
g++ ${1:-a.cpp} -std=c++0x -Wno-sign-compare -O2 -Wno-unused-result -Wall -o tmp/a.out
ACCEPT=1
for INPUT in in/*; do
	BASE=${INPUT##*/}; BASE=${BASE%%.*}
	OUTPUT=tmp/$BASE.out
	ANSWER=out/$BASE*
	TIME_RAW=`(time tmp/a.out < $INPUT > $OUTPUT) 2>&1`
	TIME=${TIME_RAW%s*sys*}; TIME=${TIME##*m}
	echo -n $INPUT" : "$TIME"s : "
	if [ `echo "$TIME>$TIMELIMIT" | bc` -eq 1 ]; then
		echo "TLE"
		ACCEPT=0
	elif [ -n "`diff -q $OUTPUT $ANSWER`" ]; then
		echo "WA"
		ACCEPT=0
	else
		echo "AC"
	fi
done
if [ $ACCEPT -eq 1 ]; then
	echo "Accepted!"
fi

自分はMacなのでコンパイルコマンドを

clang++ ${1:-a.cpp} -std=c++0x -O2 -Wall -o tmp/a.out

で動かしました。

スタック制限をでかくして走らせるのってどうやるんだっけ。