2022-08-16 19:47:38 -07:00
|
|
|
// Copyright 2022 Team 254. All Rights Reserved.
|
|
|
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
|
|
|
//
|
|
|
|
|
// Defines the tournament structure for a double-elimination bracket culminating in a best-of-three final.
|
|
|
|
|
|
|
|
|
|
package bracket
|
|
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
|
|
// Creates an unpopulated double-elimination bracket. Only supports having exactly eight alliances.
|
|
|
|
|
func NewDoubleEliminationBracket(numAlliances int) (*Bracket, error) {
|
|
|
|
|
if numAlliances != 8 {
|
|
|
|
|
return nil, fmt.Errorf("Must have exactly 8 alliances")
|
|
|
|
|
}
|
|
|
|
|
return newBracket(doubleEliminationBracketMatchupTemplates, newMatchupKey(6, 1), numAlliances)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var doubleEliminationBracketMatchupTemplates = []matchupTemplate{
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(1, 1),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "1",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: allianceSource{allianceId: 1},
|
|
|
|
|
blueAllianceSource: allianceSource{allianceId: 8},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(1, 2),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "2",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: allianceSource{allianceId: 4},
|
|
|
|
|
blueAllianceSource: allianceSource{allianceId: 5},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(1, 3),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "3",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2023-02-05 13:29:23 -08:00
|
|
|
redAllianceSource: allianceSource{allianceId: 2},
|
|
|
|
|
blueAllianceSource: allianceSource{allianceId: 7},
|
2022-08-16 19:47:38 -07:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(1, 4),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "4",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2023-02-05 13:29:23 -08:00
|
|
|
redAllianceSource: allianceSource{allianceId: 3},
|
|
|
|
|
blueAllianceSource: allianceSource{allianceId: 6},
|
2022-08-16 19:47:38 -07:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(2, 1),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "5",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: newLoserAllianceSource(1, 1),
|
|
|
|
|
blueAllianceSource: newLoserAllianceSource(1, 2),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(2, 2),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "6",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: newLoserAllianceSource(1, 3),
|
|
|
|
|
blueAllianceSource: newLoserAllianceSource(1, 4),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(2, 3),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "7",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: newWinnerAllianceSource(1, 1),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(1, 2),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(2, 4),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "8",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: newWinnerAllianceSource(1, 3),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(1, 4),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(3, 1),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "9",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: newLoserAllianceSource(2, 3),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(2, 2),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(3, 2),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "10",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2022-08-16 19:47:38 -07:00
|
|
|
redAllianceSource: newLoserAllianceSource(2, 4),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(2, 1),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(4, 1),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "11",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2023-02-05 13:29:23 -08:00
|
|
|
redAllianceSource: newWinnerAllianceSource(2, 3),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(2, 4),
|
2022-08-16 19:47:38 -07:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(4, 2),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "12",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2023-02-05 13:29:23 -08:00
|
|
|
redAllianceSource: newWinnerAllianceSource(3, 2),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(3, 1),
|
2022-08-16 19:47:38 -07:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(5, 1),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "13",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 1,
|
2023-02-05 13:29:23 -08:00
|
|
|
redAllianceSource: newLoserAllianceSource(4, 1),
|
|
|
|
|
blueAllianceSource: newWinnerAllianceSource(4, 2),
|
2022-08-16 19:47:38 -07:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
matchupKey: newMatchupKey(6, 1),
|
2022-08-20 16:01:54 -07:00
|
|
|
displayName: "F",
|
2022-08-17 18:36:21 -07:00
|
|
|
NumWinsToAdvance: 2,
|
2023-02-05 13:29:23 -08:00
|
|
|
redAllianceSource: newWinnerAllianceSource(4, 1),
|
2022-08-16 19:47:38 -07:00
|
|
|
blueAllianceSource: newWinnerAllianceSource(5, 1),
|
|
|
|
|
},
|
|
|
|
|
}
|