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