advent-of-code/2015-python/solutions/day_19.py
Anders Englöf Ytterström 5a5e843129
2015, day 16-25 (first completed calendar!) (#11)
* Solve 2015:16 "Aunt Sue"

* Make 2023:08 future compatible

Code used to work with another version of python.

* Solve 2015:17 "No such Thing as Too much"

* Solve 2015:18 "Like a GIF For Your Yard"

Also solve 2015:06 just in case, was just a ref
in the end.

* Solve 2015:19 "Medicine for Rudolph"

* Solve 2015:20 "Infinite Elves and Infinite Houses"

* Solve 2023:21 "RPG Simulator 20XX"

* Solve 2015:22 "Wizard Simulator 20XX"

* Solve 2015:23 "Opening the Turing Lock"

* Solve 2015:25 "Let it Snow"

Wrote p2rc and rc2p just for academic purposes.
Puzzles could be solved anyway.

* Solve 2015:24 "Hangs in the Balance"

---------

Co-authored-by: Anders Englöf Ytterström <anders@playmaker.ai>
2023-12-19 14:24:28 +01:00

51 lines
1.2 KiB
Python

from collections import defaultdict
from solutions import BaseSolution
import re
from random import shuffle, choice
class Solution(BaseSolution):
input_file = "19.txt"
def __str__(self):
return "Day 19: Medicine for Rudolph"
def solve(self, pi):
ml, s = pi.split("\n\n")
o = set()
for l in ml.splitlines():
k, v = l.split(" => ")
for mo in re.finditer(k, s):
a, b = mo.span()
o.add(s[:a] + v + s[b:])
return len(o)
def solve_again(self, pi):
m = {}
ml, e = pi.split("\n\n")
for l in ml.splitlines():
k, v = l.split(" => ")
m[v] = k
p2 = 0
while p2 == 0:
s = e
c = 0
os = ""
keys = list(m.keys())
shuffle(keys)
while os != s:
os = s
for k in keys:
while k in s:
c += s.count(k)
s = s.replace(k, m[k])
p2 = int(s == "e") * c
return p2
def parse_input(self, data):
return data.strip()
if __name__ == "__main__":
solution = Solution()
solution.show_results()