Лучший покупатель (Best Buyer)
3
Асинхронность
Условие:
Есть список покупателей, каждый из которых предлагает свою цену за рекламное место и асинхронно отвечает — согласен он купить или нет. Опрашивать покупателей нужно параллельно.
Напишите функцию, которая принимает массив покупателей и возвращает индекс покупателя с наибольшей ценой среди тех, кто ответил согласием. При этом функция должна завершиться как можно быстрее — то есть не ждать тех, кто заведомо не может улучшить результат.
Покупатель с более высокой ценой имеет приоритет. Если он ещё не ответил — нужно дождаться его ответа, прежде чем вернуть результат с меньшей ценой. Если все покупатели с более высокой ценой ответили отказом — возвращаем лучшего из оставшихся согласившихся.
Входные данные:
buyers — массив объектов:
{ price: number, response: () => Promise<boolean> }Покупатели не отсортированы. response() возвращает промис, который резолвится в true (согласен) или false (отказ).
Выходные данные:
Promise<number> — индекс лучшего покупателя, или -1 если никто не согласился.
Ограничения:
1 <= buyers.length <= 100Каждый покупатель отвечает ровно один раз
Цены уникальны
Пример:
Вход:
buyers = [
{ price: 1, response: () => asyncResponse(true, 500) },
{ price: 10, response: () => asyncResponse(false, 200) },
{ price: 5, response: () => asyncResponse(true, 100) }
]Выход: 2 (покупатель с ценой 5, индекс 2 — покупатель с ценой 10 ответил отказом, покупатель с ценой 1 ещё не ответил, но его цена ниже)
Время выполнения: ~200мс (не 300мс и не 600мс)