2021-12-07 11:22:58 -08:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
import sys
|
|
|
|
|
from typing import Sequence
|
|
|
|
|
|
|
|
|
|
|
2021-12-07 11:39:00 -08:00
|
|
|
def rangesum(rn: range):
|
2021-12-07 11:47:27 -08:00
|
|
|
assert rn.step == 1, "this function doesn't work when range step != 1"
|
2021-12-07 11:39:00 -08:00
|
|
|
return (((rn.stop + 1) * rn.stop) // 2) - (((rn.start + 1) * rn.start) // 2)
|
|
|
|
|
|
|
|
|
|
|
2021-12-07 11:22:58 -08:00
|
|
|
def part1(positions: Sequence[int]):
|
|
|
|
|
lo = min(positions)
|
|
|
|
|
hi = max(positions)
|
|
|
|
|
diffs = []
|
|
|
|
|
for i in range(lo, hi + 1):
|
|
|
|
|
diffs += [sum(abs(pos - i) for pos in positions)]
|
|
|
|
|
print(min(diffs))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def part2(positions: Sequence[int]):
|
|
|
|
|
lo = min(positions)
|
|
|
|
|
hi = max(positions)
|
2021-12-07 11:39:00 -08:00
|
|
|
ranges = []
|
2021-12-07 11:22:58 -08:00
|
|
|
for i in range(lo, hi + 1):
|
2021-12-07 11:39:00 -08:00
|
|
|
ranges += [[range(abs(pos - i)) for pos in positions]]
|
|
|
|
|
diffs = [sum(rangesum(r) for r in rs) for rs in ranges]
|
2021-12-07 11:22:58 -08:00
|
|
|
print(min(diffs))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
positions = list(map(int, sys.stdin.readline().strip().split(",")))
|
|
|
|
|
|
|
|
|
|
print("Part 1")
|
|
|
|
|
part1(positions)
|
|
|
|
|
print("Part 2")
|
|
|
|
|
part2(positions)
|