Пример #1
0
        public override int GetHashCode()
        {
            var hashCode = -1788079105;

            hashCode = hashCode * -1521134295 + LotteryId.GetHashCode();
            hashCode = hashCode * -1521134295 + DateRealized.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer <List <int> > .Default.GetHashCode(Dozens);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Team);

            hashCode = hashCode * -1521134295 + TotalValue.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalWinners7.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(City);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(UF);

            hashCode = hashCode * -1521134295 + TotalWinners6.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalWinners5.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalWinners4.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalWinners3.GetHashCode();
            hashCode = hashCode * -1521134295 + WinnersTeam.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalValueNumbers7.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalValueNumbers6.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalValueNumbers5.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalValueNumbers4.GetHashCode();
            hashCode = hashCode * -1521134295 + TotalValueNumbers3.GetHashCode();
            hashCode = hashCode * -1521134295 + TeamValue.GetHashCode();
            hashCode = hashCode * -1521134295 + AccumulatedValue.GetHashCode();
            hashCode = hashCode * -1521134295 + EstimatedPrize.GetHashCode();
            return(hashCode);
        }
Пример #2
0
        private List <TeamValue> CalcTeamStats(Team team)
        {
            List <TeamValue> results      = new List <TeamValue>();
            double           teamWinsPerc = (double)team.Victories / (double)team.Races * 100.0;

            foreach (var driver in team.Drivers.Where(d => !(d is TestDriver)))
            {
                TeamValue teamStats = new TeamValue();
                teamStats.DriverWinPercentage = (double)driver.Wins / (double)driver.Races * 100;
                teamStats.TeamWinsPercentage  = teamWinsPerc;
                if (driver.Races >= 100)
                {
                    if (StatsWeighting != null)
                    {
                        teamStats.DriverWeighting = StatsWeighting.Apply(teamStats.DriverWinPercentage, driver.Races);
                    }
                }

                results.Add(teamStats);
            }

            return(results);
        }
Пример #3
0
        // TODO: For each team return their win % as well as their drivers win %, sorted by the team 'win %' highest to lowest.

        // If a teamId is specified then return data for only that team i.e. method result list will only a single entry

        // otherwise if the teamId=0 return item data for each team in TeamReferenceData supplied in the constructor
        // If a team is specified and cannot be located then return a empty list.

        // NB! If a teams drivers has done a total of 100 or more races (sum of all driver races) then
        //     IF1StatsWeighting must be invoked with the required parameters.
        //              winPercentage is the teams drivers win % (summed result of each driver)
        //              numberOfRaces is the teams drivers races (sum of all driver races)
        //    ONLY make this call if the drivers total races >= 100.

        //    The result must be stored in the DriverWeighting field of team value.
        //    If the drivers have done less than 100 races the DriverWeighting must be set to 0.

        // Note
        //   Team Win % is Team.Victories over Team.Races
        //   Driver Win % is Driver.Wins over Driver.Races
        //   Only calculate win % for drivers. Exclude test drivers
        public IEnumerable <TeamValue> TeamWinPercentage(int teamId = 0)
        {
            IEnumerable <TeamValue> teamValueCollection = new List <TeamValue>();

            if (teamId != 0)
            {
                // Get team for teamId
                Team team = TeamReferenceData.FirstOrDefault(t => t.Id == teamId);
                if (team == null)
                {
                    return(teamValueCollection);
                }

                // I assume the client want these default values set
                TeamValue teamValue = new TeamValue();
                teamValue.Id   = team.Id;
                teamValue.Name = team.Name;

                // Team teamWinsPercentage
                teamValue.TeamWinsPercentage = (((double)team.Victories) / team.Races) * 100;

                // Team Drivers
                IEnumerable <Driver> teamDrivers = team.Drivers.Where(driver => driver.GetType().Name != "TestDriver");

                // Team Drivers Wins
                double teamsDriversWins = teamDrivers.Sum(driverWins => driverWins.Wins);

                // Team Drivers Races
                double teamsDriversRaces = teamDrivers.Sum(driverWins => driverWins.Races);

                // Team DriverWeighting
                if (teamsDriversRaces >= 100)
                {
                    teamValue.DriverWeighting = StatsWeighting.Apply(teamValue.TeamWinsPercentage, (int)teamsDriversRaces);;
                }
                else
                {
                    teamValue.DriverWeighting = 0;
                }

                // Team DriverWinPercentage
                teamValue.DriverWinPercentage = ((double)teamsDriversWins / teamsDriversRaces) * 100;

                ((List <TeamValue>)teamValueCollection).Add(teamValue);
                return(teamValueCollection);
            }
            else
            {
                int maxTeams = TeamReferenceData.Count();
                IEnumerator <Team> teamIterator = TeamReferenceData.GetEnumerator();
                TeamValue          teamValue;

                while (teamIterator.MoveNext())
                {
                    teamValue      = new TeamValue();
                    teamValue.Id   = teamIterator.Current.Id;
                    teamValue.Name = teamIterator.Current.Name;

                    teamValue.TeamWinsPercentage = (((double)teamIterator.Current.Victories) / teamIterator.Current.Races) * 100;

                    IEnumerable <Driver> currentTeamDrivers = teamIterator.Current.Drivers.Where(driver => driver.GetType().Name != "TestDriver");

                    double teamsDriversWins = currentTeamDrivers.Sum(driverWins => driverWins.Wins);

                    double teamsDriversRaces = currentTeamDrivers.Sum(driverWins => driverWins.Races);

                    if (teamsDriversRaces >= 100)
                    {
                        teamValue.DriverWeighting = StatsWeighting.Apply(teamValue.TeamWinsPercentage, (int)teamsDriversRaces);;
                    }
                    else
                    {
                        teamValue.DriverWeighting = 0;
                    }

                    teamValue.DriverWinPercentage = (((double)teamsDriversWins) / teamsDriversRaces) * 100;

                    ((List <TeamValue>)teamValueCollection).Add(teamValue);
                }

                ((List <TeamValue>)teamValueCollection).Sort(new TeamValueComparer());
                return(teamValueCollection);
            }
        }