|
|
|
@ -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,
|
|
|
|
|