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); }
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); }
// 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); } }