Day 12 - Advent of Code 2023
Working solutions for the day 12 puzzles.
Part One
""" day_12_01.py """
# usage: python3 day_12_01.py < input
import itertools
import re
import sys
answer = 0
for line in sys.stdin:
template, recipe = line.split()
recipe = list(map(int, recipe.split(',')))
u, v = r'\.+', r'\.*'
expr = re.compile(v + u.join([i * '#' for i in recipe]) + v)
n = template.count('?')
hashes = sum(recipe) - template.count('#')
for p in itertools.filterfalse(lambda x: x.count('#') != hashes,
itertools.product('.#', repeat=n)):
q = list(p)
item = ''.join([i if i != '?' else q.pop() for i in template])
if expr.fullmatch(item):
answer += 1
print(answer)
Part Two