Sean McLemon | Advent of Code

Home | Czech | Blog | GitHub | Advent Of Code | Notes


2015-12-19 - Medicine for Rudolph

(original .ipynb)
puzzle_input_str = open("./puzzle_input/day19.txt").read()

test_input_str = """H => HO
H => OH
O => HH

HOH"""


def parse_rule(rule_str):
    tokens = rule_str.split(" ")
    return tokens[0], tokens[2]


def modifications(source, replacement, molecule):
    source_len = len(source)
    for i in range(1+len(molecule)-source_len)        :
        if source == molecule[i:i+source_len]:
            yield molecule[:i] + replacement + molecule[i+source_len:]


def part_one(input_str):
    rules_str, molecule = input_str.split("\n\n")
    rules = [parse_rule(rule_str) for rule_str in rules_str.split("\n")]
    molecules = set()
    
    for source, replacement in rules:
        for modified_molecule in modifications(source, replacement, molecule):
            molecules.add(modified_molecule)
    
    return len(molecules)


assert 4 == part_one(test_input_str)

print("part one:", part_one(puzzle_input_str))
part one: 535
def part_two(input_str):
    pass


# print("part two:", part_two(puzzle_input_str))