#!/usr/bin/env python # -*- coding: utf-8 -*- inputs = [ [0,2,7,0], [0,5,10,0,11,14,13,4,11,8,8,7,1,4,12,11] ] def solve(puzzle): states = [] size = len(puzzle) - 1 banksstr = ''.join(map(str,puzzle)) states.append(banksstr) while True: maxval = max(puzzle) maxidx = puzzle.index(maxval) puzzle[maxidx] = 0 while maxval > 0: maxidx = maxidx + 1 if maxidx > size: maxidx = 0 puzzle[maxidx] = puzzle[maxidx] + 1 maxval = maxval - 1 banksstr = ''.join(map(str,puzzle)) if states.count(banksstr) == 1: states.append(banksstr) break states.append(banksstr) lastidx = len(states) - 1 lastval = states[lastidx] firstidx = states.index(lastval) return lastidx - firstidx for puzzle in inputs: print(puzzle, solve(puzzle))