Example #1
0
            public int GetErrorRate()
            {
                var retVal = 0;

                foreach (var ticket in NearbyTickets)
                {
                    var isValid = true;
                    foreach (var t in ticket)
                    {
                        if (AcceptableRanges.Any(i =>
                                                 Enumerable.Range(i.Min1, i.Max1 - i.Min1 + 1).Contains(t) ||
                                                 Enumerable.Range(i.Min2, i.Max2 - i.Min2 + 1).Contains(t)))
                        {
                            continue;
                        }
                        retVal += t;
                        isValid = false;
                    }

                    if (isValid)
                    {
                        ValidNearbyTickets.Add(ticket);
                    }
                }

                return(retVal);
            }
Example #2
0
            public long GetDepartureAnswer()
            {
                ValidNearbyTickets.Add(MyTicket);

                for (var ii = 0; ii < MyTicket.Count(); ii++)
                {
                    var ticketVals = ValidNearbyTickets.Select(tVal => tVal[ii]).ToList();
                    foreach (var range in AcceptableRanges.Where(range => ticketVals.All(j =>
                                                                                         Enumerable.Range(range.Min1, range.Max1 - range.Min1 + 1).Contains(j) ||
                                                                                         Enumerable.Range(range.Min2, range.Max2 - range.Min2 + 1).Contains(j))))
                    {
                        range.TicketPositions.Add(ii);
                    }
                }

                // Figure out which ranges belong to which positions
                while (AcceptableRanges.Any(i => i.TicketPositions.Count <int>() != 1))
                {
                    var rangesWithSinglePosition = AcceptableRanges.Where(i => i.TicketPositions.Count() == 1).ToList();
                    var filledPositions          = rangesWithSinglePosition.Select(i => i.TicketPositions.First()).ToList();

                    foreach (var val in filledPositions)
                    {
                        foreach (var range in AcceptableRanges.Where(i => i.TicketPositions.Count() > 1 && i.TicketPositions.Contains(val)))
                        {
                            range.TicketPositions.Remove(val);
                        }
                    }
                }


                //foreach (var range in AcceptableRanges.Where(i => i.Label.Contains("departure")))
                //{
                //    retVal *= MyTicket[range.TicketPositions.First()];
                //}

                //return retVal;
                return(AcceptableRanges.Where(i => i.Label.Contains("departure")).Aggregate <Range, long>(1, (current, range) => current * MyTicket[range.TicketPositions.First()]));
            }