Answered by:
Need to implement this class features in my code for three results.

Question
-
User1182587605 posted
I need to get the following details by invoking the GetFights() method from the provided class. Can anyone help me how to do it?
- Depart before the current date/time.
- Have a segment with an arrival date before the departure date.
- Spend more than 2 hours on the ground. i.e those with a total gap of over two hours between the arrival date of one segment and the departure date of the next.
I have the following class:
using System; using System.Collections.Generic; using System.Linq; namespace TravelRepublic.FlightCodingTest { public class FlightBuilder { private DateTime _threeDaysFromNow; public FlightBuilder() { _threeDaysFromNow = DateTime.Now.AddDays(3); } public IList<Flight> GetFlights() { return new List<Flight> { //A normal flight with two hour duration CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2)), //A normal multi segment flight CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2), _threeDaysFromNow.AddHours(3), _threeDaysFromNow.AddHours(5)), //A flight departing in the past CreateFlight(_threeDaysFromNow.AddDays(-6), _threeDaysFromNow), //A flight that departs before it arrives CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(-6)), //A flight with more than two hours ground time CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2), _threeDaysFromNow.AddHours(5), _threeDaysFromNow.AddHours(6)), //Another flight with more than two hours ground time CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2), _threeDaysFromNow.AddHours(3), _threeDaysFromNow.AddHours(4), _threeDaysFromNow.AddHours(6), _threeDaysFromNow.AddHours(7)) }; } private static Flight CreateFlight(params DateTime[] dates) { if (dates.Length % 2 != 0) throw new ArgumentException("You must pass an even number of dates,", "dates"); var departureDates = dates.Where((date, index) => index % 2 == 0); var arrivalDates = dates.Where((date, index) => index % 2 == 1); var segments = departureDates.Zip(arrivalDates, (departureDate, arrivalDate) => new Segment { DepartureDate = departureDate, ArrivalDate = arrivalDate }).ToList(); return new Flight { Segments = segments }; } } public class Flight { public IList<Segment> Segments { get; set; } } public class Segment { public DateTime DepartureDate { get; set; } public DateTime ArrivalDate { get; set; } } }
Sunday, December 24, 2017 6:53 AM
Answers
-
User-1838255255 posted
Hi acmedeepak,
According to your code and needs, I make a modify based on your code, please try:
protected void Page_Load(object sender, EventArgs e) { FlightBuilder fb = new FlightBuilder(); var data = fb.GetFlights(); for (int i = 0; i < data.Count; i++) { var len = data[i].Segments.Count; for (int j = 0; j < len; j++) { DateTime dt = DateTime.Now; var departure = data[i].Segments[j].DepartureDate; var arrived = data[i].Segments[j].ArrivalDate; int result = DateTime.Compare(departure, dt); int newresult = DateTime.Compare(arrived, departure); if (result < 0) { Response.Write(" Depart before the current date/time: " + "Arrived Date: " + data[i].Segments[j].ArrivalDate + ",Departure Date " + data[i].Segments[j].DepartureDate + "<br/>"); } if (newresult < 0) { Response.Write(" Arrival date before the departure date: " + "Arrived Date: " + data[i].Segments[j].ArrivalDate + ",Departure Date " + data[i].Segments[j].DepartureDate + "<br/>"); } } } FlightBuilder newfb = new FlightBuilder(); var newdata = newfb.GetFlights(); for (int i = 0; i < newdata.Count; i++) { var newlen = newdata[i].Segments.Count; if (newlen == 2) { for (int j = 0; j < newlen; j++) { var firstarrived = newdata[i].Segments[0].ArrivalDate; var seconddeparture = newdata[i].Segments[1].DepartureDate; var time = (seconddeparture - firstarrived).TotalHours; if (time >= 2) { Response.Write("Total gap of over two hours: FirstArrived Date" + firstarrived + "Seconddeparture Date" + seconddeparture + "<br/>"); } } } } } public class FlightBuilder { private DateTime _threeDaysFromNow; public FlightBuilder() { _threeDaysFromNow = DateTime.Now.AddDays(3); } public IList<Flight> GetFlights() { return new List<Flight> { //A normal flight with two hour duration CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2)), //A normal multi segment flight CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2), _threeDaysFromNow.AddHours(3), _threeDaysFromNow.AddHours(5)), //A flight departing in the past CreateFlight(_threeDaysFromNow.AddDays(-6), _threeDaysFromNow), //A flight that departs before it arrives CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(-6)), //A flight with more than two hours ground time CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2), _threeDaysFromNow.AddHours(5), _threeDaysFromNow.AddHours(6)), //Another flight with more than two hours ground time CreateFlight(_threeDaysFromNow, _threeDaysFromNow.AddHours(2), _threeDaysFromNow.AddHours(3), _threeDaysFromNow.AddHours(4), _threeDaysFromNow.AddHours(6), _threeDaysFromNow.AddHours(7)) }; } private static Flight CreateFlight(params DateTime[] dates) { if (dates.Length % 2 != 0) throw new ArgumentException("You must pass an even number of dates,", "dates"); var departureDates = dates.Where((date, index) => index % 2 == 0); var arrivalDates = dates.Where((date, index) => index % 2 == 1); var segments = departureDates.Zip(arrivalDates, (departureDate, arrivalDate) => new Segment { DepartureDate = departureDate, ArrivalDate = arrivalDate }).ToList(); return new Flight { Segments = segments }; } } public class Flight { public IList<Segment> Segments { get; set; } } public class Segment { public DateTime DepartureDate { get; set; } public DateTime ArrivalDate { get; set; } }
Result:
Best Regards,
Eric Du
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Tuesday, December 26, 2017 3:23 AM