aoc2018/day05.py

69 lines
1.5 KiB
Python

from tools.aoc import AOCDay
from typing import Any
def react(polymer: str) -> str:
reacted = True
while reacted:
reacted = False
new_poly = ""
i = 0
while i < len(polymer) - 1:
if abs(ord(polymer[i]) - ord(polymer[i + 1])) != 32:
new_poly += polymer[i]
else:
i += 1
reacted = True
i += 1
if i < len(polymer):
new_poly += polymer[-1]
polymer = new_poly
return polymer
class Day(AOCDay):
inputs = [
[
(10, "test_input5_1"),
(9348, "input5")
],
[
(4, "test_input5_1"),
(4996, "input5")
]
]
def part1(self) -> Any:
polymer = self.getInput()
return len(react(polymer))
def part2(self) -> Any:
polymer = self.getInput()
tested = set()
min_length = len(polymer)
for c in polymer:
if c in tested:
continue
tested.add(c.upper())
tested.add(c.lower())
test_polymer = ""
for x in polymer:
if x != c.upper() and x != c.lower():
test_polymer += x
this_length = len(react(test_polymer))
if this_length < min_length:
min_length = this_length
return min_length
if __name__ == '__main__':
day = Day(2018, 5)
day.run(verbose=True)