Skip to content

高级判题脚本

高级判题脚本同样是后台题目脚本的一种。

专门用来处理特殊的判题逻辑,因此写法和普通的后台题目脚本有一些区别。

设置高级判题脚本

在题目编辑器中,可以将某题的判题模式设置为“自定义判题函数”。并在“高级判题脚本”中输入题目脚本的关键字

脚本模板

可以参考以下脚本模板:

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 时,即使脚本中未设置里程碑,系统仍然会判断是否有预设的里程碑,并返回对应的里程碑消息。

Released under the MIT License. Powered by VitePress.