考场对拍求助

学术版

@[murder_drones](/user/610393) Linux 下的 `diff` 命令可以比较两个文件,通过 `system` 函数调用的 `diff` 会令 `system` 产生返回值。若返回值不为 $1$ 就是有差异。 比如 `diff 1.cpp 2.cpp` 就会比较两个 cpp 的差异。若不同则 `system("diff 1.cpp 2.cpp")` 返回非零值,否则返回 $0$。
by Federico2903 @ 2024-02-26 15:09:58


@[murder_drones](/user/610393) 然后你 `do while` 用 `system` 调用 Generator 和 std 以及你的程序就能对拍了。
by Federico2903 @ 2024-02-26 15:10:58


@[_Skyfire_](/user/381949) 笔误了。返回值不为 $0$ 是有差异。
by Federico2903 @ 2024-02-26 15:11:41


```cpp #include <bits/stdc++.h> using namespace std; int main() { while (1) { system("你的数据生成器"); system("你的正解程序"); system("你的暴力程序"); if (system("diff --strip-trailing-cr 你的正解输出文件 你的暴力输出文件") { system("notify-send 对拍出现错误"); string s; getline(cin, s); } } } ``` 基本上和 windows 差不多,只不过比较器用 diff。
by CuteChat @ 2024-02-26 15:13:33


可以写 python ```python #!/bin/env python3 import os cnt = 0 while True: cnt += 1 print(f"Testcase {cnt} is running...") os.system("./dt.py > in") os.system("./bf < in > ans") os.system("./main < in > out") if os.system("diff out ans -Bb"): input("WA") ``` 然后 dt.py 是造数据的 python,或者也可以写什么都行。 运行之前一定要写 `#!/bin/env python3` 或 `#!/bin/python3`,写完以后 `chmod u+x xx.py` 对 xx.py 这个文件添加可执行权限
by yukimianyan @ 2024-02-26 15:14:18


@[_Skyfire_](/user/381949) @[chat_jinxuan](/user/726525) @[yukimianyan](/user/509229) 感谢各位的回答!
by murder_drones @ 2024-02-26 15:56:33


如果 diff 莫名奇妙出现问题可以后面加上 `-b` 进行忽略空格比对
by HHH6666666666 @ 2024-02-26 17:20:33


如果懒得每次写完编译可以放在对拍程序里开始前编译
by HHH6666666666 @ 2024-02-26 17:21:28


@[HHH6666666666](/user/767788) thx
by murder_drones @ 2024-02-27 18:58:03


|