39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from solutions import BaseSolution
|
|
|
|
|
|
class Solution(BaseSolution):
|
|
input_file = "12.txt"
|
|
seen = []
|
|
|
|
def __str__(self):
|
|
return "Day 12: Digital Plumber"
|
|
|
|
def _walk(self, i, programs):
|
|
line = next(filter(lambda l: l.startswith("{} <->".format(i)), programs))
|
|
piped = line.split()[2:]
|
|
self.seen.add(i)
|
|
for p in [int(p.replace(",", "")) for p in piped]:
|
|
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
|
|
|
|
|
|
if __name__ == "__main__":
|
|
solution = Solution()
|
|
solution.show_results()
|