advent-of-code/2018-python/solutions/day_08.py

52 lines
1.4 KiB
Python
Raw Normal View History

2021-11-01 16:40:46 +01:00
import sys
from solutions import BaseSolution
sys.setrecursionlimit(15000) # hej python!
class Solution(BaseSolution):
input_file = '08.in'
def __str__(self):
return 'Day 8: Memory Maneuver'
def solve(self, puzzle_input):
data = list(map(int, (puzzle_input.split())))
_, s = self._get_sum(0, 0, data)
return s
def solve_again(self, puzzle_input):
data = list(map(int, (puzzle_input.split())))
_, value = self._get_value(0, data)
return value
def _get_sum(self, i, s, data):
children = data[i]
meta_entries = data[i + 1]
i += 2
for _ in range(children):
i, s = self._get_sum(i, s, data)
s += sum([data[i + n] for n in range(meta_entries)])
return i + meta_entries, s
def _get_value(self, i, data):
children = data[i]
meta_entries = data[i + 1]
i += 2
child_values = {}
for n in range(children):
i, value = self._get_value(i, data)
child_values[n] = value
meta_values = [data[i + n] for n in range(meta_entries)]
if children:
v = sum(child_values.get(n - 1, 0) for n in meta_values)
else:
v = sum(meta_values)
return i + meta_entries, v
if __name__ == '__main__':
solution = Solution()
solution.show_results()