import sys sys.path.append("../common") import aoc data = [int(l) for l in aoc.data.split("\n")] def solve1(args): return sum(data) def solve2(args): totshift = 0 fvals = list() for c in data: fvals.append(totshift) totshift += c aoc.debug("total shift: " + str(totshift)) doubles = list() if totshift == 0: doubles.append([len(data), 0]) i = 0 while i < len(fvals): for j in range(len(fvals)): if i == j: continue dif = fvals[j] - fvals[i] if dif % totshift == 0: inds = list([i, j]) if j > i: inds = inds[::-1] if totshift > 0: #ends on c if fvals[inds[0]] > fvals[inds[1]]: inds = inds[::-1] else: if fvals[inds[0]] < fvals[inds[1]]: inds = inds[::-1] pos = (abs(dif) // totshift) * len(data) + inds[0] doubles.append([pos, fvals[inds[1]]]) i += 1 assert(len(doubles) != 0) return min(doubles, key = lambda x: x[0])[1] aoc.run(solve1, solve2, sols=[411, 56360])