blob: d23d8d50d829a4feb35f7ece48e71b075ebc2904 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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])
|