I'm designing a web app to host e-sports tournaments and want to create an algorithm that generates tournament brackets.
Given a list of participants' user ID's (minimum 4, maximum let's say 64), I want to generate a bracket in the form of a list of pairings, where each element of the pair represents a match participant or a reference to the winner of a previous match, i.e. User 1 vs. User 2, Winner of match 1 vs. User 3, and so on.
A simple example, given the array of entrants:
(user1, user2, user3, user4)
We get the end result as a set of pairs, in the logical order:
(user1, user2), (user3, user4), (winner0 vs winner1)
winner0 refers to the winner of match 0 (the first pair in the result set). Thus, the winner of the last match in the set is the winner of the tournament.
I need this to work with any size entrant list between 4 and 64 (or some other theoretical maximum), not just for powers of 2. When the entrant count is not a power of 2, some entrants must get one more or one fewer match in order to fill in the entire bracket. All initial placements will be random.
I suppose it's also possible to represent the result as a binary tree, but I'm not sure I will be able to apply it that way.