Python版本 | Javascript版本 | 白皮书
所以,我正在一个网站上计算两个玩家游戏的Glicko评级.它涉及很多浮点运算(平方根,指数,除法,所有令人讨厌的东西),我出于某种原因得到了一个完全不同的答案,从我逐行逐行翻译的算法的Python实现.Python版本基本上给出了描述算法的原始白皮书中的示例的预期答案,但Javascript版本相当有点偏差.
我在翻译时出错了还是Javascript的浮点数学不太准确?
Expected answer: [1464, 151.4]
Python answer: [1462, 155.5]
Javascript answer: [1470.8, 89.7]
Run Code Online (Sandbox Code Playgroud)
所以评级计算并不差,准确度为99.6%,但方差偏差为2/3!
编辑:人们已经指出Pyglicko版本中RD的默认值是200.这是原始实现者离开测试代码我认为的情况,因为测试用例是在RD为200的人上完成的,但是显然默认值应该是350.但是,我在Javascript的测试用例中指定了200,所以这不是问题.
编辑:更改算法以使用map/reduce.评级不太准确,方差更准确,两者都没有明显的原因.Wallbanging开始了.
忽略这是一个完全玩具应用程序的事实.如果没有时间这是正确的做事方式,请告诉我.
所以,我有<form>两个<input>字段.我有一个eventListener坚持<form>听"提交"事件.然后我想运行一个函数,它对用户放入input1或input2的数字做一些事情.用户输入一个数字,例如input2,命中enter,函数调用this.id,但返回表单的id,而不是表单子项的实际输入框.
我能做什么?
编辑:我应该form以某种方式查看所有子元素并测试每个孩子以查看其中是否有某些内容,然后alertGrade使用非空子项作为参数调用?
HTML:
<form id="form">
<input type="number" id="score1" value="" min="0" max="100">
<input type="number" id="score2" value="" min="0" max="100">
<input type="submit" value="Grade">
</form>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
function alertGrade(elementID) {
var score = document.getElementById(elementID).value;
var grade = calculateGrade(score);
alert("Score of " + score + ": " + grade);
}
function loaded() {
document.getElementById("form").addEventListener("submit",
function(event) {
event.preventDefault();
// this.id will show "form"
alert(this.id);
alertGrade(this.id);},
false);
}
window.addEventListener("load", loaded, false);
Run Code Online (Sandbox Code Playgroud) function indexArticles(callback) {
fs.readdir("posts/", function(err, files) {
async.map(files, readPost, function(err, markdown) {
async.map(markdown, parse, function(err, results) {
async.sortBy(results, function(obj, callback) {
callback(err, obj.date);
}, function(err, sorted) {
callback( {"articles": sorted.reverse()} );
});
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
我正试图弄清楚如何使这个更漂亮 - 你可以告诉我我正在使用caolan的异步库,但我不确定使用哪种控制流结构.例如,如果我使用async.waterfall,会产生相当多的代码,每个步骤都必须包含在匿名函数中.例如,这只是带有瀑布的嵌套版本的前两行:
function indexArticles(callback) {
async.waterfall([
function(callback) {
fs.readdir("posts/", function(err, files) {
callback(err, files)
})
},
function(files, callback) {
async.map(files, readPost, function(err, markdown) {
callback(err, markdown)
})
}])
}
Run Code Online (Sandbox Code Playgroud)
你会如何改善这一点?
如果有一种方法不仅从左边部分地应用参数,那么我可以看到,例如,
function indexArticles(callback) {
async.waterfall([
async.apply(fs.readdir, "posts/"),
async.apply(async.map, __, readPost),
async.apply(async.map, __, parse), …Run Code Online (Sandbox Code Playgroud) 鉴于以下,在伪代码中
abstract public class Bug {
private static int BREEDTIME;
public void breed() {
if (this.age % this.BREEDTIME) {
world.setAt(new this.class(newX, newY, this.world);
}
}
}
public class Ant extends Bug {
private static int BREEDTIME = 3;
}
public class Doodlebug extends Bug {
private static int BREEDTIME = 8;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法定义breed()方法,这取决于任何子类调用它的BREEDTIME?bug保证每个子类都已初始化BREEDTIME.
此外,Ants应该繁殖其他Ants,因此在breed()内部调用的构造函数必须是调用breed()的子类类型的构造函数.
我在这里吠叫错了吗?