项目作者: CDFLS

项目描述 :
A command-line OI contest judge for linux
高级语言: C++
项目地址: git://github.com/CDFLS/Judge.git
创建时间: 2016-10-30T04:20:03Z
项目社区:https://github.com/CDFLS/Judge

开源协议:GNU General Public License v3.0

下载


Judge

demo1




一个简单的OI程序评测程序,目前只支持Linux,将来也不会支持Windows。

当以root运行时会使用chroot来实现一个简单的沙盒。

拥有一个简单的CLI,结果可导出至CSV文件

可将执行过程重定向到文件(将会显示进度)

会判定freopen是否写错,如果写错且爆0将给出FileError(但不一定准确,可能只是单纯地写了个freopen(“./bala.in”, “r”, stdin)然后WA了而已,不过我不觉得有这种非主流)



运行make构建,运行make en构建英文版。

Arch Linux 64位上g++ 7.1.1编译成功。

安全性

对于一份代码,首先会在副本中删除所有include行(同时检查头文件),然后对g++ -E -P -DEJUDGE的输出进行字符串搜索(从而防止使用宏定义避免搜索)。然后检测是否以root运行,是则使用chroot。

Todo

  • 对命令参数的查错
  • 对文件输入输出的检查和支持
  • 一次完成对一次考试的评测(读取data、source目录下的多个选手程序和多道题目的测试数据)
  • 检查头文件,并可通过命令行添加头文件黑名单
  • 设置文件
  • CUI
  • 调用外部SPJ
  • Sandbox
  • 更多的配置项
  • define解析
  • 多线程评测

已知 Bug

终端宽度不够时CLI陷入死循环。

时间限制小于一秒时可能出错。

测试出的内存与 lemon 略有出入。

Help

如果你初次接触,可以在一次考试的根目录下运行 judge -g 命令生成 judge.conf 配置文件
也可查看 judge —help 或 example 目录。

  1. 用法:judge [选项]...
  2. 评测OI程序,编译当前目录下和source/[选手名]目录下的代码(使用该代码父目录名),并使用当前目录下和data/[题目名]目录下的数据(自动查找)评测。文件操作自动检测(仅检测freopen)。
  3. 当以root权限运行judge时,将调用chroot实现一个简单的沙盒。
  4. 代码检测仅检测CC++
  5. 编译使用命令:
  6. timeout 10s g++ -static -std=c++11 -s -lm -DEJUDGE %s -o Exec/%s
  7. timeout 10s gcc -static -std=c99 -fno-asm -s -lm -DEJUDGE %s -o Exec/%s
  8. timeout 10s fpc -Xs -Sgic -dEJUDGE %s -oExec/%s
  9. judge python %s Exec/%s
  10. judge python2 %s Exec/%s
  11. -f [STRING] 禁止源文件中出现该函数
  12. -f[NUMBER] [STRING]... 禁止源文件中出现以下NUMBER个函数
  13. -h [STRING] 禁止源文件中出现该头文件
  14. -h[NUMBER] [STRING]... 禁止源文件中出现以下NUMBER个头文件
  15. -t [TIME] 限定程序运行时间(未指定时为1s)
  16. -m [MEMORY] 限制程序使用内存(为指定时为128000KB)
  17. --csv 输出结果到result.csv,当人数大于一时默认开启
  18. --nocsv 禁止输出到result.csv(即使人数大于一)
  19. -c, --cli 使用一个简单的CLI管理一次考试
  20. -o 开启 O2 优化
  21. -g 生成一份配置文件方便修改
  22. -s 执行脚本
  23. --help 显示本帮助
  24. 全局配置文件:
  25. 程序会依次从~/.judgerc和./judge.conf中读取设置,设置文件格式为:[选项]([参数1],[参数2]......)
  26. 当参数为字符串且参数不定时,会启用转义符,如"\,"表示",""\("表示"("目前支持以下选项:
  27. 无参数:
  28. quit 回到全局配置编辑模式(在enter命令结束时使用)
  29. 一个参数:
  30. background, bg 设置输出ACWA等的背景色,有以下值可选:black green red blue yellow cyan white purple
  31. FileIO, file 强制使用或不使用文件输入输出(默认情况下检测freopen),值:true false
  32. O2, optimize 开启 O2 优化,值:true false
  33. enter 对[参数1]问题进行配置,使接下来的命令按照配置文件解析,quit命令结束
  34. 两个参数:
  35. SourceProblem, source, s 将问题[值1]按照配置文件(详见下一部分)[值2]进行配置
  36. 多个参数:
  37. Func, f 将所有参数加入禁用函数列表
  38. Header, h 将所有参数加入禁用头文件列表
  39. 示例配置:
  40. ./judgerc
  41. h(fstream)
  42. f(folk)
  43. source(aplusb,config)
  44. file(true)
  45. ./config:
  46. time(2.0)
  47. memo(64000)
  48. score(10)
  49. 问题配置文件:
  50. 三个选项,格式同judgerc
  51. time, t 时间
  52. memo, memory, m 内存
  53. score, s 单个测试点分数
  54. rename, ren, r 重命名问题
  55. 示例同上。
  56. CLI模式:
  57. tab键切换模式(重测和查看记录),ws上下移动,ad翻页,enter选择,q退出
  58. SPJ说明:
  59. SPJ编译,放在data对应题目目录下,命名为spj(或者将spj.cpp放在该目录下,将会被自动编译)
  60. SPJ参数:
  61. - argv[1]: 标准输入文件
  62. - argv[2]: 选手输出文件
  63. - argv[3]: 标准输出文件
  64. - argv[4]: 本测试点满分
  65. - argv[5]: 分数输出文件(必须创建),仅一行,包含一个非负整数,表示得分.
  66. - argv[6]: 额外信息文件(可以不创建)

更多截图

demo2
demo3
demo5
demo4
cui