diff --git a/2017/06/input.txt b/2017/06/input.txt new file mode 100644 index 0000000..adacc33 --- /dev/null +++ b/2017/06/input.txt @@ -0,0 +1 @@ +0 5 10 0 11 14 13 4 11 8 8 7 1 4 12 11 diff --git a/2017/06/solve.py b/2017/06/solve.py new file mode 100644 index 0000000..f6841fa --- /dev/null +++ b/2017/06/solve.py @@ -0,0 +1,49 @@ +import sys + +# PART 1 + +def load_buckets(filename): + with open(filename, "r") as f: + return tuple(map(int, f.read()[:-1].split("\t"))) + +def redistribute(buckets): + l = list(buckets) + i = l.index(max(l)) + n = l[i] + l[i] = 0 + + while n > 0: + i = (i + 1) % len(l) + l[i] += 1 + n -= 1 + + return tuple(l) + +def find_repeat(buckets): + cycles = 0 + states = {buckets: 0} + while True: + buckets = redistribute(buckets) + cycles += 1 + if buckets in states: + return cycles, states[buckets] + else: + states[buckets] = cycles + +# PART 2 + +def loop_cycles(buckets): + cycles, start_cycle = find_repeat(buckets) + return cycles - start_cycle + +def main(filename): + print(f"Solutions for {filename}") + buckets = load_buckets(filename) + cycles, _ = find_repeat(buckets) + print(f"Part 1: {cycles}") + cycles_2 = loop_cycles(buckets) + print(f"Part 2: {cycles_2}") + +if __name__ == "__main__": + for filename in sys.argv[1:]: + main(filename) diff --git a/2017/06/test_input.txt b/2017/06/test_input.txt new file mode 100644 index 0000000..fa9ed7e --- /dev/null +++ b/2017/06/test_input.txt @@ -0,0 +1 @@ +0 2 7 0