From e7c9108b95e39d7ea5a29ae06d619c4727f11027 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Fri, 29 Oct 2021 23:02:39 +0200 Subject: Initial commit --- 2020/07/puzzle-2.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100755 2020/07/puzzle-2.py (limited to '2020/07/puzzle-2.py') diff --git a/2020/07/puzzle-2.py b/2020/07/puzzle-2.py new file mode 100755 index 0000000..c87ea13 --- /dev/null +++ b/2020/07/puzzle-2.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + + +bdict: dict[str, list[str]] = {} + +# Recursively find the number of sub-bags in a bag +def total_bags(innerbags: list[dict[int, str]]) -> int: + if innerbags[0]["name"] == "no other": + return 0 + + return sum([bag["count"] + bag["count"] * total_bags(bdict[bag["name"]]) for bag in innerbags]) + + +def main() -> None: + with open("input", "r") as f: + lines = f.readlines() + + for baginfo in lines: + data = baginfo.split(" bags contain") + + # { bag_name: [{ count: n, name: bag_name_ }, ...] } + bdict[data[0]] = [] + for b in data[1].split(","): + bdict[data[0]].append( + { + "count": int(b.replace("no", "0").split(" ")[1]), + "name": " ".join(b.split(" ")[-3:][:2]), + } + ) + + print(total_bags(bdict["shiny gold"])) + + +if __name__ == "__main__": + main() -- cgit v1.2.3