diff --git a/packages/hydrojudge/src/judge/default.ts b/packages/hydrojudge/src/judge/default.ts index 0020965fb..d3e735a88 100644 --- a/packages/hydrojudge/src/judge/default.ts +++ b/packages/hydrojudge/src/judge/default.ts @@ -23,13 +23,13 @@ function judgeCase(c: NormalizedCase) { addressSpaceLimit: address_space_limit, processLimit: process_limit, }, - `judgeCase[${c.id}]${mp.i ? `[pass=${mp.i}]` : ''}<${ctx.rid}>`, + `judgeCase[${c.id}]${mp.i ? `{pass=${mp.i}}` : ''}<${ctx.rid}>`, ); const { code, signalled, time, memory, fileIds, } = res; let { status } = res; - let message: any = mp.i ? `[Pass ${mp.i}] ` : ''; + let message: any = ''; let score = 0; let nextPass: any; if (status === STATUS.STATUS_ACCEPTED) { @@ -38,7 +38,9 @@ function judgeCase(c: NormalizedCase) { } else if (memory > c.memory * 1024) { status = STATUS.STATUS_MEMORY_LIMIT_EXCEEDED; } else { - const resChecker = await checkers[ctx.config.checker_type]({ + ({ + status, score, message, nextPass, + } = await checkers[ctx.config.checker_type]({ execute: ctx.checker.execute, copyIn: { ...ctx.checker.copyIn, @@ -58,13 +60,13 @@ function judgeCase(c: NormalizedCase) { HYDRO_MEMORY_USAGE: Math.floor(memory / 1024).toString(), ...(mp.i ? { HYDRO_MULTI_PASS: mp.i.toString() } : {}), }, - }); - ({ status, score, nextPass } = resChecker); - message += resChecker.message; + })); + if (mp.i && typeof message === 'string') message = `${message} [Pass ${mp.i}]`; } } else if (status === STATUS.STATUS_RUNTIME_ERROR && code && ctx.config.detail === 'full') { if (code < 32 && signalled) message = signals[code]; - else message = { message: `${message}Your program returned {0}.`, params: [code] }; + else message = { message: 'Your program returned {0}.', params: [`${code}${mp.i ? ` [Pass ${mp.i}]` : ''}`] }; + if (mp.i && typeof message === 'string') message = `${message} [Pass ${mp.i}]`; } if (nextPass) { if (mp.i < ctx.config.multi_pass) {