Sean McLemon | Advent of Code

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


2015-12-10 - Elves Look, Elves Say

(original .ipynb)

Puzzle input is a string of integer digits. Part one involves applying some rules of a game to expand the string of digits 40 times. Part two is the same but for 50 times.

puzzle_input_str = open("./puzzle_input/day10.txt").read()


def step(digits):
    prev = digits[0]
    count = 1
    for d in digits[1:]:
        if prev == d:
            count += 1
        else:
            yield count
            yield prev
            prev = d
            count = 1
    yield count
    yield prev


def expand(digits, count=40):
    while count > 0:
        digits = list(step(digits))
        count -= 1
    return digits


def part_one(input_str, count=40):
    digits = expand([int(c) for c in input_str], count)
    return len(digits)


def stringify(l):
    return "".join(str(d) for d in l)

assert "11" == stringify(expand("1", 1))
assert "21" == stringify(expand("11", 1))
assert "1211" == stringify(expand("21", 1))
assert "111221" == stringify(expand("1211", 1))
assert "312211" == stringify(expand("111221", 1))


print("part one:", part_one(puzzle_input_str))
part one: 252594
def part_two(input_str):
    return part_one(input_str, 50)


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