Rails中的黑客新闻算法?

时间:2014-03-29 16:15:59

标签: ruby-on-rails ruby ruby-on-rails-3 algorithm ruby-on-rails-4

HN算法:

(p - 1) / (t + 2)^1.5

其中:

p = votes of question and first answer
t = age in hours

考虑具有以下字段的链接模型:

up_votes
down_votes
created_at

这个实现在Ruby on Rails中是否正确?我不确定是不是:

def rank(link)
  p = link.up_votes - link.down_votes
  t = (Time.now - link.created_at).to_i / 60 / 60
  return (p - 1) / (t + 2)**1.5
end

1 个答案:

答案 0 :(得分:3)

所有看起来都很好。唯一可能是问题的是使用/运算符。如果两个操作数都是整数(即5/2 = 2),则此运算符返回整数,但是使用带浮点值的**始终返回float(即使值为整数,例如9**1.5 = 27.0),因此您在这里安全

使用/ 60**2代替/ 60 / 60也不错。我可能会用:

t = ((Time.now - link.created_at) / 1.hour).round

我认为删除圆形钻头不会有什么坏处。