advent-of-code/2018-python/solutions/day_05.py
2021-11-01 16:45:03 +01:00

35 lines
1 KiB
Python

from functools import reduce
from solutions import BaseSolution
class Solution(BaseSolution):
input_file = '05.in'
def __str__(self):
return 'Day 5: Alchemical Reduction'
def solve(self, puzzle_input):
return self._react_polymer(puzzle_input)
def solve_again(self, puzzle_input):
sorted_data = sorted(puzzle_input)
polymer_reactions = set()
for char in range(ord(sorted_data[0]), ord(sorted_data[-1])):
polymer_reactions.add(self._react_polymer(puzzle_input.replace(chr(char), '').replace(chr(char + 32), '')))
return min(polymer_reactions)
def _react_polymer(self, data):
def remove_pairs(done, candidate):
if not done:
return candidate
last = done[-1]
if abs(ord(last) - ord(candidate)) == 32:
return done[:-1]
return ''.join([done, candidate])
return len(reduce(remove_pairs, data))
if __name__ == '__main__':
solution = Solution()
solution.show_results()