40 lines
1.1 KiB
Python
40 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()
|