35 lines
1 KiB
Python
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()
|