使用计算两个对手之间的新评分。 它需要一个数组,包含两个预先评分,并返回一个新数组,包含两个后评分。赢家的评分是数组的第一个元素。
使用指数 **
操作符和数学运算符计算每个对手的期望得分(获胜几率),并计算每个对手的新评级。忽略第二个参数,使用默认的 k-factor 为 32,或提供自定义的 k-factor值。
const elo = ([a, b], kFactor = 32) => { const expectedScore = (self, opponent) => 1 / (1 + 10 ** ((opponent - self) / 400)); const newRating = (rating, i) => rating + kFactor * (i - expectedScore(i ? a : b, i ? b : a)); return [newRating(a, 1), newRating(b, 0)]; };
elo([1200, 1200]); // [1216, 1184] elo([1000, 2000]); // [1031.8991261061358, 1968.1008738938642] elo([1500, 1000]); // [1501.7036868864648, 998.2963131135352] elo([1200, 1200], 64); // [1232, 1168]
更多代码 JavaScript 实用代码片段 请查看 https://www.7psus5.com/30-seconds-of-code/
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂