public async Task <BracketData> FillInBracketWithDataAsync(BracketData data, List <Match> matches) { return(await Task.Run(() => { int[] eachRoundMatchQty = ComputeMatchQtyForTournamentRounds(data.Rounds.Count, data.NumberOfTeams); int[] eachRoundMaxIndex = ComputeRoundMaxIndex(eachRoundMatchQty, data.NumberOfTeams); data.Rounds.ForEach(r => r.Matches = new List <MatchResponse>()); for (int i = 1; i <= data.NumberOfTeams; i++) { foreach (var t in eachRoundMaxIndex) { if (i > t) { continue; } var match = matches.FirstOrDefault(m => m.BracketIndex == i); if (match == null) { data.Rounds[eachRoundMaxIndex.IndexOf(t)].Matches.Add(new MatchResponse()); break; } data.Rounds[eachRoundMaxIndex.IndexOf(t)].Matches.Add(mapper.Map <MatchResponse>(match)); break; } } return data; })); }
public async Task <BracketData> FillInBracketWithBlankDataAsync(BracketData data) { return(await Task.Run(() => { for (int i = 1; i <= data.Rounds.Count; i++) { var numOfIterationDivide = (int)Math.Pow(2, i); var iterationQty = data.NumberOfTeams / numOfIterationDivide; data.Rounds[i - 1].Matches = new List <MatchResponse>(); Parallel.For(0, iterationQty, (index) => { data.Rounds[i - 1].Matches.Add(new MatchResponse()); }); } return data; })); }
public static async Task <BracketData> CreateBracketTemplate(int numberOfTeams) { return(await Task.Run(() => { var bracketData = new BracketData { NumberOfTeams = numberOfTeams }; bracketData.Rounds = new List <BracketRound>(); int numOfRounds = (int)Math.Log(numberOfTeams, 2); for (int i = 0; i < numOfRounds; i++) { bracketData.Rounds.Add(new BracketRound { RoundIndex = i + 1 }); } return bracketData; })); }