Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- totalDailyRuns = getTotalNumber()
- reqRuns = totalDailyRuns/3
- players = getPlayers()
- function weighScores(scores)
- for i = 1, #scores -- 1 being most recent
- scores[i] = scores[i] * (log(totalDailyRuns - (i - 1)) / log(totalDailyRuns))
- end
- return scores
- end
- function determinePlayerScores()
- for i = 1, #players
- scores = players[i].getScores()
- players[i].weightedScores = weighScores(scores)
- end
- end
- function getTotalScore(weightedScores)
- sum(max(weightedScores, reqRuns)) -- get a sum of maximum 33% of the dailies after weighted scores
- end
- function determineAllTimeLeaderboard()
- totalScores = {}
- for i = 1, #players
- totalScore[i].score = getTotalScore(player.weightedScores)
- totalScore[i].player = players[i]
- end
- totalScore.sortBy(score)
- end
- -- base algorithm
- -- suggested changes
- -- normalize each daily score, so max score is 10k (or any other arbitrary number)
- function normalizedDailyScores()
- for i = 1, #dailies do
- for j = 1, #dailies.scores do
- dailies[i].normalizedDailyScores[j] = (dailies[i].scores[i] / max(dailies[i].scores)) * 10000
- end
- end
- end
- -- don't decrease weight of last few recent dailies
- function weighScores(scores)
- for i = 1, #scores -- 1 being most recent
- if(i <= 5) then
- scores[i] = scores[i]
- else
- scores[i] = scores[i] * (log(totalDailyRuns - (i - 1 - 5)) / log(totalDailyRuns))
- end
- end
- return scores
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement