高级判题脚本
高级判题脚本同样是后台题目脚本的一种。
专门用来处理特殊的判题逻辑,因此写法和普通的后台题目脚本有一些区别。
设置高级判题脚本
在题目编辑器中,可以将某题的判题模式设置为“自定义判题函数”。并在“高级判题脚本”中输入题目脚本的关键字。
脚本模板
可以参考以下脚本模板:
javascript
// @ts-check
/**
* @param {Ctx} ctx 全局上下文对象
* @param {string} answer 用户答案
* @returns {boolean} result 判题结果(true-正确 false-错误)
*/
function main(ctx, answer) {
// 使用answer判断答案,返回true或者false
if (answer.trim().toUpperCase() === "ANSWER") {
return true;
}
return false;
}
//===============以下为入口函数调用脚本,一般不用修改==============
/**
* @param {Ctx} ctx 全局上下文对象
*/
function _mainProcessHelper(ctx) {
let result = main(ctx, ctx.answer);
ctx.setResult(result);
}
_mainProcessHelper(ctx);
处理流程
在用户提交答案之后,如果设置了高级判题脚本,则这个脚本会首先运行。
无论何种情况,脚本都需要通过ctx.setResult(result)
方法来设置一个判题结果。 true
表示答案正确,false
表示答案错误。
除此之外,脚本可以通过 ctx.hitMilestone(true)
来设置里程碑。但是里程碑只能在返回 false
时设置。
脚本还可以通过 ctx.setExtraMessage(message)
方法来设置额外的消息(通常用来返回里程碑的提示)。这个消息无论脚本返回正确还是错误,都有效。
在高级判题脚本执行结束后,系统仍然会执行标准的判题流程。例如,脚本返回了 false
时,即使脚本中未设置里程碑,系统仍然会判断是否有预设的里程碑,并返回对应的里程碑消息。