mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
judge: 修复交互题计分异常的问题
This commit is contained in:
1 parent
4fd580e4ed
commit
a3396d30a8
4 files changed
+8
-7
No files matched your search
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@hydrooj/hydrojudge",
|
"name": "@hydrooj/hydrojudge",
|
||||||
"bin": "bin/hydrojudge.js",
|
"bin": "bin/hydrojudge.js",
|
||||||
"version": "2.8.5",
|
"version": "2.8.6",
|
||||||
"main": "package.json",
|
"main": "package.json",
|
||||||
"author": "undefined <i@undefined.moe>",
|
"author": "undefined <i@undefined.moe>",
|
||||||
"repository": "https://github.com/hydro-dev/Hydro.git",
|
"repository": "https://github.com/hydro-dev/Hydro.git",
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ const checkers: Record<string, Checker> = {
|
|||||||
return {
|
return {
|
||||||
status: STATUS.STATUS_SYSTEM_ERROR,
|
status: STATUS.STATUS_SYSTEM_ERROR,
|
||||||
score: 0,
|
score: 0,
|
||||||
message: '',
|
message: stderr,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return parse(stderr, config.score);
|
return parse(stderr, config.score);
|
||||||
|
|||||||
@@ -41,15 +41,16 @@ function judgeCase(c) {
|
|||||||
status = STATUS.STATUS_TIME_LIMIT_EXCEEDED;
|
status = STATUS.STATUS_TIME_LIMIT_EXCEEDED;
|
||||||
} else if (memory_usage_kb > ctxSubtask.subtask.memory * 1024) {
|
} else if (memory_usage_kb > ctxSubtask.subtask.memory * 1024) {
|
||||||
status = STATUS.STATUS_MEMORY_LIMIT_EXCEEDED;
|
status = STATUS.STATUS_MEMORY_LIMIT_EXCEEDED;
|
||||||
} else if (code) {
|
} else if (code !== 13/* Broken Pipe */ || (code === 13 && !resInteractor.code)) {
|
||||||
status = STATUS.STATUS_RUNTIME_ERROR;
|
status = STATUS.STATUS_RUNTIME_ERROR;
|
||||||
if (code < 32) message = signals[code];
|
if (code < 32) message = signals[code];
|
||||||
else message = { message: 'Your program returned {0}.', params: [code] };
|
else message = { message: 'Your program returned {0}.', params: [code] };
|
||||||
} else {
|
} else {
|
||||||
const result = parse(resInteractor.files.stderr, ctx.config.score);
|
const result = parse(resInteractor.stderr, ctxSubtask.subtask.score);
|
||||||
status = result.status;
|
status = result.status;
|
||||||
score = result.score;
|
score = result.score;
|
||||||
message = result.message;
|
message = result.message;
|
||||||
|
if (resInteractor.code) message += ` (Interactor exited with code ${resInteractor.code})`;
|
||||||
}
|
}
|
||||||
ctxSubtask.score = Score[ctxSubtask.subtask.type](ctxSubtask.score, score);
|
ctxSubtask.score = Score[ctxSubtask.subtask.type](ctxSubtask.score, score);
|
||||||
ctxSubtask.status = Math.max(ctxSubtask.status, status);
|
ctxSubtask.status = Math.max(ctxSubtask.status, status);
|
||||||
@@ -59,7 +60,7 @@ function judgeCase(c) {
|
|||||||
status: STATUS.STATUS_JUDGING,
|
status: STATUS.STATUS_JUDGING,
|
||||||
case: {
|
case: {
|
||||||
status,
|
status,
|
||||||
score: 0,
|
score,
|
||||||
time_ms: time_usage_ms,
|
time_ms: time_usage_ms,
|
||||||
memory_kb: memory_usage_kb,
|
memory_kb: memory_usage_kb,
|
||||||
message,
|
message,
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ async function adaptResult(result, params) {
|
|||||||
ret.fileIds = result.fileIds || {};
|
ret.fileIds = result.fileIds || {};
|
||||||
if (params.stdout) await fs.writeFile(params.stdout, ret.files.stdout || '');
|
if (params.stdout) await fs.writeFile(params.stdout, ret.files.stdout || '');
|
||||||
else ret.stdout = ret.files.stdout || '';
|
else ret.stdout = ret.files.stdout || '';
|
||||||
if (params.stderr) await fs.writeFile(params.stderr, ret.files.stderr || '');
|
if (params.stderr) await fs.writeFile(params.stderr, ret.files.stderr || result.error || '');
|
||||||
else ret.stderr = ret.files.stderr || '';
|
else ret.stderr = ret.files.stderr || result.error || '';
|
||||||
if (result.error) ret.error = result.error;
|
if (result.error) ret.error = result.error;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user