从 KIDx/Judger 魔改而来,只保留了 cpp 的判题核心。
在支持多组测试的基础上,将各组判题结果汇总之后以 JSON 格式输出到 result.json。
根据 meta.json 获取判题组信息,比如:
{
"testcases": [
{ "uuid": "a09b1fa7-dd25-4013-a06f-0a04fa857373" },
{ "uuid": "f5296bf8-3673-4d22-b5d3-a008aea202bd" }
]
}这之中有两组测试数据。测试数据的名称必须与 uuid 对应,比如: a09b1fa7-dd25-4013-a06f-0a04fa857373.in 和 a09b1fa7-dd25-4013-a06f-0a04fa857373.out 对应 上例中的第一组测试数据的输入与输出。
输出结果的解构为:
[
{
"memory": 2040,
"result": 2,
"time": 0,
"uuid": "a09b1fa7-dd25-4013-a06f-0a04fa857373"
},
{
"memory": 2040,
"result": 2,
"time": 0,
"uuid": "f5296bf8-3673-4d22-b5d3-a008aea202bd"
}
]根据 uuid 得出测试代码在各组数据上的表现情况。
result 字段对应测试结果,相关常量定义在 judge.h 中:
const int OJ_WAIT = 0; //Queue
const int OJ_RUN = 1; //RUN
const int OJ_AC = 2; //AC
const int OJ_PE = 3; //PE
const int OJ_TLE = 4; //TLE
const int OJ_MLE = 5; //MLE
const int OJ_WA = 6; //WA
const int OJ_OLE = 7; //OLE
const int OJ_CE = 8; //CE
const int OJ_RE_SEGV = 9; //SEG Violation
const int OJ_RE_FPU = 10; //float.../0
const int OJ_RE_ABRT = 11; //Abort
const int OJ_RE_UNKNOW = 12; //Unknow
const int OJ_RF = 13; //Restricted Function
const int OJ_SE = 14; //System Error
const int OJ_RE_JAVA = 15; //Java Run Time Exception依赖:
apt-get install libcairo2-dev libjpeg8-dev libpango1.0-dev libgif-dev build-essential配置:
对 config.ini 配置,其中将 sysuser=root 改为当前你正在使用的用户。
make 编译:
make编译成功后:
./Judge -l 2 -D ./testdata -d temp -t 200 -m 65535 -o 81920-l 对应语言,相关常量定义在 language.h 中
const int LANG_UNKNOWN = 0;
const int LANG_C = 1;
const int LANG_CPP = 2;
const int LANG_JAVA = 3;-D 指明测试数据的文件夹,里面包含了各组测试数据,如 a09b1fa7-dd25-4013-a06f-0a04fa857373.in 和 a09b1fa7-dd25-4013-a06f-0a04fa857373.out。
-d 指明临时文件夹,这个文件夹包含了 ce.txt (编译错误的信息,如果为空则为没有错误), result.json 测试结果,Main.cpp / Main.c / Main.java 测试代码。
-t 时间限制 允许程序运行的最长时间, 以毫秒为单位, 默认为1000, 1s
-m 内存限制 允许程序使用的最大内存量, 以KB为单位, 默认为65536, 64MB
-o 输出限制 允许程序输出的最大数据量, 以KB为单位, 默认为81920, 80MB
- config.ini 必须和编译后的 Judge 放在同一个文件夹内
test.cpp790 行左右,删除了对 Java 安全性的检查,因此本评测机对 Java 语言的安全性把控可能达不到要求