Quick actions

cmd+k|ctrl+k

Navigation

Languages

aoc2017-day06

Snippet info

Language

Python

Visibility

public

Author

christophe.guillon.perso

Created

2017-12-06T05:28:13Z

Updated

2017-12-06T05:28:13Z

import sys

def maxidx(input):
    mmax = [None, 0]
    for i in range(len(input)):
        if input[i] > mmax[1]: mmax = [i, input[i]]
    return mmax[0]
    
def doit(input):
    banks = list(map(int,input.split()))
    size = len(banks)
    steps = 1
    seen = {}
    while True:
        i = maxidx(banks)
        m = banks[i]
        item = int((m + size -1) / size)
        last = m - (item * (size - 1))
        banks[i] = 0
        j = 1
        while m > 0:
            banks[(i+j)%size] += 1
            m -= 1
            j += 1
        if str(banks) in seen: break 
        seen[str(banks)] = True
        steps += 1
    return "%d" % steps

input = sys.stdin.read()
print(doit(input))
INFO