使用说明:
        1. 被测代码、正确代码、生成器代码均使用文件输入输出;

2. 对拍前会清屏,请注意;
        3. 输出文件的文件名请和代码文件名保持一致;
        4. 若无限循环输出AC未停,则很可能正确;输出WA并跳出那就WA了;
        5. WA时输出两份答案,被测在前,AC在后;
        6. enjoy coding;

Update:

新版本的对拍脚本看上去更优美了,无实质性修改:

 #!/bin/bash

 clear;      # 清屏
 read -p "输入被测源代码名称(不含拓展名):" a   # a就是待测代码名称
 read -p "输入正确源代码名称(不含拓展名):" b   # b是暴力/AC代码名称
 read -p "输入生成器代码名称(不含拓展名):" c   # 数据生成器,一组即可,需要随机

 # 以下进行编译三份代码
 gcc $a.cpp -o $a -Wall -lm --static -DONLINE_JUDGE;
 gcc $b.cpp -o $b -Wall -lm --static -DONLINE_JUDGE;
 gcc $c.cpp -o $c -Wall -lm --static -DONLINE_JUDGE;

 # 不会被一闪而过的AC盖掉编译信息
 read -p

 # 开始对拍
 cnt=;
 while true; do
     ./$c>$c.in
     ./$a<$c.in>$a.out
     ./$b<$c.in>$b.out

     cnt=``;

     if diff $a.out $b.out; then
         printf "\33[1;32m✔ Accepted\033[0;32m on Test\033[1;34m #%d\033[0m\n" $cnt;   # 如此,一直正确就会无限输出AC
     else
         printf "\33[1;35m✘ Wrong Answer\033[0;32m on Test\033[1;34m #%d\033[0m\n" $cnt;# WA了就跳出
         exit
     fi

 done

(旧)代码:

 #!/bin/bash

 clear;      # 清屏
 read -p "输入被测源代码名称(不含拓展名):" a   # a就是待测代码名称
 read -p "输入正确源代码名称(不含拓展名):" b   # b是暴力/AC代码名称
 read -p "输入生成器代码名称(不含拓展名):" c   # 数据生成器,一组即可,需要随机

 # 以下进行编译三份代码
 gcc $a.cpp -o $a -Wall -lm --static -DONLINE_JUDGE;
 gcc $b.cpp -o $b -Wall -lm --static -DONLINE_JUDGE;
 gcc $c.cpp -o $c -Wall -lm --static -DONLINE_JUDGE;

 # 不会被一闪而过的AC盖掉编译信息
 read -p

 # 开始对拍
 while true; do
     ./$c>$c.in
     ./$a<$c.in>$a.out
     ./$b<$c.in>$b.out

     if diff $a.out $b.out; then
         printf "AC\n"   # 如此,一直正确就会无限输出AC
     else
         echo "WA"       # WA了就跳出
         cat $a.out $b.out
         exit
     fi

 done

上一版本

备用。

05-06 07:53