[py] Port 2018_05

This commit is contained in:
Joscha 2022-12-06 15:26:52 +01:00
parent fe36dd0af3
commit a06dcab3ec
5 changed files with 81 additions and 91 deletions

View file

@ -2,7 +2,7 @@ import sys
import argparse
from pathlib import Path
from .y2018 import d01, d02, d03, d04
from .y2018 import d01, d02, d03, d04, d05
from .y2020 import d10
from .y2021 import d14
from .y2022 import d01, d02, d03, d04, d05, d06
@ -12,6 +12,7 @@ DAYS = {
"2018_02": y2018.d02.solve,
"2018_03": y2018.d03.solve,
"2018_04": y2018.d04.solve,
"2018_05": y2018.d05.solve,
"2020_10": y2020.d10.solve,
"2021_14": y2021.d14.solve,
"2022_01": y2022.d01.solve,

79
py/aoc/y2018/d05.py Normal file
View file

@ -0,0 +1,79 @@
# PART 1
def naive_react(pol):
for i in range(len(pol) - 1):
if pol[i].lower() == pol[i + 1].lower() and pol[i] != pol[i + 1]:
print("Naive react says: More reacting is possible.")
def react(pol):
while True:
i = 0
while i < len(pol) - 1:
pol_cur, pol_next = pol[i], pol[i + 1]
if pol_cur.lower() == pol_next.lower() and pol_cur != pol_next:
del pol[i]
del pol[i]
i = max(0, i - 1)
else:
i += 1
else:
return
# def react(pol):
# start = 0
# while True:
# i = start
# while i < len(pol) - 1:
# if pol[i].lower() == pol[i+1].lower() and pol[i] != pol[i+1]:
# del pol[i]
# del pol[i]
# start = max(0, start - 1)
# break
# elif i == start + 1:
# start = i
# i += 1
# else:
# return
def result(pol):
l = pol.copy()
# print("".join(l))
react(l)
# print("->", "".join(l))
naive_react(l)
return len(l)
# PART 2
def removable_chars(pol):
return set(c.lower() for c in pol)
def remove(pol, char):
return [c for c in pol if c.lower() != char.lower()]
def find_obstructing(pol):
results = []
chars = removable_chars(pol)
for c in sorted(chars):
l = remove(pol, c)
n = result(l)
# print("Removed", c, "-> length", n)
results.append(n)
return min(results)
def solve(inputstr):
pols = [list(line) for line in inputstr.splitlines()]
for pol in pols:
length = result(pol)
print(f"Part 1: {length}")
best_result = find_obstructing(pol)
print(f"Part 2: {best_result}")