Given a stream of obstacle readings, where each reading is a pair (obstacle_id, distance), implement a function that returns the k closest obstacles seen so far. If the same obstacle_id appears multiple times, treat each reading independently. Return the result ordered from closest to farthest.
def top_k_closest_obstacles(readings, k):