public double GetTeamAverage(IEnumerable<WeeklyScore> scores, IEnumerable<Player> players) { PlayerStats playerAverage = new PlayerStats(); double average = players.Sum(player => playerAverage.GetPlayerAverage(player, scores)); double roundedAverage = Math.Round(average, 0, MidpointRounding.AwayFromZero); return roundedAverage; }
public double GetTeamAverage(IEnumerable<WeeklyScore> scores, IEnumerable<Player> players, int getAverageToThisWeek) { PlayerStats playerStats = new PlayerStats(); double average = 0;// players.Sum(player => playerStats.GetPlayerAverage(player, scores, getAverageToThisWeek)); foreach (Player player in players) { average += playerStats.GetPlayerAverage(player, scores, getAverageToThisWeek); } double roundedAverage = Math.Round(average, 0, MidpointRounding.AwayFromZero); return roundedAverage; }
public void given_a_list_of_scores_when_printing_the_top_3_high_scores_for_women_then_only_the_top_3_high_scores_for_women_should_print() { Team team1 = CreateTeam("team1"); Team team2 = CreateTeam("team2"); Week week1 = CreateWeek(1, "week1"); Player player1 = CreatePlayer("F", 1, "player1", team1, 150); Player player2 = CreatePlayer("M", 2, "player2", team1, 150); WeeklyScore score1 = CreateWeeklyScore(100, 101, 102, player1, team1, week1, false); WeeklyScore score2 = CreateWeeklyScore(103, 104, 105, player2, team1, week1, false); WeeklyScore score3 = CreateWeeklyScore(106, 107, 108, player1, team1, week1, false); WeeklyScore score4 = CreateWeeklyScore(109, 110, 111, player2, team1, week1, false); WeeklyScore score5 = CreateWeeklyScore(112, 113, 114, player1, team1, week1, false); WeeklyScore score6 = CreateWeeklyScore(115, 116, 117, player2, team1, week1, false); WeeklyScore score7 = CreateWeeklyScore(118, 119, 120, player1, team1, week1, true); WeeklyScore score8 = CreateWeeklyScore(121, 122, 123, player2, team1, week1, true); List<WeeklyScore> scores = new List<WeeklyScore>() { score1, score2, score3, score4, score5, score6, score7, score8 }; PlayerStats playerStats = new PlayerStats(); List<Point> top3Scores = playerStats.GetTop3HighGamePlayers(scores, "F"); Assert.That(3, Is.EqualTo(top3Scores.Count)); Assert.IsNotNull(top3Scores.Find(p => p.Points == 112)); Assert.IsNotNull(top3Scores.Find(p => p.Points == 113)); Assert.IsNotNull(top3Scores.Find(p => p.Points == 114)); }
public void PrintSummary() { PlayerStats playerStats = new PlayerStats(); List<WeeklyScore> lastWeeksScores = _allScores.Where(s => s.Week.WeekNumber == SelectedWeek.WeekNumber - 1).ToList(); List<Point> lastWeekMensHighSeries = playerStats.GetTop3HighSeriesPlayers(lastWeeksScores, "M"); List<Point> overallMensHighSeries = playerStats.GetTop3HighSeriesPlayers(_allScores, "M"); List<Point> lastWeekMensHighGames = playerStats.GetTop3HighGamePlayers(lastWeeksScores, "M"); List<Point> overallMensHighGames = playerStats.GetTop3HighGamePlayers(_allScores, "M"); List<Point> lastWeekWomensHighSeries = playerStats.GetTop3HighSeriesPlayers(lastWeeksScores, "F"); List<Point> overallWomensHighSeries = playerStats.GetTop3HighSeriesPlayers(_allScores, "F"); List<Point> lastWeekWomensHighGames = playerStats.GetTop3HighGamePlayers(lastWeeksScores, "F"); List<Point> overallWomensHighGames = playerStats.GetTop3HighGamePlayers(_allScores, "F"); SummaryReportData summaryReportData = new SummaryReportData(_teams, lastWeekMensHighSeries, overallMensHighSeries, lastWeekMensHighGames, overallMensHighGames, lastWeekWomensHighSeries, overallWomensHighSeries, lastWeekWomensHighGames, overallWomensHighGames); new PrintSummaryReport().Print(summaryReportData, SelectedWeek); }
public void PrintMatchups() { MatchupsData getPrintMatchupsData = new MatchupsData(); PlayerStats playerAverage = new PlayerStats(); List<MatchupReportLineItem> lineItems = (from weeklyMatchup in _matchups where weeklyMatchup.Week.WeekNumber == SelectedWeek.WeekNumber select weeklyMatchup into matchup let team1Players = _players.Where(p => p.Team.Equals(matchup.TeamOne)).ToList() let team2Players = _players.Where(p => p.Team.Equals(matchup.TeamTwo)).ToList() let matchupReportData = getPrintMatchupsData.GetTeamDataForMatchup(team1Players, team2Players, _allScores, matchup.Week.WeekNumber) let playerAveragesDictionary = team1Players.Union(team2Players).ToDictionary( p => p, p => playerAverage.GetPlayerAverage(p, _allScores, SelectedWeek.WeekNumber - 1)) select new MatchupReportLineItem(matchupReportData, playerAveragesDictionary)).ToList(); new PrintMatchupsReport().Print(lineItems); }
public void PrintAverages() { PlayerStats playerAverage = new PlayerStats(); List<WeeklyScore> scoresPriorToThisWeek = _allScores.Where(s => s.Week.WeekNumber < SelectedWeek.WeekNumber).ToList(); List<PlayerAveragesReportData> playerAveragesReportDatas = (from player in _players let average = playerAverage.GetPlayerAverage(player, scoresPriorToThisWeek) let totalPins = playerAverage.GetTotalPinsForPlayer(player, scoresPriorToThisWeek) let totalGames = playerAverage.GetTotalGamesForPlayer(player, scoresPriorToThisWeek) let gamesBetween200And250 = playerAverage.GetTotalGamesWithPinsBetween200And250ForPlayer(player, scoresPriorToThisWeek) let gamesGreaterThanOrEqualTo250 = playerAverage.GetTotalGamesWithPinsOver250ForPlayer(player, scoresPriorToThisWeek) select new PlayerAveragesReportData(player.Name, average, totalPins, totalGames, gamesBetween200And250, gamesGreaterThanOrEqualTo250, player.Team.Name)).ToList(); List<TeamAveragesReportData> teamAveragesReportData = (from currentTeam in _teams let playersForTeam = _players.Where(p => p.Team.Equals(currentTeam)).ToList() let teamAverage = playersForTeam.Sum(player => playerAverage.GetPlayerAverage(player, scoresPriorToThisWeek)) where currentTeam.Name != "Sub" select new TeamAveragesReportData(currentTeam.Name, teamAverage)).ToList(); new PrintAveragesReport().Print(playerAveragesReportDatas, teamAveragesReportData); }
/// <summary> /// Gets the team points. /// </summary> /// <param name = "scoresForHandicap">The scores for handicap.</param> /// <param name = "scoresIncludingSubs">The scores including subs.</param> /// <param name = "teams">The teams.</param> /// <param name = "matchups">The matchups.</param> /// <param name = "players">The players.</param> /// <returns></returns> public List<Points> GetTeamPoints( List<WeeklyScore> scoresForHandicap, List<WeeklyScore> scoresIncludingSubs, List<Team> teams, List<WeeklyMatchup> matchups, List<Player> players) { List<Points> teamPoints = teams.Select(team => new Points {Name = team.Name, TotalPoints = 0}).ToList(); matchups.Sort((s1, s2) => Comparer<int>.Default.Compare(s1.Week.WeekNumber, s2.Week.WeekNumber)); foreach (WeeklyMatchup weeklyMatchup in matchups) { WeeklyMatchup matchup = weeklyMatchup; List<WeeklyScore> team1Scores = scoresIncludingSubs.Where( s1 => s1.Team.Name == matchup.TeamOne.Name && s1.Week.WeekNumber == matchup.Week.WeekNumber). ToList(); List<WeeklyScore> team2Scores = scoresIncludingSubs.Where( s1 => s1.Team.Name == matchup.TeamTwo.Name && s1.Week.WeekNumber == matchup.Week.WeekNumber). ToList(); List<Player> team1Players = (from scoresIncludingSub in scoresIncludingSubs where scoresIncludingSub.Week.WeekNumber == matchup.Week.WeekNumber && scoresIncludingSub.Team.Name == matchup.TeamOne.Name select players.Find(p => p.Id == scoresIncludingSub.Player.Id)).ToList(); List<Player> team2Players = (from scoresIncludingSub in scoresIncludingSubs where scoresIncludingSub.Week.WeekNumber == matchup.Week.WeekNumber && scoresIncludingSub.Team.Name == matchup.TeamTwo.Name select players.Find(p => p.Id == scoresIncludingSub.Player.Id)).ToList(); if (weeklyMatchup.Week.WeekNumber == 1) { double team1Average = team1Players.Sum(t1 => t1.InitialAverage); double team2Average = team2Players.Sum(t2 => t2.InitialAverage); double team1Handicap = team1Average < team2Average ? team2Average - team1Average : 0; double team2Handicap = team2Average < team1Average ? team1Average - team2Average : 0; LoadTeamPointsForWeek(teamPoints, team1Handicap, team2Handicap, matchup.TeamOne.Name, matchup.TeamTwo.Name, team1Scores, team2Scores); } else { PlayerStats playerStats = new PlayerStats(); Dictionary<int, double> playerAverageDictionary1 = team1Players.ToDictionary( player => player.Id, player => playerStats.GetPlayerAverage(player, scoresForHandicap.FindAll( s => s.Player.Id == player.Id && s.Week.WeekNumber < matchup.Week.WeekNumber))); Dictionary<int, double> playerAverageDictionary2 = team2Players.ToDictionary( player => player.Id, player => playerStats.GetPlayerAverage(player, scoresForHandicap.FindAll( s => s.Player.Id == player.Id && s.Week.WeekNumber < matchup.Week.WeekNumber))); double team1Average = playerAverageDictionary1.Sum(keyValuePair => keyValuePair.Value); double team2Average = playerAverageDictionary2.Sum(keyValuePair => keyValuePair.Value); double team1Handicap = team1Average < team2Average ? team2Average - team1Average : 0; double team2Handicap = team2Average < team1Average ? team1Average - team2Average : 0; LoadTeamPointsForWeek(teamPoints, team1Handicap, team2Handicap, matchup.TeamOne.Name, matchup.TeamTwo.Name, team1Scores, team2Scores); } } return teamPoints; }
public void given_a_player_when_two_weeks_of_scores_have_been_entered_with_an_absent_week_then_only_nonabsent_weeks_should_be_averaged() { Team team1 = CreateTeam("team1"); Player player1 = CreatePlayer("M", 1, "player1", team1, 150); Week week1 = CreateWeek(1, "week 1"); Week week2 = CreateWeek(2, "week 2"); WeeklyScore week1Score = CreateWeeklyScore(110, 154, 204, player1, team1, week1, false); WeeklyScore week2Score = CreateWeeklyScore(155, 186, 178, player1, team1, week2, true); PlayerStats playerAverage = new PlayerStats(); double average = playerAverage.GetPlayerAverage(player1, new List<WeeklyScore> { week1Score, week2Score }, week2.WeekNumber); Assert.That(average, Is.EqualTo(156)); }
public void given_a_player_when_two_weeks_of_scores_have_been_entered_then_the_average_from_both_weeks_should_be_returned() { Team team1 = CreateTeam("team1"); Player player1 = CreatePlayer("M", 1, "player1", team1, 150); Week week = CreateWeek(1, "week 1"); WeeklyScore week1Score = CreateWeeklyScore(110, 154, 204, player1, team1, week, false); WeeklyScore week2Score = CreateWeeklyScore(155, 186, 178, player1, team1, week, false); PlayerStats playerAverage = new PlayerStats(); double average = playerAverage.GetPlayerAverage(player1, new List<WeeklyScore> { week1Score, week2Score }, week.WeekNumber); Assert.That(average, Is.EqualTo(165)); }
public void given_a_player_when_no_scores_have_been_entered_then_the_initial_average_should_be_returned() { Team team1 = CreateTeam("team1"); Player player1 = CreatePlayer("M", 1, "player1", team1, 150); PlayerStats playerAverage = new PlayerStats(); double average = playerAverage.GetPlayerAverage(player1, new List<WeeklyScore>(), 1); Assert.That(average, Is.EqualTo(150)); }
public void given_a_player_when_all_scores_are_supplied_then_get_only_total_pins_over_250_in_which_the_player_is_not_absent() { Team team1 = CreateTeam("team1"); Player player1 = CreatePlayer("M", 1, "player1", team1, 150); Week week1 = CreateWeek(1, "week 1"); Week week2 = CreateWeek(2, "week 2"); WeeklyScore week1Score = CreateWeeklyScore(110, 255, 204, player1, team1, week1, false); WeeklyScore week2Score = CreateWeeklyScore(155, 212, 255, player1, team1, week2, true); List<WeeklyScore> scores = new List<WeeklyScore>() { week1Score, week2Score }; PlayerStats playerAverage = new PlayerStats(); int totalPins = playerAverage.GetTotalGamesWithPinsOver250ForPlayer(player1, scores); Assert.That(totalPins, Is.EqualTo(1)); }
public void given_a_player_when_all_scores_are_supplied_then_get_only_total_pins_for_the_player() { Team team1 = CreateTeam("team1"); Player player1 = CreatePlayer("M", 1, "player1", team1, 150); Player player2 = CreatePlayer("M", 2, "player2", team1, 150); Week week1 = CreateWeek(1, "week 1"); Week week2 = CreateWeek(2, "week 2"); WeeklyScore week1Score = CreateWeeklyScore(110, 154, 204, player1, team1, week1, false); WeeklyScore week2Score = CreateWeeklyScore(155, 186, 178, player2, team1, week2, false); List<WeeklyScore> scores = new List<WeeklyScore>() { week1Score, week2Score }; PlayerStats playerAverage = new PlayerStats(); int totalPins = playerAverage.GetTotalPinsForPlayer(player1, scores); Assert.That(totalPins, Is.EqualTo(468)); }
public void given_a_player_when_all_scores_are_supplied_then_get_only_the_player_average_until_the_week_specified() { Team team1 = CreateTeam("team1"); Player player1 = CreatePlayer("M", 1, "player1", team1, 150); Week week1 = CreateWeek(1, "week 1"); Week week2 = CreateWeek(2, "week 2"); WeeklyScore week1Score = CreateWeeklyScore(110, 154, 204, player1, team1, week1, false); WeeklyScore week2Score = CreateWeeklyScore(155, 186, 178, player1, team1, week2, false); PlayerStats playerAverage = new PlayerStats(); double average = playerAverage.GetPlayerAverage(player1, new List<WeeklyScore> { week1Score, week2Score }, week1.WeekNumber); Assert.That(average, Is.EqualTo(156)); }