1def furthest_building(heights, bricks, ladders):
2 heap = [] # min-heap of climbs where we used bricks
3 bricks_used = 0
4
5 for i in range(len(heights) - 1):
6 climb = heights[i + 1] - heights[i]
7
8 if climb <= 0:
9 continue # no climb needed
10
11 # Use bricks for this climb
12 bricks_used += climb
13 heapq.heappush(heap, climb)
14
15 if bricks_used > bricks:
16 # Exceeded bricks, need a ladder
17 if ladders == 0:
18 return i # can't proceed
19
20 # Replace smallest climb with a ladder
21 smallest = heapq.heappop(heap)
22 bricks_used -= smallest
23 ladders -= 1
24
25 return len(heights) - 1