// This need not be the case to repeat same code. Can be converted into a generic method public CumulatedTrafficResult DeterMineWinner(List <CumulatedTrafficResult> results) { //var dataProperty = myObject.GetType().GetProperty("Data"); //object data = dataProperty.GetValue(myObject, new object[] { }); results = results.OrderBy(r => r.TimeForTravel).ToList(); double lowestTimeTaken = results.First().TimeForTravel; List <CumulatedTrafficResult> finalResults = results.Where(result => result.TimeForTravel == lowestTimeTaken).ToList(); CumulatedTrafficResult finalResult = null; if (finalResults.Count > 1) { finalResult = finalResults.OrderBy(r => r.Vehicle.Order).ElementAt(0); } else { finalResult = finalResults.Single(); } return(finalResult); }
public static void InitializeForProblem2Scenario2AndPrintResults() { Traffic traffic = new Traffic(new List <Weather>() { sunny, windy, rainy }, new List <Vehicle>() { superCar, tuktuk, bike }, new List <Orbit>() { orbit1, orbit2, orbit3, orbit4 }); Dictionary <Orbit, int> dict = new Dictionary <Orbit, int>(); dict[orbit1] = 5; dict[orbit2] = 10; dict[orbit3] = 20; dict[orbit4] = 20; traffic.SetCurrentState(windy, dict); traffic.StartingPoint = silkDorb; hallitharam.Order = 1; rkPuram.Order = 2; traffic.MandatoryDestinationsInADay = new List <Destination> { hallitharam, rkPuram }; List <CumulatedTrafficResult> lists = traffic.GetAllCumulatedResults(); CumulatedTrafficResult finalResult = traffic.DeterMineWinner(lists); if (finalResult != null) { Console.WriteLine(string.Format("Vehicle {0} to {1} via {2} then to {3} via {4} in time {5}", finalResult.Vehicle.Name, finalResult.WayPoint1.Name, finalResult.Orbit1.Name, finalResult.WayPoint2.Name, finalResult.Orbit2.Name, finalResult.TimeForTravel.ToString())); } else { Console.WriteLine("oops"); } }