Advertisement
Lauda

Untitled

Nov 15th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.43 KB | None | 0 0
  1. private IEnumerable<Round> GenerateRoundsAndGames(List<Team> teams, LeagueSeason leagueSeason)
  2.         {
  3.             var numberOfRounds = teams.Count - 1;
  4.             var numberOfGamesPerRound = teams.Count / 2;
  5.  
  6.             var rotatedTeams = new List<Team>();
  7.             rotatedTeams.AddRange(teams.Skip(numberOfGamesPerRound).Take(numberOfGamesPerRound));
  8.             rotatedTeams.AddRange(teams.Skip(1).Take(numberOfGamesPerRound - 1).ToArray().Reverse());
  9.  
  10.             var numberOfTeams = rotatedTeams.Count;
  11.  
  12.             for (var roundNumber = 0; roundNumber < numberOfRounds; roundNumber++)
  13.             {
  14.                 var games = new List<Game>();
  15.  
  16.                 var round = new Round
  17.                 {
  18.                     Id = Guid.NewGuid(),
  19.                     Games = new List<Game>(),
  20.                     LeagueSeason = leagueSeason,
  21.                     LeagueSeasonId = leagueSeason.Id,
  22.                     RoundName = string.Format("{0}", ++roundNumber)
  23.                 };
  24.  
  25.                 var teamIndex = roundNumber % numberOfTeams;
  26.  
  27.                 games.Add(new Game
  28.                 {
  29.                     Id = Guid.NewGuid(),
  30.                     Round = round,
  31.                     RoundId = round.Id,
  32.                     SeasonId = leagueSeason.Season.Id,
  33.                     TeamA = teams[0],
  34.                     TeamAId = teams[0].Id,
  35.                     TeamB = rotatedTeams[teamIndex],
  36.                     TeamBId = rotatedTeams[teamIndex].Id,
  37.                     Season = leagueSeason.Season,
  38.                 });
  39.  
  40.                 for (var index = 1; index < numberOfGamesPerRound; index++)
  41.                 {
  42.                     var teamAIndex = (roundNumber + index) % numberOfTeams;
  43.                     var teamBIndex = (roundNumber + numberOfTeams - index) % numberOfTeams;
  44.  
  45.                     games.Add(new Game
  46.                     {
  47.                         Id = Guid.NewGuid(),
  48.                         Round = round,
  49.                         RoundId = round.Id,
  50.                         SeasonId = leagueSeason.Season.Id,
  51.                         TeamA = rotatedTeams[teamBIndex],
  52.                         TeamAId = rotatedTeams[teamBIndex].Id,
  53.                         TeamB = rotatedTeams[teamAIndex],
  54.                         TeamBId = rotatedTeams[teamAIndex].Id
  55.                     });
  56.                 }
  57.                 round.Games = games;
  58.                 yield return round;
  59.             }
  60.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement