自动化OI生成,编译,评测工具
可通过模板自动生成oi做题所需的文件 (以C++为例)
- (problem).cpp : 源代码,由pattern.cpp生成
- (problem).in : 样例输入文件
- (problem).ans : 样例答案文件
通过config.py
中configs['compile_command'] 指定语言的pattern模板
configs = {
'patterns' : {
'c' : 'pattern.c',
'cpp' : 'pattern.cpp',
}
}
通过config.py
中configs['compile_command'] 指定语言编译器参数进行自动编译
configs = {
'compile_command' : {
'c' : 'gcc {problem}.c -o {problem}.exe',
'cpp' : 'g++ {problem}.cpp -o {problem}.exe -DONLINE_JUDGE -Wall -fno-asm -lm -march=native',
}
}
通过管道将输入文件传入可执行程序,再通过管道输出临时输出文件(problem).out
begin = time.time()
ret = os.system(problem + '.exe < ' + problem +
'.in > ' + problem + '.out')
end = time.time()
logger.info('Used Time: {0:.3f}s'.format(end - begin))
同时输出程序运行时长
将程序输出与答案进行比对,获取评测结果
s = '.'.join(os.popen('diff ' + problem + '.out ' + problem + '.ans').readlines())
-
oitest.py: 主程序
-
usage: oitest.py [-h] [-l LANGUAGE] [-d DIRECTORY] [-t] problem OI Test positional arguments: problem Problem ID optional arguments: -h, --help show this help message and exit -l LANGUAGE, --language LANGUAGE Language -d DIRECTORY, --directory DIRECTORY Directory -t, --test Test
-
-
config.py: 配置文件夹
-
configs = { 'default_dir' : 'Luogu', 'default_language' : 'cpp', 'patterns' : { 'c' : 'pattern.c', 'cpp' : 'pattern.cpp', }, 'compile_command' : { 'c' : 'gcc {problem}.c -o {problem}.exe', 'cpp' : 'g++ {problem}.cpp -o {problem}.exe -DONLINE_JUDGE -Wall -fno-asm -lm -march=native', }, }
-
-
log.txt: 输出日志
-
pattern.* : 对应语言的模板文件
-
Luogu: 样例文件夹
-
生成题目对应文件:
python oitest.py (problem)
如:
python oitest.py 1001
-
在对应文件内,填入题目相关信息
- problem.in : 样例输入
- problem.ans : 样例结果
- problem.cpp : 源代码
-
自动评测:
python oitest.py problem -t
如
python oitest.py 1001 -t