From 9b221c436353f6836cfe831bd5d03aac67d1ca85 Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 9 Mar 2022 19:00:28 +0800 Subject: [PATCH] core: update rating calculation --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/script/rating.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 9cc8da5dd..ee3690497 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.8.1", + "version": "3.8.2", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/script/rating.ts b/packages/hydrooj/src/script/rating.ts index b94b543fa..f030e0cd0 100644 --- a/packages/hydrooj/src/script/rating.ts +++ b/packages/hydrooj/src/script/rating.ts @@ -54,15 +54,15 @@ export const RpTypes: Record = { contest: { async run(domainIds, udict, report) { const contests: Tdoc<30>[] = await contest.getMulti('', { domainId: { $in: domainIds }, rated: true }) - .sort({ _id: 1 }).toArray() as any; + .limit(10).toArray() as any; if (contests.length) await report({ message: `Found ${contests.length} contests in ${domainIds[0]}` }); - for (const tdoc of contests) { + for (const tdoc of contests.reverse()) { const start = Date.now(); const cursor = contest.getMultiStatus(tdoc.domainId, { docId: tdoc.docId, journal: { $ne: null }, }).sort(contest.RULES[tdoc.rule].statusSort); - if (!await cursor.count()) return; + if (!await cursor.count()) continue; const [rankedTsdocs] = await contest.RULES[tdoc.rule].ranked(tdoc, cursor); const users = rankedTsdocs.map((i) => ({ uid: i[1].uid, rank: i[0], old: udict[i[1].uid] })); // FIXME sum(rating.new) always less than sum(rating.old) @@ -77,7 +77,7 @@ export const RpTypes: Record = { }, }); } - for (const key in udict) udict[key] = udict[key] / 2 - 700; + for (const key in udict) udict[key] = max(1, udict[key] / 4 - 375); }, hidden: false, base: 1500,