예제 #1
0
        public int FindSeat()
        {
            var seatIdsPlusOne  = BoardingPasses.Select(bp => bp.SeatId + 1);
            var seatIdsMinusOne = BoardingPasses.Select(bp => bp.SeatId - 1);

            var overlappingIds = seatIdsPlusOne.Intersect(seatIdsMinusOne);

            return(overlappingIds.Except(BoardingPasses.Select(bp => bp.SeatId)).Max());
        }
예제 #2
0
        public void Part2()
        {
            var orderedPasses = BoardingPasses.OrderBy(p => p.SeatId).ToArray();
            var adjacentPairs = orderedPasses.Zip(orderedPasses.Skip(1));

            var(seatBefore, _) = adjacentPairs.Single(p => p.Second.SeatId - p.First.SeatId == 2);
            var mySeatId = seatBefore.SeatId + 1;

            Assert.AreEqual(534, mySeatId);
        }
예제 #3
0
        private void Button_Add_Click(object sender, EventArgs e)
        {
            // add new reservation.
            var reservationDialog = new AddReservationDialog(Passenger);

            if (reservationDialog.ShowDialog() == DialogResult.OK)
            {
                BoardingPasses.Add(new BoardingPass(0, Convert.ToInt32(reservationDialog.comboBox_Flight.Text), Passenger.ID, 0, reservationDialog.comboBox_Class.Text, false));
                LoadFormData();
            }
        }
예제 #4
0
        static void Main(string[] args)
        {
            var days = new List <IDay>()
            {
                ExpenseReport.LoadFromFile("Day01/ExpenseReport.txt"),
                PasswordValidator.LoadFromFile("Day02/Passwords.txt"),
                Map.LoadFromFile("Day03/Map.txt"),
                PassportValidator.LoadFromFile("Day04/PassportData.txt"),
                BoardingPasses.LoadFromFile("Day05/Seats.txt"),
                Declerations.LoadFromFile("Day06/Declerations.txt"),
                LuggageRules.LoadFromFile("Day07/LuggageRules.txt"),
                GameConsole.LoadFromFile("Day08/BootCode.txt"),
                AdditionSystem.LoadFromFile("Day09/Data.txt"),
                JoltAdapters.LoadFromFile("Day10/JoltAdapters.txt"),
                SeatingLayout.LoadFromFile("Day11/SeatingLayout.txt"),
                Navigation.LoadFromFile("Day12/NavigationInstructions.txt"),
                Buses.LoadFromFile("Day13/Buses.txt"),
                DockingProgram.LoadFromFile("Day14/DockingProgram.txt"),
                MemoryGame.Create("15,12,0,14,3,1"),
                TicketAnalyser.LoadFromFile("Day16/TicketData.txt"),
                ConwayCube.LoadFromFile("Day17/ConwayCube.txt"),
                OperationOrder.LoadFromFile("Day18/Expressions.txt"),
                JurassicJigsaw.LoadFromFile("Day20/Tiles.txt"),
                Combat.LoadFromFile("Day22/Cards.txt")
            };

            var invalidCount = 0;

            foreach (var day in days)
            {
                var part1 = day.Part1();
                var part2 = day.Part2();

                var part1Invalid = !string.IsNullOrWhiteSpace(day.ValidatedPart1) &&
                                   part1 != day.ValidatedPart1;

                var part2Invalid = !string.IsNullOrWhiteSpace(day.ValidatedPart2) &&
                                   part2 != day.ValidatedPart2;

                invalidCount += part1Invalid ? 1 : 0;
                invalidCount += part2Invalid ? 1 : 0;

                var part1InvalidString = part1Invalid ? " INVALID" : "";
                var part2InvalidString = part2Invalid ? " INVALID" : "";

                Console.WriteLine($"Day {day.DayNumber} Part 1: {part1}{part1InvalidString}");
                Console.WriteLine($"Day {day.DayNumber} Part 2: {part2}{part2InvalidString}");
            }

            Console.WriteLine($"{invalidCount} INVALID Results");
        }
예제 #5
0
        public AddPassengerDialog(int id = 0)
        {
            InitializeComponent();

            // Make column titles bold.
            for (int i = 0; i < listView_Reservations.Columns.Count; i++)
            {
                listView_Reservations.Columns[i].ListView.Font = new Font(listView_Reservations.Font, FontStyle.Bold);
            }

            DialogResult = DialogResult.Cancel;

            // if the id isnt 0, then we are editing an existing passenger.
            if (id == 0)
            {
                Text      = "Add Passenger";
                Passenger = new Passenger();
            }
            else
            {
                Text = "Edit Passenger";

                //retrieve passenger information from the database.
                Passenger = Database.GetPassenger(id);

                // populate form with passenger data.
                dateTimePicker_DOB.Value           = Passenger.DateOfBirth;
                textBox_Name.Text                  = Passenger.Name;
                textBox_Address.Text               = Passenger.Address;
                textBox_Cost.Text                  = Passenger.Cost.ToString();
                textBox_Email.Text                 = Passenger.Email;
                textBox_Number.Text                = Passenger.Number;
                textBox_SpecialAccommodations.Text = Passenger.SpecialAccommodations;
                comboBox_Preference.SelectedIndex  = (int)Passenger.SeatingPreference;

                // add all boarding passes associated with the passenger to the list.
                foreach (var boardingPass in Passenger.BoardingPasses.FindAll(x => x.Issued == false))
                {
                    BoardingPasses.Add(boardingPass);
                }

                LoadFormData(); // load form data.
            }
        }
예제 #6
0
        private void Button_Remove_Click(object sender, EventArgs e)
        {
            if (listView_Reservations.SelectedItems.Count > 0)
            {
                // find the boarding pass in the database.
                var pass = BoardingPasses.Find(x => x.ID == Convert.ToInt32(listView_Reservations.SelectedItems[0].Tag));

                // Get the price of the seat.
                int seatPrice = 0;
                if (pass.Class == "First Class")
                {
                    seatPrice = 300;
                }
                else if (pass.Class == "Business Class")
                {
                    seatPrice = 200;
                }

                // update the passenger cost with the seat cost.
                Passenger.Cost   -= (pass.Flight.Price + seatPrice);
                textBox_Cost.Text = Passenger.Cost.ToString();
                if ((int)listView_Reservations.SelectedItems[0].Tag == 0)
                {
                    BoardingPasses.RemoveAt(listView_Reservations.SelectedItems[0].Index);
                }
                else
                {
                    RemovedBoardingPasses.Add(BoardingPasses.Find(x => x.ID == Convert.ToInt32(listView_Reservations.SelectedItems[0].Tag)));
                    BoardingPasses.Remove(BoardingPasses.Find(x => x.ID == Convert.ToInt32(listView_Reservations.SelectedItems[0].Tag)));
                }

                listView_Reservations.Items.Remove(listView_Reservations.SelectedItems[0]);

                LoadFormData();
            }
        }
예제 #7
0
 public void Part1()
 {
     Assert.AreEqual(991, BoardingPasses.Max(p => p.SeatId));
 }