用.bat批处理搞一个简易对拍器


用批处理制作一个简单的对拍器

前言:

一开始建了个纯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中输入,比较后输出AcceptedWrong 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