3.13 设置特殊运行和比较程序

为了解决不符合固定输入和/或输出的方案的题目, DOMjudge 可以更改提交被运行和判断是否正确的方式

处理提交的运行和检查的后端脚本 testcase_run.sh 调用单独的程序来运行提交和比较结果; 这些可以进行单独地设置并适应每个问题的需求; 为此, 必须创建上几节所述 的可执行文档; 然后必须在题目的 special_run 和/或 special_compare 字段选择可执行文件 (空值表示使用默认的运行和比较脚本; 可以在全局设置中设置这些默认值); 在创建自定义运行和比较程序时, 我们建议重新使用处理繁琐标准部件的脚本; 详情参见 boolfind 示例

比较程序

比较程序/脚本应该遵循 Kattis/problemarchive 输出验证器格式. DOMjudge 使用那里指定的 默认输出验证器 作为默认值, 可以在 https://github.com/Kattis/problemtools/blob/master/support/default_validator/ 找到

注意: DOMjudge 只支其中描述功能的子集, 特别的, 调用语法是:

/path/to/compare_script/run <testdata.in> <testdata.ans> <feedbackdir> <compare_args> < <program.out>

其中 testdata.in testdata.ans 是参考输入输出文件, feedbackdir 要写入包含例如评测响应文件 judgemessage.txt (仅允许的其他文件有 teammessage.txt score.txt judgeerror.txt diffposition.txt), compare_args 是一个可以在配置比赛题目时设置的参数列表, program.out 是队伍的输出; 验证程序不应该对它的工作目录做出任何假设

有关编写和修改比较(验证器)脚本的更多详细信息, 请参阅 boolfind_cmp 示例和文件 testcase_run.sh 的顶部的注释

运行程序

特殊运行程序可以在某些情况下使用, 例如, 为了创建一个交互式问题, 其中参赛者的程序和评测程序交换信息, 并根据自己的输出接收数据; boolfind 问题作为交互式问题的示例包含在内, 请参阅 docs/examples/boolfind.pdf 获取问题描述

用法和比较程序类似: 你可以自己创建一份程序, 或者使用我们提供的脚本, 它处理评测程序和参赛者程序在 stdin/stdout 上的双向通信(参见 boolfind_run 可执行文档中的 run 文件).

对于第一种情况, 程序必须接受和 run_wrapper 相同的调用语法, 语法记录在该文件中; 使用 run_wrapper 时, 应将其复制成 run 到你的可执行文档中; 裁判必须编写一个名为 runjury 的程序, 并接受调用语法:

runjury <testdata.in> <program.out>

其中参数分别是是读取测试数据和输出写入的文件; 该程序将通过 stdin/stdout 和参赛者的程序之间进行通信; 还必须创建一个特殊的比较程序, 因此写入 \ 的数据并不重要, 只要比较程序可以从内容中推断出参赛者程序的正确性就行

Last updated