From 1173407598f9c50e03426e0044c9b5d26b015ffb Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 8 Mar 2022 03:54:56 +0800 Subject: [PATCH] core: adjust problem difficulty weight --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/script/rating.ts | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 7369870a1..9cc8da5dd 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.8.0", + "version": "3.8.1", "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 e3f5e03c6..b94b543fa 100644 --- a/packages/hydrooj/src/script/rating.ts +++ b/packages/hydrooj/src/script/rating.ts @@ -22,6 +22,8 @@ interface RpDef { base: number; } +const { log, max, min } = Math; + export const RpTypes: Record = { problem: { async run(domainIds, udict, report) { @@ -38,13 +40,13 @@ export const RpTypes: Record = { }, ); const difficulty = +pdoc.difficulty || difficultyAlgorithm(pdoc.nSubmit, pdoc.nAccept) || 5; - const p = difficulty / (Math.log(pdoc.nAccept) + 1) / 100; + const p = difficulty / 100; let psdoc; while (psdoc = await cursor.next()) { - udict[psdoc.uid] += Math.max(psdoc.score, 100) * p; + udict[psdoc.uid] += min(psdoc.score, 100) * p; } } - for (const key in udict) udict[key] = Math.max(0, Math.log(udict[key]) / Math.log(1.03)); + for (const key in udict) udict[key] = max(0, min(udict[key], log(udict[key]) / log(1.03))); }, hidden: false, base: 0, @@ -75,7 +77,7 @@ export const RpTypes: Record = { }, }); } - for (const key in udict) udict[key] = udict[key] / 2 - 725; + for (const key in udict) udict[key] = udict[key] / 2 - 700; }, hidden: false, base: 1500,