Sean McLemon | Advent of Code

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


2017-12-13 - Packet Scanners

(original .ipynb)
test_input_str = """0: 3
1: 2
4: 4
6: 4"""

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


def parse_input(input_str):
    scanners = {}
    for line in input_str.split("\n"):
        r_str, d_str = line.split(": ")
        yield (int(r_str), int(d_str))


def caught(d, picoseconds):
    return (picoseconds == 0) or (picoseconds % (2*(d-1))) == 0


def total_severity(scanners, wait):
    return sum(r*d for r,d in scanners if caught(d, r+wait))


def part_one(input_str):
    scanners = parse_input(input_str)
    return total_severity(scanners, 0)


assert 24 == part_one(test_input_str)
print("part one:", part_one(puzzle_input_str))
part one: 1476
def part_two(input_str):
    scanners = list(parse_input(input_str))
    wait = 0
    while True:
        if all(not caught(d, r+wait) for r,d in scanners):
            return wait
        wait += 1


assert 10 == part_two(test_input_str)

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