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 只支其中描述功能的子集, 特别的, 调用语法是:
其中 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
的程序, 并接受调用语法:
其中参数分别是是读取测试数据和输出写入的文件; 该程序将通过 stdin/stdout 和参赛者的程序之间进行通信; 还必须创建一个特殊的比较程序, 因此写入 \ 的数据并不重要, 只要比较程序可以从内容中推断出参赛者程序的正确性就行
Last updated