Day 7
This commit is contained in:
38
day07/part2.py
Normal file
38
day07/part2.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from day07.common import BaseGraph
|
||||
|
||||
|
||||
class Graph(BaseGraph):
|
||||
|
||||
def depth_first_search(self, start: str, search_contained_by: bool = False):
|
||||
visited = []
|
||||
|
||||
def count_bags(nxt):
|
||||
if nxt not in self._nodes:
|
||||
return 0
|
||||
node = self._nodes[nxt]
|
||||
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)
|
||||
|
||||
count = graph.depth_first_search("shiny gold", search_contained_by=False) - 1
|
||||
|
||||
print(count)
|
||||
Reference in New Issue
Block a user