UNPKG

brackets-manager

Version:

A simple library to manage tournament brackets (round-robin, single elimination, double elimination)

87 lines 3.56 kB
"use strict"; // https://web.archive.org/web/20200601102344/https://tl.net/forum/sc2-tournaments/202139-superior-double-elimination-losers-bracket-seeding Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultMinorOrdering = exports.ordering = void 0; exports.ordering = { 'natural': (array) => [...array], 'reverse': (array) => [...array].reverse(), 'half_shift': (array) => [...array.slice(array.length / 2), ...array.slice(0, array.length / 2)], 'reverse_half_shift': (array) => [...array.slice(0, array.length / 2).reverse(), ...array.slice(array.length / 2).reverse()], 'pair_flip': (array) => { const result = []; for (let i = 0; i < array.length; i += 2) result.push(array[i + 1], array[i]); return result; }, 'inner_outer': (array) => { if (array.length === 2) return array; const size = array.length / 4; const innerPart = [array.slice(size, 2 * size), array.slice(2 * size, 3 * size)]; // [_, X, X, _] const outerPart = [array.slice(0, size), array.slice(3 * size, 4 * size)]; // [X, _, _, X] const methods = { inner(part) { return [part[0].pop(), part[1].shift()]; }, outer(part) { return [part[0].shift(), part[1].pop()]; }, }; const result = []; /** * Adds a part (inner or outer) of a part. * * @param part The part to process. * @param method The method to use. */ function add(part, method) { if (part[0].length > 0 && part[1].length > 0) result.push(...methods[method](part)); } for (let i = 0; i < size / 2; i++) { add(outerPart, 'outer'); // Outer part's outer add(innerPart, 'inner'); // Inner part's inner add(outerPart, 'inner'); // Outer part's inner add(innerPart, 'outer'); // Inner part's outer } return result; }, 'groups.effort_balanced': (array, groupCount) => { const result = []; let i = 0, j = 0; while (result.length < array.length) { result.push(array[i]); i += groupCount; if (i >= array.length) i = ++j; } return result; }, 'groups.seed_optimized': (array, groupCount) => { const groups = Array.from({ length: groupCount }, (_) => []); for (let run = 0; run < array.length / groupCount; run++) { if (run % 2 === 0) { for (let group = 0; group < groupCount; group++) groups[group].push(array[run * groupCount + group]); } else { for (let group = 0; group < groupCount; group++) groups[groupCount - group - 1].push(array[run * groupCount + group]); } } return groups.flat(); }, 'groups.bracket_optimized': () => { throw Error('Not implemented.'); }, }; exports.defaultMinorOrdering = { // 1 or 2: Not possible. 4: ['natural', 'reverse'], 8: ['natural', 'reverse', 'natural'], 16: ['natural', 'reverse_half_shift', 'reverse', 'natural'], 32: ['natural', 'reverse', 'half_shift', 'natural', 'natural'], 64: ['natural', 'reverse', 'half_shift', 'reverse', 'natural', 'natural'], 128: ['natural', 'reverse', 'half_shift', 'pair_flip', 'pair_flip', 'pair_flip', 'natural'], }; //# sourceMappingURL=ordering.js.map