我有一个非常有趣的问题,想听听您会采取的一些方法。
场景:
由32
个玩家组成的锦标赛,每个玩家都由一组对象组成,例如:
[
{ player: 'Badgy', points: 5, place: tba, reward: 0 },
{ player: 'Ceff', points: 5, place: tba, reward: 0},
{ player: 'Niclas', points: 10, place: tba, reward: 0}
]
现在为每个热门地点定义了价格,例如:
1 Place = 100 Coins
2 Place = 50 Coins
3 Place = 10 Coins
现在在此示例中,'Ceff'和'Badgy'具有相同的点数,这意味着它们都必须位于第2位并获得(place2 + place3) / 2
的奖励,在此示例中,他们每个人将获得30个硬币。
现在我尝试了一下,但是我很难找到一种解决方案,特别是如果发生3条以上的平局。
答案 0 :(得分:0)
您可以为找到的第一个相同点的组取一个总和和一个索引,最后一个相同组的取平均值。
var prices = [100, 50, 20, 15, 10, 5, 2, 1],
points = [ 20, 10, 10, 5, 5, 5, 4, 3],
sum = 0,
index,
profit = points.reduce((r, v, i, { [i - 1]: last }) => {
if (last !== v) {
sum = 0;
index = i;
}
sum += prices[i];
var avg = sum / (i - index + 1);
while (i >= index) r[i--] = avg;
return r;
}, []);
console.log(profit);