39 lines
691 B
Python
39 lines
691 B
Python
|
with open('data06.txt') as f:
|
||
|
initial_banks = list(map(int, f.read().split()))
|
||
|
|
||
|
class Memory:
|
||
|
def __init__(self, banks):
|
||
|
self.banks = banks
|
||
|
|
||
|
def reallocate(self):
|
||
|
index = self.banks.index(max(self.banks))
|
||
|
blocks = self.banks[index]
|
||
|
self.banks[index] = 0
|
||
|
for b in range(blocks):
|
||
|
target = (index + b + 1) % len(self.banks)
|
||
|
self.banks[target] += 1
|
||
|
|
||
|
|
||
|
mem = Memory(initial_banks)
|
||
|
seen = {tuple(mem.banks)}
|
||
|
count = 0
|
||
|
|
||
|
while True:
|
||
|
mem.reallocate()
|
||
|
count += 1
|
||
|
snapshot = tuple(mem.banks)
|
||
|
if snapshot in seen:
|
||
|
break
|
||
|
else:
|
||
|
seen.add(snapshot)
|
||
|
|
||
|
count = 0
|
||
|
final = tuple(mem.banks)
|
||
|
|
||
|
while True:
|
||
|
mem.reallocate()
|
||
|
count += 1
|
||
|
if tuple(mem.banks) == final:
|
||
|
break
|
||
|
|
||
|
print(count)
|