Exemplo n.º 1
0
        public void Part1()
        {
            TicketValidationResult result = TicketValidator.ValidateNearby(
                TicketDataParser.Parse(StringListRetriever.Retreive("InputList15.txt").ToList()));

            Assert.Equal(29759, result.InvalidValues.Sum());
        }
Exemplo n.º 2
0
        public void Part1Sample()
        {
            TicketData ticketData = TicketDataParser.Parse(GetPart1SampleData());

            Assert.Equal(3, ticketData.ValidationRules.Count);
            Assert.Equal(5, ticketData.Tickets.Count);
            TicketValidationResult ticketValidationResult = TicketValidator.ValidateNearby(ticketData);

            Assert.Equal(71, ticketValidationResult.InvalidValues.Sum());
        }
Exemplo n.º 3
0
        public void Part2()
        {
            TicketData             ticketData             = TicketDataParser.Parse(StringListRetriever.Retreive("InputList15.txt").ToList());
            TicketValidationResult ticketValidationResult = TicketValidator.ValidateNearby(ticketData);
            FieldOrderResult       fieldOrderResult       = FieldOrderFinder.FindFieldOrderFor(ticketValidationResult.Tickets, ticketData.ValidationRules);

            Assert.Equal(1307550234719, fieldOrderResult.FieldOrder.Keys.Where(x => x.StartsWith("departure"))
                         .Select(x => System.Convert.ToInt64(ticketData.Tickets[0].DataItems[fieldOrderResult.FieldOrder[x]]))
                         .Aggregate <long, long>(1, (x, y) => x * y));
        }
Exemplo n.º 4
0
        public void Part2Sample()
        {
            TicketData ticketData = TicketDataParser.Parse(GetPart2SampleData());

            Assert.Equal(3, ticketData.ValidationRules.Count);
            Assert.Equal(4, ticketData.Tickets.Count);
            TicketValidationResult ticketValidationResult = TicketValidator.ValidateNearby(ticketData);

            Assert.Equal(3, ticketValidationResult.Tickets.Count);
            FieldOrderResult fieldOrderResult = FieldOrderFinder.FindFieldOrderFor(ticketValidationResult.Tickets, ticketData.ValidationRules);
        }
Exemplo n.º 5
0
            internal static TicketValidationResult ValidateNearby(TicketData ticketData)
            {
                TicketValidationResult result        = new TicketValidationResult();
                List <Ticket>          nearbyTickets = new List <Ticket>(ticketData.Tickets);

                nearbyTickets.RemoveAt(0);
                foreach (Ticket ticket in nearbyTickets)
                {
                    result.Merge(Validate(ticket, ticketData.ValidationRules));
                }
                return(result);
            }
Exemplo n.º 6
0
            private static TicketValidationResult Validate(Ticket ticket, List <TicketValidationRule> validationRules)
            {
                TicketValidationResult result = new TicketValidationResult();

                foreach (int value in ticket.DataItems)
                {
                    if (!validationRules.Any(x => x.IsValidFor(value)))
                    {
                        result.InvalidValues.Add(value);
                        result.IsValid = false;
                    }
                }
                if (result.IsValid)
                {
                    result.Tickets.Add(ticket);
                }
                return(result);
            }
Exemplo n.º 7
0
 internal void Merge(TicketValidationResult result)
 {
     InvalidValues.AddRange(result.InvalidValues);
     IsValid &= result.IsValid;
     Tickets.AddRange(result.Tickets);
 }