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: seed_round[1][0] & seed_round[1][1] var seed_rounds = []; // Create empty arrays inside seed_round for(var i = 0; i < num_rounds; i++) { seed_rounds[i] = []; } // Assuming no upsets // Final is seed 1 and seed 2 seed_rounds[num_rounds] = [ seeds[0], seeds[1] ]; // For each round in the bracket for(var r = num_rounds; r > 0; r--) { var round = seed_rounds[r]; var feed_round = seed_rounds[r - 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++) { var num_teams_in_round = round.length * 2; // Feeder match seed A = current match seed "m" feed_round[m * 2] = round[m]; // Feeder match seed B = # teams in feeder round plus 1 minus current match seed "m" feed_round[(m * 2) + 1] = num_teams_in_round + 1 - round[m]; } } var firstHalf = []; var secondHalf = []; for(var i = 0; i < (seeds.length / 2); i++) { firstHalf[i] = seed_rounds[1][i]; } for(var i = 0; i < num_rounds; i++) { secondHalf[i] = seed_rounds[1].slice((seeds.length / 2), (seeds.length)); } secondHalf[1].reverse(); var newSeeds = firstHalf.concat(secondHalf[1]); var singleElim8Data = { teams : [ // Matchups [ newSeeds[0], newSeeds[1] ], [ newSeeds[2], newSeeds[3] ], [ newSeeds[4], newSeeds[5] ], [ newSeeds[6], newSeeds[7] ] ], results : [[ [ [1, 0], [1, 0], [0, 1], [0,1] ], [ [1, 0], [0, 1] ], [ [1, 0], [0, 1] ] ]] } $(function() { $('#singleElim8').bracket({ init: singleElim8Data }) })