2

的HN算法:黑客新聞算法在Rails中?

(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 

回答

3

從你所描述的一切看起來都很好。唯一可能成爲問題的是使用/運算符。如果兩個操作數都是整數(即5/2 = 2),則該運算符會返回整數,但使用**且float值總是返回float(即使值爲整數時,例如9**1.5 = 27.0),因此您在此處安全。

此外它會很高興使用/ 60**2而不是/ 60/60。我可能會使用:

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

我認爲它不會傷害到刪除圓位。