傳入兩個執行檔名稱。
例如:
./對拍 pa pb
pa
, pb
是你要對拍的兩隻程式。
程式會從 stdin
讀入輸入,然後重導給 pa
, pb
,
照正常的方式輸入測資即可。
當然也可以
./對拍 pa pb < in
讀取測資檔。
或者
./generator | ./對拍 pa pb
如果pa
, pb
輸出相同,對拍程式輸出 AC
;
否則輸出 WA
,並印出 diff
結果。
1
2
3
4
5
6
7
8
9
#!/bin/bash
O1="$(mktemp)"
O2="$(mktemp)"
tee >("./$1" > "$O1") >("./$2" > "$O2") > /dev/null
if sync && diff "$O1" "$O2"; then
echo "AC"
else
echo "WA"
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
if [[ $# -ge 2 ]]; then
program1="$1"
program2="$2"
else
>&2 echo "Usage: $0 program1 program2"
exit 1
fi
OUTPUT1="$(mktemp -t oj-test-input-1-XXXXXX)"
OUTPUT2="$(mktemp -t oj-test-input-2-XXXXXX)"
tee >("./$program1" > "$OUTPUT1") >("./$program2" > "$OUTPUT2") > /dev/null
if sync && diff "$OUTPUT1" "$OUTPUT2"; then
echo "AC"
else
echo "WA"
fi
rm "$OUTPUT1"
rm "$OUTPUT2"