public override void CalculateTeamIndexRoundsTable() { if (TeamIndexRoundsTable?.Count > 0) { return; } var teamIndexRoundsTable = new List <(IReadOnlyList <int> FirstTeamIndexes, IReadOnlyList <int> SecondTeamIndexes)>(NumberOfRounds); for (var round = 0; round < NumberOfRounds; round++) { var teamIndexes = TeamIndexesLinkedList.ToList(); var firstTeamIndexes = new List <int>(HalfTeamsCount); var secondTeamIndexes = new List <int>(HalfTeamsCount); for (var i = 0; i < HalfTeamsCount; i++) { firstTeamIndexes.Add(teamIndexes[i]); secondTeamIndexes.Add(teamIndexes[NumberOfTeams - i - 1]); } teamIndexRoundsTable.Add((firstTeamIndexes, secondTeamIndexes)); RotateList(); } TeamIndexRoundsTable = teamIndexRoundsTable; }
public override void CalculateTeamIndexMatchesRounds() { if (TeamIndexMatchesRounds?.Count > 0) { return; } var teamIndexMatchesRounds = new List <IReadOnlyList <(int FirstTeamIndex, int SecondTeamIndex)> >(NumberOfRounds); for (var round = 0; round < NumberOfRounds; round++) { var teamIndexMatches = new List <(int FirstTeamIndex, int SecondTeamIndex)>(HalfTeamsCount); var teamIndexes = TeamIndexesLinkedList.ToList(); for (var i = 0; i < HalfTeamsCount; i++) { var firstIndex = teamIndexes[i]; var secondIndex = teamIndexes[NumberOfTeams - i - 1]; teamIndexMatches.Add((firstIndex, secondIndex)); } teamIndexMatchesRounds.Add(teamIndexMatches); RotateList(); } TeamIndexMatchesRounds = teamIndexMatchesRounds; }
private void RotateList() { TeamIndexesLinkedList.AddAfter(TeamIndexesLinkedList.Find(FirstTeamIndex), TeamIndexesLinkedList.Last()); TeamIndexesLinkedList.RemoveLast(); }