Update day16.py
Fixed part2, added types
This commit is contained in:
parent
f89679ae0f
commit
c48a39e9e6
|
@ -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))
|
||||||
|
|
Loading…
Reference in a new issue