所以我创建了一个Fantasy Football草案助手,它是一个12队蛇形式的草案格式,进行1到12 LTR,然后是13到24 RTL,然后是25到36 LTR
- - - - >
< -----
------>
因此,具有#1
总体职位(A队)的人也会发现自己处于#24
和#25
位置。
#12
位置也有#13
位置,因为订单"包裹"网格。
以下是我根据选秀位置动态标记任何球队的整体订单的情况,但我没有数学高手,并且看起来有点特殊情况= 1不适用于任何其他情况。这有效,但我想知道真正的数学是什么,如果有人知道的话。
根据我当前的解决方案,这是我用一些示例代码创建的小提琴。
var TEAMS = 12;
var ROUNDS = 4;
var POS = 1;
var $overallOrder = $('#overallOrder');
var total = TEAMS * ROUNDS;
if (POS > TEAMS) { alert("only " + TEAMS + " teams"); return false; }
for (var i=1; i<=total; i++) {
var isMyTurn = false;
if ((i % (2*TEAMS)) == ((2*TEAMS) - (POS-1))) {
isMyTurn = true;
}
if ((i % (2*TEAMS)) == POS) {
isMyTurn = true;
}
//special case for first position ?
if (POS==1 && (i % (2*TEAMS)) == 0) {
isMyTurn = true;
}
var turnText = (isMyTurn) ? i + " My Turn!" : i ;
$overallOrder.append('<li>'+turnText+'</li>');
}
尝试从1-12更改POS var,您可以看到结果。再一次,如果有人知道的话,我正在寻找能够封装上述逻辑的数学函数。谢谢!
http://jsfiddle.net/3oy1w71c/1/
谢谢!
答案 0 :(得分:0)
您的代码中的注释会很好。
根本问题是%
从0
到2*TEAMS-1
,但您正在考虑从1
到2*TEAMS
:您最终需要一个POS==1
的特殊情况是因为(2*TEAMS)-(POS-1)
原来是2*TEAMS
,但i%(2*TEAMS)
永远不是2*TEAMS
。简单的解决方法是将其更改为((2*TEAMS)-(POS-1))%(2*TEAMS)
。这可以让你把事情搞定到
var turnText = i;
if ((i % (2*TEAMS)) == ((2*TEAMS)-(POS-1))%(2*TEAMS)
|| (i % (2*TEAMS)) == POS) {
turnText += " My Turn!";
}
另一种方法是使用(i-1)%(2*TEAMS)+1
将模数转换为1
到2*TEAMS
。
如果你想将其归结为一个不使用||
的条件,你可以利用TEAMS+.5
周围蛇的对称性。
if ( Math.abs(TEAMS+.5-((i-1)%(2*TEAMS)+1))==TEAMS+.5-POS )
但我觉得这比以前的版本更难阅读。