用批处理制作一个简单的对拍器
前言:
一开始建了个纯c语言工程,以为靠文件读写就能轻松完成,然后被freopen的奇怪特性卡了几天,尝试其他文件读写方式也都以失败告终(
菜是原罪这时候队友告诉我有个东西叫.bat,这就去学了一下,重头开始搞一晚上就搞定了。。
\(\quad\)
写题的时候总是会遇到如下情况:
- 测试都对,一交就WA,怎么都找不到bug
- 我的代码已经快和标程一模一样了,但我还是WA
这时就需要对拍:
对拍就是写一个简单脚本随机生成多组输入数据,然后拿你的代码和标程一起去跑,暴力地找一组使你代码和标程结果不同的数据
然而这个过程是很麻烦的,不但需要建好几个新的文件,数据大了还不能做到肉眼找不同,得另写一个比较器
所以顺应人类自身发展需要,我们自然想到让程序帮我们完成这一切
\(\quad\)
目标:
用户只需要写一个随机数据生成器,将两份程序拷贝过来就能实现对拍,不需要其他多余操作。
\(\quad\)
思路:
建立program1.cpp,program2.cpp,用来存放用户拷贝的两份代码
建立constructor.cpp,用户需要在这里写随机数据生成器
建议comparator.cpp,用来比较两份代码的结果,用户不需要接触
启动时,首先编译所有的.cpp文件;
运行constructor,将结果输入到data.txt中;
分别运行program1和program2,从data.txt中输入,输出结果分别存放在out1.txt和out2.txt中;
运行comparator,从out1.txt和out2.txt中输入,比较后输出Accepted或Wrong Answer,若Wrong Answer,还需输出data.txt中的内容
将comparator的输出结果保存在result.txt中,供用户查看
\(\quad\)
上述操作均写入run.bat中,用户直接运行run.bat即可得到对拍结果
Github:https://github.com/lxtyin/SimpleComparator
run.bat代码:
@echo off
set /p Times=Enter how many times you want to compare:
make
cd work
type nul > result.txt
for /l %%t in (1, 1, %Times%) do (
echo | set /p = Test case %%t: >> result.txt
type nul > data.txt
type nul > out1.txt
type nul > out2.txt
constructor %%t > data.txt
type data.txt | solve1 > out1.txt
type data.txt | solve2 > out2.txt
comparator >> result.txt
echo Running Test %%t...
)
showresult
@echo on