38 lines
851 B
Python
38 lines
851 B
Python
from collections import defaultdict




with open("input.txt") as f:


all_crabs = [int(i) for i in f.read().strip().split(",")]






# group all crabs by starting position


crabs = defaultdict(int)


for crab in all_crabs:


crabs[crab] += 1






crabs = dict(crabs)


tries = []




# precalcuate crab movement costs


crab_cost = []


cost = 0


for i in range(0, max(all_crabs) + 1):


cost = cost + i


crab_cost.append(cost)




# apparently the equation `v = k * (k+1) / 2` is equivalent to the list


# generated above, however, this approach using a precomputed list is 1015%


# faster in my testing.




for i in range(min(all_crabs), max(all_crabs) + 1):


moves = 0


for crab, count in crabs.items():


more = crab_cost[abs(i  crab)] * count


moves += more




tries.append((i, moves, ))






tries.sort(key=lambda x: x[1])


print(tries[0][1])
