private int GetPlayersPosition(Player player) { var indexOfPlayer = OrderedPlayers.IndexOf(player); if (indexOfPlayer == 0) { return 1; } if (indexOfPlayer == 1 && player.Points == OrderedPlayers.First().Points && player.PointsPerGame == OrderedPlayers.First().PointsPerGame) { return 1; } else if (indexOfPlayer == 1) { return 2; } var previousPlayer = OrderedPlayers.ElementAt(indexOfPlayer - 1); if (previousPlayer.Points == player.Points && previousPlayer.PointsPerGame == player.PointsPerGame) { return GetPlayersPosition(previousPlayer); } else { return indexOfPlayer + 1; } }
public string ComputeDisplayedPosition(IOrderedEnumerable<Player> orderedPlayers, Player currentPlayer) { OrderedPlayers = orderedPlayers.ToList(); var indexOfPlayer = OrderedPlayers.IndexOf(currentPlayer); if (indexOfPlayer == 0) { return GetPlayersPosition(currentPlayer).ToString(); } var previousPlayer = OrderedPlayers.ElementAt(indexOfPlayer - 1); if (currentPlayer.Points == previousPlayer.Points && currentPlayer.PointsPerGame == previousPlayer.PointsPerGame) { return string.Format("= {0}", GetPlayersPosition(currentPlayer)); } return GetPlayersPosition(currentPlayer).ToString(); }
public PositionCalculatorTests() { positionCalculator = new PlayerPositionCalculator(); player1 = new Player() { Id = 1, Name = "player1", Points = 3, GamesPlayed = 3 }; player2 = new Player() { Id = 2, Name = "player2", Points = 3, GamesPlayed = 3 }; player3 = new Player() { Id = 3, Name = "player3", Points = 3, GamesPlayed = 6 }; player4 = new Player() { Id = 4, Name = "player4", Points = 3, GamesPlayed = 6 }; orderedPlayers = new List<Player>() { player1, player2, player3, player4 } .OrderBy(p => p.Name) .OrderByDescending(p=>p.PointsPerGame) .OrderByDescending(p=>p.Points); }
public void GenerateTeams_GivenFourPlayers_PerfectSolutionsExist_PerfectSolutionFound( int p1, int g1, int p2, int g2, int p3, int g3, int p4, int g4) { IShuffler shuffler = A.Fake<IShuffler>(); TeamGenerator teamGenerator = new TeamGenerator(shuffler); Player player1 = new Player() { Id = 1, Name = "Name1", Points = p1, GamesPlayed = g1 }; Player player2 = new Player() { Id = 2, Name = "Name2", Points = p2, GamesPlayed = g2 }; Player player3 = new Player() { Id = 3, Name = "Name3", Points = p3, GamesPlayed = g3 }; Player player4 = new Player() { Id = 4, Name = "Name4", Points = p4, GamesPlayed = g4 }; List<Player> selectedPlayers = new List<Player> { player1, player2, player3, player4 }; var result = teamGenerator.GenerateTeams(selectedPlayers); result.Item1.Sum(p => p.PointsPerGame).Should().Be(1); result.Item2.Sum(p => p.PointsPerGame).Should().Be(1); }
public void GenerateTeams_GivenThreePlayers_PerfectSolutionsExist_PerfectSolutionFound( int p1, int g1, int p2, int g2, int p3, int g3) { IShuffler shuffler = A.Fake<IShuffler>(); TeamGenerator teamGenerator = new TeamGenerator(shuffler); Player player1 = new Player() { Id = 1, Name = "Name1", Points = p1, GamesPlayed = g1 }; Player player2 = new Player() { Id = 2, Name = "Name2", Points = p2, GamesPlayed = g2 }; Player player3 = new Player() { Id = 3, Name = "Name3", Points = p3, GamesPlayed = g3 }; List<Player> selectedPlayers = new List<Player> { player1, player2, player3 }; var result = teamGenerator.GenerateTeams(selectedPlayers); var r1 = (double)p1 / g1; var r2 = (double)p2 / g2; var r3 = (double)p3 / g3; double expected = (r1 + r2 + r3) / 2; result.Item1.Sum(p => p.PointsPerGame).Should().Be(expected); result.Item2.Sum(p => p.PointsPerGame).Should().Be(expected); }