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
|
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]):
|
def part1(positions: Sequence[int]):
|
||||||
lo = min(positions)
|
lo = min(positions)
|
||||||
hi = max(positions)
|
hi = max(positions)
|
||||||
@@ -15,10 +19,10 @@ def part1(positions: Sequence[int]):
|
|||||||
def part2(positions: Sequence[int]):
|
def part2(positions: Sequence[int]):
|
||||||
lo = min(positions)
|
lo = min(positions)
|
||||||
hi = max(positions)
|
hi = max(positions)
|
||||||
diffs = []
|
ranges = []
|
||||||
for i in range(lo, hi + 1):
|
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))
|
print(min(diffs))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user