Add custom range sum function to speed things up a bit

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2021-12-07 11:39:00 -08:00
parent 2efb4766f2
commit f4351ce9a7

View File

@@ -3,6 +3,10 @@ import sys
from typing import Sequence
def rangesum(rn: range):
return (((rn.stop + 1) * rn.stop) // 2) - (((rn.start + 1) * rn.start) // 2)
def part1(positions: Sequence[int]):
lo = min(positions)
hi = max(positions)
@@ -15,10 +19,10 @@ def part1(positions: Sequence[int]):
def part2(positions: Sequence[int]):
lo = min(positions)
hi = max(positions)
diffs = []
ranges = []
for i in range(lo, hi + 1):
diffs += [sum(sum(range(abs(pos - i) + 1)) for pos in positions)]
ranges += [[range(abs(pos - i)) for pos in positions]]
diffs = [sum(rangesum(r) for r in rs) for rs in ranges]
print(min(diffs))