Add custom range sum function to speed things up a bit
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -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))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user