36 lines
990 B
Python
36 lines
990 B
Python
from day07.common import BaseGraph
|
|
|
|
|
|
class Graph(BaseGraph):
|
|
def breadth_first_search(self, start: str, search_contained_by: bool = False):
|
|
visited = []
|
|
todo = [start]
|
|
while len(todo) > 0:
|
|
nxt = todo.pop()
|
|
if nxt in self._nodes:
|
|
node = self._nodes[nxt]
|
|
if node.visited:
|
|
continue
|
|
node.visited = True
|
|
visited.append(node)
|
|
yield nxt
|
|
iter_over = node.contained_by if search_contained_by else node.contains
|
|
for key, val in iter_over.items():
|
|
if val > 0:
|
|
todo.append(key)
|
|
for visit in visited:
|
|
visit.visited = False
|
|
|
|
|
|
graph = Graph()
|
|
lines = (x.strip() for x in open("input.txt"))
|
|
count = -1
|
|
|
|
for line in lines:
|
|
graph.add_line(line)
|
|
|
|
for found in graph.breadth_first_search("shiny gold", search_contained_by=True):
|
|
count += 1
|
|
|
|
print(count)
|