public static Schedule ScheduleUnassignedFlights(Schedule schedule) { if (schedule.UnscheduledFlights.Count == 0) { return schedule; } var working = schedule.Clone(); var unscheduled = new Queue<FlightModel>( working.UnscheduledFlights.OrderBy(f => f.Arrives)); working.ScheduleFlights(unscheduled); var best = working.Clone(); int iterations = working.Flights.Count - 1; while (working.UnscheduledFlights.Count > 0 && iterations-- > 0) { unscheduled.Enqueue(unscheduled.Dequeue()); working.ScheduleFlights(unscheduled); if (working.UnscheduledFlights.Count < best.UnscheduledFlights.Count) { best = working.Clone(); } } return best; }
public Schedule Clone() { var clone = new Schedule(); clone._gates.AddRange(Gates.Select(g => g.Clone())); clone._flights.AddRange(Flights.Select(f => f.Clone())); return clone; }
public DeparturesEndpoint(Schedule schedule) : base("/departures") { _schedule = schedule; Get["/"] = _ => _schedule.Flights .OrderBy(f => f.Departs) .Select(f => new { f.Flight, f.Departs, f.Gate }); }
public ArrivalsModule(Schedule schedule) : base("/arrivals") { _schedule = schedule; Get["/"] = _ => _schedule.Flights .OrderBy(f => f.Arrives) .Select(f => new { f.Flight, f.Arrives, f.Gate }); }
private void UpdateFrom(Schedule schedule) { ClearAll(); _gates.AddRange(schedule.Gates.Select(g => g.Clone())); _flights.AddRange(schedule.Flights.Select(f => f.Clone())); }