0

JavaScript と Jquery を使用してブラケットを表示するトーナメント ブラケット システムを作成するために、ここのいくつかの投稿を使用しました。

私は 1-16 でシードされた 16 チームを持っています。現時点で、ソートされたシードは次のとおりです。

[1,8],[4,5],[2,7],[3,6]

ご覧のとおり、ある程度は機能しますが、準決勝は 1v4 と 2v3 になり、これは正しくありません。準決勝を 1v3 と 2v4 にしたいのですが、どうやってもこれを印刷できないようです。したがって、次のようになります。

[1,8],[3,6],[5,4],[7,2]

これにより、紙の上の括弧を見ると、1 と 2 が括弧の反対側にあるという意味では正しいのですが、何を試してもうまくいきません。

編集:これがより多くのチームで機能するようにしたいので、16/32 チーム トーナメントですが、このアルゴリズムでそうしようとすると、正しいシードが得られないようです。

これが私のコードです:

var seeds = [ 1,2,3,4,5,6,7,8],
    num_rounds = Math.log(seeds.length) / Math.log(2);

// 2-dimensional array
// Each subarray holds the seeds active in that round in order of matches played
// Example:
// seeds in first match of 2nd round are: bracket_round[1][0] & bracket_round[1][1]
var bracket_round = [];

// Create empty arrays inside bracket_round
for(var i = 0; i < num_rounds; i++) {
  bracket_round[i] = [];
}

// Assuming no upsets
// Final is seed 1 and seed 2
bracket_round[num_rounds] = [ seeds[0], seeds[1] ];

// For each round in the bracket
for(var roundNum = num_rounds; roundNum > 0; roundNum--) {
  var round = bracket_round[roundNum];
  var prev_round = bracket_round[roundNum - 1];

  // For each seed in the round, work out who they defeated in previous round, storing result
  for(var m = 0; m < round.length; m++) {
    // round.length = number of matches in the round
    // number of teams in the round will be, number of matches * 2
    var num_teams_in_round = round.length * 2;

    // previous match team A = current match team "m"
    prev_round[m * 2] = round[m];

    // previous match team  B = (# teams in previous round + 1) - (current match seed "m")
    prev_round[(m * 2) + 1] = (num_teams_in_round + 1) - round[m];
  }
}

document.write(bracket_round[1]);

var singleElimData = {
    teams : [              // Matchups
        [ bracket_round[1][0], bracket_round[1][1] ],
    [ bracket_round[1][2], bracket_round[1][3] ],
    [ bracket_round[1][4], bracket_round[1][5] ],
    [ bracket_round[1][6], bracket_round[1][7] ]
  ],
  results : [[
      [ [1, 0], [1, 0], [1,0], [1, 0] ],
      [ [1, 0], [1, 0] ],
      [ [1, 0], [0, 1] ]
    ]
  ]
}

$(function() {
    $('#singleElim').bracket({
        init: singleElimData
    })
})

1 = 0001    0001 = 1
2 = 0010    0011 = 3
3 = 0011    0010 = 2
4 = 0100    0110 = 6
5 = 0101    0111 = 7
6 = 0110    0101 = 5
7 = 0111    0100 = 4
8 = 1111    1000 = 8
4

1 に答える 1

0

ツリーを作成するときに、グレーコードを使用して、どのエッジがプレーヤーであるかを判断できます。基本的には、ビットを逆にして 1 を加算します

于 2012-12-19T19:26:49.887 に答える