From e118d80057b0ccc191f245ed4ffd77343f645904 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 30 Sep 2026 10:44:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=88=A4=E9=A2=98):=20=E9=A2=98=E7=9B=AE?= =?UTF-8?q?=E7=BC=BA=E6=B5=8B=E8=AF=95=E6=95=B0=E6=8D=AE=E6=97=B6=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E7=9C=8B=E5=88=B0=E3=80=8C=E7=BC=96=E8=AF=91=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E3=80=8D=E5=92=8C=E4=B8=80=E5=8F=A5=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E3=80=8CTest=20case=20not=20found=E3=80=8D=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E4=B8=BA=E6=98=AF=E8=87=AA=E5=B7=B1=E5=86=99=E9=94=99=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 判题机的 err 只有 CompileError 是学生的错,别的(JudgeClientError 之类)原来也一律 记成编译错误,全库 337 条,最近一条在 2026-09。改记系统错误,学生那边说「判题出了 问题,不是你的代码写错了,告诉老师」,不再贴英文原文。 Co-Authored-By: Claude Opus 5.5 --- apps/api/src/judge/run.ts | 17 +++++++++++++---- .../oj/problem/components/SubmissionResult.vue | 4 ++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/apps/api/src/judge/run.ts b/apps/api/src/judge/run.ts index 0d38bcb..34088be 100644 --- a/apps/api/src/judge/run.ts +++ b/apps/api/src/judge/run.ts @@ -538,10 +538,19 @@ export async function judgeSubmission(job: JudgeJobData) { if (response.err) { const errInfo = typeof response.data === "string" ? response.data : JSON.stringify(response.data) - result = JudgeStatus.COMPILE_ERROR - statisticInfo = { - err_info: shiftCompileLines(errInfo, template ? template.prepend.split("\n").length : 0), - score: 0, + // 只有 CompileError 是学生的错。别的(JudgeClientError 的「Test case not found」 + // 这类)是题目或判题机的问题:原来一律记成编译错误,学生看到一句英文、以为自己写错了, + // 全库 337 条,最近一条就在 2026-09。 + if (response.err === "CompileError") { + result = JudgeStatus.COMPILE_ERROR + statisticInfo = { + err_info: shiftCompileLines(errInfo, template ? template.prepend.split("\n").length : 0), + score: 0, + } + } else { + console.warn(`[judge] 判题机报错 ${row.submission.id}: ${response.err} ${errInfo}`) + result = JudgeStatus.SYSTEM_ERROR + statisticInfo = { err_info: errInfo, score: 0 } } } else { if (!Array.isArray(response.data)) { diff --git a/apps/web/src/oj/problem/components/SubmissionResult.vue b/apps/web/src/oj/problem/components/SubmissionResult.vue index b731ac6..a11e8c3 100644 --- a/apps/web/src/oj/problem/components/SubmissionResult.vue +++ b/apps/web/src/oj/problem/components/SubmissionResult.vue @@ -146,6 +146,10 @@ const msg = computed(() => { "程序占的内存太多了。通常是列表、数组开得太大,或者在循环里不停地往里加东西、停不下来。\n\n" } + // 判题机的原文是英文(多半是「Test case not found」,题目缺测试数据),学生看了只会以为自己错了 + if (result === SubmissionStatus.system_error) + return "判题出了问题,不是你的代码写错了。告诉老师看一下这道题。" + if (result !== SubmissionStatus.ast_check_failed && props.submission.statisticInfo?.err_info) { msg += stripJudgePath(props.submission.statisticInfo.err_info) }