// // Find the positions in a ticket equivalent of the 6 classes starting with "departure". // Multiply those 6 numbers together // Correct answer: 426.362.917.709 public override long Solution2() { TicketAnalyser analyser = new TicketAnalyser(validRanges, myTicket.Count); string[] splitTickets = dataList[2].Split('\n'); int[] ticketNumbers; for (int i = 1; i < splitTickets.Length; i++) { ticketNumbers = splitTickets[i].Split(',').Select(Int32.Parse).ToArray(); if (validRanges.ValidTicket(ticketNumbers)) { analyser.AddTicket(ticketNumbers); } } analyser.AnalyseRanges(); long result = 1; foreach (KeyValuePair <string, List <int> > kvp in analyser.PotentialPositions) { if (kvp.Key.StartsWith("departure")) { result *= myTicket[kvp.Value[0]]; } } return(result); }
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"); }