Биржевой стакан с исполнением заявок

Задача по программированию с проверкой онлайн

Сложность
Сложная
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Классы и ООП
Поиск и сортировка
Исключения

Реализуйте биржевой стакан для одной акции, сначала пустой. Даны список операций operations и список их аргументов values (values[i] относится к operations[i]). Верните список результатов, по одному на операцию.

Операции:

  • "buy" с аргументами id, price, qty: заявка на покупку qty акций по цене не выше price. Она сразу исполняется против заявок на продажу с ценой не выше price: сначала по самой низкой цене, при равной цене — с более ранней заявкой. Каждая сделка проходит по цене заявки из стакана на объём, равный меньшему из двух остатков. Неисполненный остаток встаёт в стакан. Результат: сколько акций куплено этой операцией.
  • "sell" с теми же аргументами: симметрично, против заявок на покупку с ценой не ниже price, сначала по самой высокой цене, при равной цене — с более ранней. Результат: сколько акций продано.
  • "cancel" с аргументом id: снять остаток заявки из стакана. Результат: снятый объём.
  • "best_bid": наибольшая цена покупки в стакане, 0, если таких заявок нет.
  • "best_ask": наименьшая цена продажи в стакане, 0, если нет.
  • "depth" с аргументом price: общий объём заявок в стакане по этой цене (0, если нет).

Из заявок с одинаковой ценой раньше идёт та, чей остаток раньше встал в стакан. Если id уже встречался в этом вызове, или price ≤ 0, или qty ≤ 0, а также если cancel называет заявку, которой нет в стакане (неизвестную, полностью исполненную или уже снятую), сообщите об ошибке: бросьте исключение, в Go верните error. Ошибка относится ко всему вызову: первая же неверная операция прерывает его. До 1000 операций.

Пример: ["sell", "sell", "buy", "best_ask"], [[1, 10, 5], [2, 10, 3], [3, 10, 6], []] → [0, 0, 6, 10].


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки