From 36cce6d1bde47345aa2577a45590f0907f3344ce Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 11 Oct 2021 20:15:54 +0800 Subject: [PATCH] core: acm scoreboard: mark first accept --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/model/contest.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 4d4171a3e..8027cf518 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.39.17", + "version": "2.39.18", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index 74b221e52..43faf12c3 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -107,6 +107,17 @@ const acm: ContestRule = { }); } } + const first = {}; + for (const pid of tdoc.pids) first[pid] = new ObjectID().generationTime; + for (const [, tsdoc] of rankedTsdocs) { + const tsddict = {}; + for (const item of tsdoc.journal || []) tsddict[item.pid] = item; + for (const pid of tdoc.pids) { + if (tsddict[pid]?.status === STATUS.STATUS_ACCEPTED && tsddict[pid].rid.generationTime < first[pid]) { + first[pid] = tsddict[pid].rid.generationTime; + } + } + } const rows: ScoreboardRow[] = [columns]; for (const [rank, tsdoc] of rankedTsdocs) { const tsddict = {}; @@ -141,6 +152,9 @@ const acm: ContestRule = { score: accept ? 100 : 0, value: '{0}\n{1}'.format(colAccepted, colTimeStr), raw: rid, + style: accept && rid.generationTime === first[pid] + ? 'background-color: rgb(217, 240, 199);' + : undefined, }); } }