Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
        }
Beispiel #7
0
        /// <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));
 }