Асинхронность. ПродолжениеИспользование промисовmedium

Асинхронные покупатели

В прототипе рекламной сети продажа рекламных мест устроена следующим образом: покупатели заранее называют свою цену, а на каждое рекламное место отвечают, готовы они его купить или нет.

Необходимо реализовать функцию, которая перед продажей рекламного места будет ожидать согласия или отказа от покупателей с высокой ценой ставки, а затем продаст рекламное место покупателю с самой высокой ценой среди тех, кто согласился на покупку.

Вернуть ответ из функции нужно настолько быстро, насколько это возможно. Нужно вернуть индекс покупателя.

Пример #1

  • Покупатели предлагают цену 1, 5, 10
  • Покупатель с предложением 10 ответил отказом
  • Покупатель с предложением 1 ответил согласием // Всё ещё ждём, поскольку может ответить покупатель с ценой 5
  • Покупатель с предложением 5 ответил согласием // Выбираем покупателя с предложением 5

Пример #2

  • Покупатели предлагают цену 1, 5, 10
  • Покупатель с предложением 10 ответил отказом
  • Покупатель с предложением 5 ответил согласием // Не ждём ответа от покупателя с предложением 1 - его точно не выберем

Пример #3

  • Покупатели предлагают цену 1, 2
  • Покупатель с предложением 1 ответил отказом
  • Покупатель с предложением 2 ответил отказом // Не выбираем ни одного покупателя
type Buyer = { price: number, accepts: () => Promise<boolean>, } async function bestBuyer(buyers: Buyer[]) { return -1; }