diff --git a/6/6p1.py b/6/6p1.py new file mode 100755 index 0000000..50f6b79 --- /dev/null +++ b/6/6p1.py @@ -0,0 +1,38 @@ +#!/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): + total = 0 + idx = 0 + states = [] + banks = [] + size = len(puzzle) - 1 + + banksstr = ''.join(map(str,puzzle)) + states.append(banksstr) + + while states.count(banksstr) == 1: + 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)) + states.append(banksstr) + total = total + 1 + + return total + + +for puzzle in inputs: + print(puzzle, solve(puzzle)) diff --git a/6/6p2.py b/6/6p2.py new file mode 100755 index 0000000..3b8d275 --- /dev/null +++ b/6/6p2.py @@ -0,0 +1,45 @@ +#!/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): + idx = 0 + states = [] + banks = [] + 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))