Create day07.py
This commit is contained in:
parent
9ae635bdac
commit
92a2e7acdb
47
2020/Python/day07.py
Normal file
47
2020/Python/day07.py
Normal file
|
@ -0,0 +1,47 @@
|
|||
import re
|
||||
|
||||
CHILD_PARSE = re.compile(r"(\d+) (.*)")
|
||||
PARSED_DICT: dict[str, list[(int, str)]] = {}
|
||||
|
||||
with open("input.txt") as file:
|
||||
for line in file:
|
||||
_line = line.strip()
|
||||
(a, b) = map(str.strip, _line.split("contain"))
|
||||
parent = a[:-1]
|
||||
c = list(map(str.strip, b.split(",")))
|
||||
children = []
|
||||
for child in c:
|
||||
cleaned = child.replace("bags", "bag").replace(".", "")
|
||||
children += CHILD_PARSE.findall(cleaned)
|
||||
PARSED_DICT[parent] = children
|
||||
|
||||
|
||||
def solve_p1() -> int:
|
||||
|
||||
def check_contain(start: str, goal: str) -> bool:
|
||||
if start in PARSED_DICT:
|
||||
for _, child in PARSED_DICT[start]:
|
||||
if child == goal or check_contain(child, goal):
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_all(name: str) -> set:
|
||||
result = set()
|
||||
for bag in PARSED_DICT.keys():
|
||||
if check_contain(bag, name):
|
||||
result.add(bag)
|
||||
return result
|
||||
|
||||
return len(check_all("shiny gold bag"))
|
||||
|
||||
|
||||
def solve_p2() -> int:
|
||||
|
||||
def count_contained(name: str) -> int:
|
||||
result = 1
|
||||
if name in PARSED_DICT:
|
||||
for number, child in PARSED_DICT[name]:
|
||||
result += int(number) * count_contained(child)
|
||||
return result
|
||||
|
||||
return count_contained("shiny gold bag")-1 # sub 1 because the root counts as 0
|
Loading…
Reference in a new issue