Files
python-aoc-2020/day07/part2.py
2020-12-07 14:08:01 +01:00

51 lines
1.4 KiB
Python

from day07.common import BaseGraph
import datetime
class Graph(BaseGraph):
def depth_first_search(self, start: str, search_contained_by: bool = False, use_cache=True):
visited = []
def count_bags(nxt):
if nxt not in self._nodes:
return 0
node = self._nodes[nxt]
if not use_cache:
node.visited = False
node.count = 0
if node.visited:
return node.count
node.visited = True
visited.append(node)
iter_over = node.contained_by if search_contained_by else node.contains
cnt = sum(val*count_bags(key) for key, val in iter_over.items()) + 1
node.count = cnt
return cnt
overall_cnt = count_bags(start)
for visit in visited:
visit.visited = False
visit.count = 0
return overall_cnt
graph = Graph()
lines = (x.strip() for x in open("input.txt"))
count = -1
for line in lines:
graph.add_line(line)
a = datetime.datetime.now()
count = graph.depth_first_search("shiny gold", search_contained_by=False) - 1
b = datetime.datetime.now() - a
print("With dyn programming", b)
print(count)
a = datetime.datetime.now()
count = graph.depth_first_search("shiny gold", search_contained_by=False, use_cache=False) - 1
b = datetime.datetime.now() - a
print("Without dyn programming", b)
print(count)