Peter's codebook A blog full of codes

對拍程式

使用方法

傳入兩個執行檔名稱。

例如:

./對拍 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"
comments powered by Disqus