34 lines
1.0 KiB
Python
34 lines
1.0 KiB
Python
|
from collections import OrderedDict
|
||
|
|
||
|
def part1(crabs):
|
||
|
moves = OrderedDict()
|
||
|
for pos in range(min(crabs), max(crabs) + 1):
|
||
|
# calculate total fuel required to move to pos:
|
||
|
for crab in crabs:
|
||
|
fuel_cost = abs(pos - crab)
|
||
|
moves[pos] = moves.get(pos, 0) + fuel_cost
|
||
|
|
||
|
min_move = min(moves, key=moves.get)
|
||
|
print(f"Part 1, min move {min_move}, cost {moves[min_move]}")
|
||
|
|
||
|
def part2(crabs):
|
||
|
moves = OrderedDict()
|
||
|
for pos in range(min(crabs), max(crabs) + 1):
|
||
|
# calculate total fuel required to move to pos:
|
||
|
for crab in crabs:
|
||
|
dx = abs(pos - crab)
|
||
|
# S = (n+1)(u0 + un)/2
|
||
|
fuel_cost = dx * (dx+1)//2
|
||
|
moves[pos] = moves.get(pos, 0) + fuel_cost
|
||
|
|
||
|
min_move = min(moves, key=moves.get)
|
||
|
print(f"Part 1, min move {min_move}, cost {moves[min_move]}")
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
with open("input.txt") as infile:
|
||
|
crabs = [int(x) for x in infile.readline().split(",")]
|
||
|
part1(crabs)
|
||
|
part2(crabs)
|
||
|
|