Hun*_*ell 6 javascript arrays algorithm math jquery
我正在创建一个简单的支架系统,我需要一种方法来检查是否有正确数量的团队,或者如果我的程序需要补偿再见轮次.
现在,我正在使用此功能检查"两个权力":
function validBracket(data) {
var x = data.teams.length;
return ((x != 0) && !(x & (x - 1)));
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但我需要知道要添加多少个Bye轮.例如,如果我有16 teams,我就不需要再增加团队了.但是,如果我有12 teams,我需要第一个4 teams获得再见.
如何计算要添加到括号中的再见轮数?并且硬编码两个幂的数组会更好吗?
在伪代码中,我想到的是这样的东西:
if(validateBracket(data)) {
// Valid number of teams (power of two). Keep going.
} else {
var byeRounds = calculateByeRounds();
}
Run Code Online (Sandbox Code Playgroud)
注意:我宁愿不使用如下两个幂的数组:
var powersOfTwo = [2,4,8,16,32,...];
这背后的原因是我会限制可以放入系统的团队数量(但是,我认为一个人不会超过256个团队).
Ama*_*dan 11
var needed = (1 << Math.ceil(Math.log2(n))) - n;
Run Code Online (Sandbox Code Playgroud)
针对极端情况的更通用的解决方案:
var needed = Math.pow(2, Math.ceil(Math.log2(n))) - n;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |