private static LaneStat BuildLaneStat(Race[] races, Func<Race, RaceResult> whichCar, int laneNumber) { var laneResults = races.Select(whichCar).ToArray(); return new LaneStat { LaneNumber = laneNumber, FirstPlaceFinishes = laneResults.Count(r => r.Place == 1), SecondPlaceFinishes = laneResults.Count(r => r.Place == 2), ThirdPlaceFinishes = laneResults.Count(r => r.Place == 3), FourthPlaceFinishes = laneResults.Count(r => r.Place == 4), Points = laneResults.Sum(r => r.Points), }; }
public Tournament Build(string round = "prelim") { var races = new SortedList<double, Race>(); var groups = new List<Group>(); for (var groupIndex = 0; groupIndex < _groups.Count; groupIndex++) { var group = _groups[groupIndex]; groups.Add(group.Item1); var carsByNumber = group.Item1.Cars.ToDictionary(c => c.Number); var length = group.Item2.Length; for (var i = 0; i < length; i++) { var offset = (groupIndex+1)/1000.0; var pctDoneBefore = ((double) i)/length + offset; var pctDoneAfter = ((double) i + 1)/length - offset; var pctDone = pctDoneBefore >= 0.5 ? pctDoneBefore : pctDoneAfter; var raceDef = group.Item2[i]; var race = new Race { Round = round, Group = group.Item1.Name, Car1 = new RaceResult{Car = carsByNumber[raceDef.Lane1]}, Car2 = new RaceResult{Car = carsByNumber[raceDef.Lane2]}, Car3 = new RaceResult{Car = carsByNumber[raceDef.Lane3]}, Car4 = new RaceResult{Car = carsByNumber[raceDef.Lane4]}, }; races.Add(pctDone, race); } } var raceList = races.Values.ToArray(); for (var i = 0; i < raceList.Length; i++) { raceList[i].RaceNumber = i + 1; } var tournament = new Tournament {Groups = groups.ToArray(), Races = raceList.ToArray(), Name = TournamentName}; return tournament; }
private static void AddGroupsAndRaces(this Tournament tournament, Group[] groupsToAdd, Race[] racesToAdd) { var groups = tournament.Groups.ToList(); groups.AddRange(groupsToAdd); var races = tournament.Races.ToList(); races.AddRange(racesToAdd); for (int i = 0; i < races.Count; i++) { races[i].RaceNumber = i + 1; } tournament.Groups = groups.ToArray(); tournament.Races = races.ToArray(); }