Loading

关于对拍

Windows

点我看用法

在 Windows 环境下,测试大样例后会得到一个巨大的 .out 文件,这时候用肉眼观察法感觉十分不靠谱。那么用脚本中的 fc 可以快速解决这个问题。

首先在 .out 和 .ans 所在的文件夹里新建一个 .txt,并重命名为 .bat。例如:我希望对比 a.out 文件和 a.ans 文件。那么我就建一个 checker.bat 并右键编辑,输入:

fc a.out a.ans
pause
点我看用法

当然你可以打开 cmd 然后输入 fc a.out b.out,但是好像不能对比 .ans 文件。

注意最后那个 pause 是为了让程序不自动结束,而是会留着界面,以观察对比结果。

有的时候我们拿到一份 std 和自己的 0ptscode。但是并没有办法下载数据或者瞪眼法看出代码的 bug。于是我们希望借助脚本来对拍出几组错误的数据。

比如,我有两份代码,一份是 std,另一份是 0ptscode。我们按照题目格式写一个 datamaker.cpp。并按上面的方法建一个 checker.bat,写入:

:loop
datamaker.exe
std.exe
0ptscode.exe
fc std.out 0ptscode.out
if %errorlevel%==0 goto loop
pause
点我看用法

酱紫,就可以循环造数据,运行,对比。如果不同,那么会自动退出。

当然记得加文操。

但是有的时候会需要 spj,那么我们可以把上面的 std 改成 spj:

:loop
datamaker.exe
spj.exe
0ptscode.exe
if %errorlevel%==0 goto loop
pause
点我看用法

注意一般而言 spj 都是 testlib 头文件,如果不是另当别论。

Linux

点我看用法

Linux 下有终端,但是我并不怎么会用,所以还是用老办法,写脚本。具体可以参照 这篇博客

对拍:建立一个 .sh 文件,打开,写入:

#!/bin/bash
while true; do
    ./datamaker > data.in
    ./std <data.in >std.out
    ./0ptscode <data.in >0ptscode.out
    if diff std.out 0ptscode.out; then
        printf "AC\n"
    else
        printf "WA\n"
        exit 0
    fi
done
点我看用法

然后最后在终端里输入:

sh *.sh
posted @ 2021-11-08 15:05  ZCETHAN  阅读(100)  评论(0编辑  收藏  举报