core: update rating calculation

pull/315/head
undefined 3 years ago
parent ad3a0c48aa
commit 9b221c4363

@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "3.8.1",
"version": "3.8.2",
"bin": "bin/hydrooj.js",
"main": "src/loader",
"module": "src/loader",

@ -54,15 +54,15 @@ export const RpTypes: Record<string, RpDef> = {
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<string, RpDef> = {
},
});
}
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,

Loading…
Cancel
Save