Update day16.py

Fixed part2, added types
This commit is contained in:
kamoshi 2020-12-16 15:06:38 +01:00 committed by GitHub
parent f89679ae0f
commit c48a39e9e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2,7 +2,7 @@ import re
from typing import Tuple from typing import Tuple
def parse_data(): def parse_data() -> Tuple[dict[str, Tuple[int, int, int, int]], list[int], list[list[int]]]:
with open("input.txt") as file: with open("input.txt") as file:
constraints = {} constraints = {}
my_ticket = [] my_ticket = []
@ -30,7 +30,7 @@ def parse_data():
return constraints, my_ticket, other_tickets return constraints, my_ticket, other_tickets
def check_ticket_valid(ticket, constraints): def check_ticket_valid(ticket: list[int], constraints: dict[str, Tuple[int, int, int, int]]) -> Tuple[bool, int]:
counter = 0 counter = 0
valid = True valid = True
@ -47,7 +47,7 @@ def check_ticket_valid(ticket, constraints):
return valid, counter return valid, counter
def solve_p1(constraints, tickets): def solve_p1(constraints: dict[str, Tuple[int, int, int, int]], tickets: list[list[int]]) -> int:
counter = 0 counter = 0
for ticket in tickets: for ticket in tickets:
_, ratio = check_ticket_valid(ticket, constraints) _, ratio = check_ticket_valid(ticket, constraints)
@ -55,10 +55,9 @@ def solve_p1(constraints, tickets):
return counter return counter
# TODO: PART 2 IS BROKEN FOR NOW def solve_p2(constraints: dict[str, Tuple[int, int, int, int]], my_ticket: list[int], tickets: list[list[int]]) -> int:
def solve_p2(constraints, my_ticket, other_tickets):
only_valid = [] only_valid = []
for ticket in other_tickets: for ticket in tickets:
valid, _ = check_ticket_valid(ticket, constraints) valid, _ = check_ticket_valid(ticket, constraints)
if valid: if valid:
only_valid.append(ticket) only_valid.append(ticket)
@ -72,7 +71,7 @@ def solve_p2(constraints, my_ticket, other_tickets):
fields[i] = possible fields[i] = possible
# Intersect sets with possibilities iteratively # Intersect sets with possibilities iteratively
for ticket in other_tickets: for ticket in only_valid:
for i in range(len(ticket)): for i in range(len(ticket)):
possible_here = set() possible_here = set()
for constraint in constraints: for constraint in constraints:
@ -100,7 +99,7 @@ def solve_p2(constraints, my_ticket, other_tickets):
result = 1 result = 1
for k, v in fields_final.items(): for k, v in fields_final.items():
if v[:10] == "departure": if v[:9] == "departure":
result *= my_ticket[k] result *= my_ticket[k]
return result return result
@ -108,4 +107,4 @@ def solve_p2(constraints, my_ticket, other_tickets):
CONSTRAINTS, MY_TICKET, OTHER_TICKETS = parse_data() CONSTRAINTS, MY_TICKET, OTHER_TICKETS = parse_data()
print(solve_p1(CONSTRAINTS, OTHER_TICKETS)) print(solve_p1(CONSTRAINTS, OTHER_TICKETS))
# print(solve_p2(CONSTRAINTS, MY_TICKET, OTHER_TICKETS)) print(solve_p2(CONSTRAINTS, MY_TICKET, OTHER_TICKETS))