Day 19 - Advent of Code 2024
19 December 2024
Working solutions for the day 19 puzzles.
Part One
""" day_19_01.py """
# usage: python3 day_19_01.py < input
import sys
cache = set()
def verify(design, templates):
    """ can design be assembled from templates """
    if design in cache or design == '':
        return True
    for i in [len(t) for t in templates if design.startswith(t)]:
        if verify(design[i:], templates):
            cache.add(design[i:])
            return True
    return False
with sys.stdin as infile:
    patterns = input().split(', ')
    input()
    valid = sum(1 for proposed in infile if verify(proposed.strip(), patterns))
print(valid)
Part Two
""" day_19_02.py """
# usage: python3 day_19_02.py < input
import sys
cache = {}
def count(design, templates):
    """ how many ways can design be assembled from templates """
    if design in cache:
        return cache[design]
    if design == '':
        return 1
    num = 0
    for i in [len(t) for t in templates if design.startswith(t)]:
        partial = cache.setdefault(design[i:], count(design[i:], templates))
        num += partial
    return num
with sys.stdin as infile:
    patterns = input().split(', ')
    input()
    total = sum(count(proposed.strip(), patterns) for proposed in infile)
print(total)
