Биржевой стакан с исполнением заявок
Задача по программированию с проверкой онлайн
- Сложность
- Сложная
- Языки
- 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