judge: respect hack subtask configured score

This commit is contained in:
undefined committed 2022-09-06 13:02:46 +08:00
1 parent f87c320e42
commit 3401cd75bf
3 files changed
+9 -5

No files matched your search

+7 -4
View File
@@ -89,10 +89,13 @@ export const runFlow = async (ctx: Context, task: Task) => {
const runner = task.judgeCase(subtask.cases.find((i) => i.input === ctx.meta.hackRejudge));
const res = await runner(ctx, ctxSubtask, runner);
if (res) ctx.next({ case: res });
ctx.end({
status: ctxSubtask.status === STATUS.STATUS_ACCEPTED ? STATUS.STATUS_ACCEPTED : STATUS.STATUS_HACKED,
score: 97,
});
const totalScore = Math.sum(ctx.config.subtasks.map((i) => i.score));
if (ctxSubtask.status !== STATUS.STATUS_ACCEPTED) {
ctx.end({
status: STATUS.STATUS_HACKED,
score: totalScore - subtask.score,
});
} else ctx.end({ nop: true });
} else {
const tasks = [];
for (const sid in ctx.config.subtasks) tasks.push(judgeSubtask(ctx.config.subtasks[sid], sid, task.judgeCase)(ctx));
+1 -1
View File
@@ -206,7 +206,7 @@ class JudgeConnectionHandler extends ConnectionHandler {
if (msg.key !== 'ping' && msg.key !== 'prio') logger[['status', 'next'].includes(msg.key) ? 'debug' : 'info']('%o', msg);
if (msg.key === 'next') await next(msg);
else if (msg.key === 'end') {
await end({ judger: this.user._id, ...msg }).catch((e) => logger.error(e));
if (!msg.nop) await end({ judger: this.user._id, ...msg }).catch((e) => logger.error(e));
this.processing = null;
await this.newTask();
} else if (msg.key === 'status') {
+1
View File
@@ -539,6 +539,7 @@ export interface JudgeResultBody {
memory?: number;
message?: string | JudgeMessage;
compilerText?: string;
nop?: boolean;
}
export interface Task {