private static XDocument LoadXDocument(string filePath) { XDocument xml; try { xml = XDocument.Load(filePath); } catch (Exception e) { throw new ArgumentException("Ugyldig filangivelse - kan ikke tolke fil som XML", e); } if (xml.Root == null) { throw new ArgumentException("Ugyldig filangivelse - finner ikke rot-element i XML"); } if (xml.Root.Elements().Count() == 1 && xml.Root.Elements().Single().Name == "ev_comp") { // Ond BillettService-kodet XML som må "pakkes opp" først var decoder = new TicketDecoder(); xml = decoder.ExtractXml(xml); if (xml.Root == null) { throw new ArgumentException("Komprimert XML mangler rot-element"); } } return(xml); }
private static string SolvePart2(List <string> input) { (List <Ticket> tickets, List <int> yourTicket, TicketValidator ticketValidator) = InputParser.ParseInput(input); var validTickets = tickets.Where(ticket => !ticket.GetInvalidValues(ticketValidator).Any()).ToList(); var ruleMapping = new TicketDecoder(validTickets, ticketValidator).GetRuleMapping(); var departureIndices = ruleMapping.Where(x => x.Key.StartsWith("departure")).Select(x => x.Value).ToList(); return(departureIndices .Select(x => yourTicket[x]) .Product() .ToString()); }