2017-12-17 - Spinlock
(original .ipynb)
test_skip = 3
puzzle_skip = 344
def part_one(skip):
buffer = [0]
val = 1
pos = 0
while val <= 2017:
pos = (pos + skip) % val + 1
buffer.insert(pos, val)
val += 1
return buffer[pos+1]
assert 638 == part_one(test_skip)
print("part one:", part_one(puzzle_skip))
part one: 996
# realised we actually don't need to build the buffer, just track what we
# _would_ have written to position [1]
def part_two():
val = 1
pos = 0
after_zero = None
while val <= 50000000:
pos = (pos + puzzle_skip) % val + 1
if pos == 1:
after_zero = val
val += 1
return after_zero
print("part two:", part_two())
part two: 1898341