96 lines
2.2 KiB
JavaScript
96 lines
2.2 KiB
JavaScript
// Courtesy of Issac Levy
|
|
function getTc(g) {
|
|
if (g.c) {
|
|
var h = g.c.hex();
|
|
var lim = parseInt(h.substr(0, 2), 16);
|
|
return [lim < 181 ? lim * 60 : (lim - 180) * 15, parseInt(h.substr(2, 2), 16)];
|
|
}
|
|
}
|
|
function getPerf(tc) {
|
|
if (!tc) return false;
|
|
var totalTime = tc[0] + tc[1] * 40;
|
|
if (totalTime < 480) return false;
|
|
if (totalTime < 1500) return 'rapid';
|
|
return 'classical';
|
|
}
|
|
|
|
function copyPerf(p) {
|
|
return {
|
|
gl: {
|
|
r: p.gl.r,
|
|
v: p.gl.v,
|
|
d: p.gl.d
|
|
},
|
|
nb: p.nb,
|
|
re: p.re
|
|
};
|
|
}
|
|
|
|
var initialGlicko = {
|
|
r: 1500,
|
|
v: 0.06,
|
|
d: 350
|
|
};
|
|
|
|
// var query = {_id:{$in:['thibault', 'neio']}};
|
|
var query = {
|
|
'perfs.classical.nb':{$gte:1},
|
|
'v':{$exists:false}
|
|
};
|
|
|
|
var done = 0;
|
|
db.user4.find(query).forEach(u => {
|
|
if (u.v) return;
|
|
print(done + ' ' + u._id + ' - ' + u.count.game + ' games');
|
|
var classicalPerf = u.perfs.classical;
|
|
classicalPerf.la = undefined;
|
|
classicalPerf.nb = NumberInt(0);
|
|
classicalPerf.re = [];
|
|
var rapidPerf = copyPerf(classicalPerf);
|
|
var gameQuery = {
|
|
us: u._id,
|
|
s: { $gte: 30 },
|
|
ra: true,
|
|
v: { $exists: false },
|
|
c: { $exists: true }
|
|
};
|
|
db.game5.find(gameQuery, { _id: false, c: true, ca: true })
|
|
.sort({ca:-1})
|
|
.hint('us_1_ca_-1')
|
|
.forEach(g => {
|
|
switch(getPerf(getTc(g))) {
|
|
case 'rapid':
|
|
rapidPerf.nb++;
|
|
if (!rapidPerf.la) rapidPerf.la = g.ca;
|
|
break;
|
|
case 'classical':
|
|
classicalPerf.nb++;
|
|
if (!classicalPerf.la) classicalPerf.la = g.ca;
|
|
break;
|
|
}
|
|
});
|
|
[classicalPerf, rapidPerf].forEach(perf => {
|
|
if (perf.nb < 10) {
|
|
if (perf.nb < 5) perf.gl.d = 350;
|
|
else perf.gl.d = 150;
|
|
perf.gl.v = 0.06;
|
|
}
|
|
if (!perf.la) delete perf.la;
|
|
perf.nb = NumberInt(perf.nb);
|
|
});
|
|
|
|
var update = {
|
|
$set: {
|
|
v: 2 // user version 2
|
|
}
|
|
};
|
|
|
|
if (classicalPerf.nb == 0) update['$unset'] = {'perfs.classical': true};
|
|
else update['$set']['perfs.classical'] = classicalPerf;
|
|
if (rapidPerf.nb > 0) update['$set']['perfs.rapid'] = rapidPerf;
|
|
|
|
db.user4.update({_id:u._id}, update);
|
|
db.perf_stat.remove({_id:u._id + '/3'});
|
|
done++;
|
|
});
|