From 3bb23093ae15aaa2b11c3b3d771d6a9e42b73a0c Mon Sep 17 00:00:00 2001 From: Cody Hiar Date: Fri, 5 Feb 2021 10:43:34 -0700 Subject: day 7 part 1 --- day7/day7.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 day7/day7.py (limited to 'day7/day7.py') diff --git a/day7/day7.py b/day7/day7.py new file mode 100644 index 0000000..1f26537 --- /dev/null +++ b/day7/day7.py @@ -0,0 +1,35 @@ +"""Day 7.""" +import re +from collections import defaultdict + +pattern = r"(\d+) ([a-z]+) ([a-z]+) (bag[s]?)" +prog = re.compile(pattern) + +with open("input") as f: + sections = f.read().rstrip().split("\n") + +mapping = defaultdict(lambda: []) + +# Put bags into dict structure +for section in sections: + parent, child_str = section.split(" bags contain ") + children = [] + if "no other bags" not in child_str: + for child in child_str.replace(".", "").split(", "): + _, adjective, color, _ = prog.match(child).groups() + children.append(f"{adjective} {color}") + for child in children: + mapping[child].append(parent) + +# Part 1 +bags = set(mapping['shiny gold']) +while True: + new_bags = bags.copy() + for bag in bags: + for new_bag in mapping[bag]: + new_bags.add(new_bag) + if len(new_bags) == len(bags): + print(len(bags)) + break + else: + bags = new_bags -- cgit v1.2.3