locked
Need to implement this class features in my code for three results. RRS feed

  • 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?

    1.  Depart before the current date/time.
    2.  Have a segment with an arrival date before the departure date.
    3.  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