puzzle_input = sys.stdin.read().strip() rules = [] your_ticket = None nearby_tickets = [] is_your_ticket = False is_nearby_tickets = False for line in puzzle_input.split('\n'): if '-' in line: # Parse a rule. rules.append(Rule.from_string(line)) elif 'your ticket' in line: is_your_ticket = True elif line and is_your_ticket: your_ticket = Ticket.from_string(line) is_your_ticket = False elif 'nearby tickets' in line: is_nearby_tickets = True elif line and is_nearby_tickets: nearby_tickets.append(Ticket.from_string(line)) invalid_fields = [] results = {} field_rule = [[x, y] for x in range(len(rules)) for y in range(len(rules))] for i, ticket in enumerate(nearby_tickets): is_valid_ticket = True for j, num in enumerate(ticket.nums): each_rule = [r.valid(num) for r in rules]