advent-of-code/2017-python/solutions/day_12.py

40 lines
1.1 KiB
Python
Raw Normal View History

2021-11-01 16:40:46 +01:00
from solutions import BaseSolution
class Solution(BaseSolution):
2025-05-06 20:14:58 +02:00
input_file = "12.txt"
2021-11-01 16:40:46 +01:00
seen = []
def __str__(self):
2025-05-06 20:14:58 +02:00
return "Day 12: Digital Plumber"
2021-11-01 16:40:46 +01:00
def _walk(self, i, programs):
2025-05-06 20:14:58 +02:00
line = next(filter(lambda l: l.startswith("{} <->".format(i)), programs))
2021-11-01 16:40:46 +01:00
piped = line.split()[2:]
self.seen.add(i)
2025-05-06 20:14:58 +02:00
for p in [int(p.replace(",", "")) for p in piped]:
2021-11-01 16:40:46 +01:00
if p not in self.seen:
self._walk(p, programs)
def solve(self, puzzle_input):
programs = [pi.strip() for pi in puzzle_input.splitlines()]
self.seen = set()
self._walk(0, programs)
return len(self.seen)
def solve_again(self, puzzle_input):
programs = [pi.strip() for pi in puzzle_input.splitlines()]
self.seen = set()
groups = 0
for line in programs:
pid = int(line.split()[0])
if pid not in self.seen:
self._walk(pid, programs)
groups += 1
return groups
2025-05-06 20:14:58 +02:00
if __name__ == "__main__":
2021-11-01 16:40:46 +01:00
solution = Solution()
solution.show_results()