39 lines
875 B
Python
39 lines
875 B
Python
with open('input/day6') as f:
|
|
puzzle_input = tuple(map(int, f.read().split()))
|
|
|
|
def cycle(banks):
|
|
banks = list(banks)
|
|
idx, blocks = max(enumerate(banks), key=lambda x: x[1])
|
|
banks[idx] = 0
|
|
idx = (idx+1) % len(banks)
|
|
while blocks:
|
|
banks[idx] += 1
|
|
blocks -= 1
|
|
idx = (idx+1) % len(banks)
|
|
return tuple(banks)
|
|
|
|
def reallocate(banks):
|
|
seen = set()
|
|
seen.add(banks)
|
|
count = 0
|
|
while True:
|
|
banks = cycle(banks)
|
|
count += 1
|
|
if banks in seen:
|
|
return count
|
|
seen.add(banks)
|
|
|
|
print(reallocate(puzzle_input))
|
|
|
|
def reallocate_loop(banks):
|
|
seen = {}
|
|
time = 0
|
|
seen[banks] = time
|
|
while True:
|
|
banks = cycle(banks)
|
|
time += 1
|
|
if banks in seen:
|
|
return time - seen[banks]
|
|
seen[banks] = time
|
|
|
|
print(reallocate_loop(puzzle_input))
|