day07: binary searching makes this go *much* faster
This commit is contained in:
parent
bd8e57bf81
commit
86013c25c0
26
day07.py
26
day07.py
@ -5,17 +5,27 @@ from typing import Any, List
|
|||||||
|
|
||||||
|
|
||||||
def getMinFuelUse(crabs: List[int], increased: bool = False) -> int:
|
def getMinFuelUse(crabs: List[int], increased: bool = False) -> int:
|
||||||
minFuel = inf
|
min_num = min(crabs)
|
||||||
for pos in range(min(crabs), max(crabs) + 1):
|
max_num = max(crabs)
|
||||||
|
avg = (min_num + max_num) // 2
|
||||||
|
while 1:
|
||||||
if increased:
|
if increased:
|
||||||
fuel = sum(triangular(abs(pos - c)) for c in crabs)
|
avg_fuel = sum(triangular(abs(avg - c)) for c in crabs)
|
||||||
|
avg_fuel_p = sum(triangular(abs(avg + 1 - c)) for c in crabs)
|
||||||
|
avg_fuel_m = sum(triangular(abs(avg - 1 - c)) for c in crabs)
|
||||||
else:
|
else:
|
||||||
fuel = sum(abs(pos - c) for c in crabs)
|
avg_fuel = sum(abs(avg - c) for c in crabs)
|
||||||
|
avg_fuel_p = sum(abs(avg + 1 - c) for c in crabs)
|
||||||
|
avg_fuel_m = sum(abs(avg - 1 - c) for c in crabs)
|
||||||
|
|
||||||
if fuel < minFuel:
|
if avg_fuel_m < avg_fuel:
|
||||||
minFuel = fuel
|
max_num = avg
|
||||||
|
avg = (min_num + avg) // 2
|
||||||
return minFuel
|
elif avg_fuel_p < avg_fuel:
|
||||||
|
min_num = avg
|
||||||
|
avg = (max_num + avg) // 2
|
||||||
|
else:
|
||||||
|
return avg_fuel
|
||||||
|
|
||||||
|
|
||||||
class Day(AOCDay):
|
class Day(AOCDay):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user