From 5745009ec68ca166def28751e1e35bced3adc82f Mon Sep 17 00:00:00 2001 From: Boris Vanin Date: Mon, 20 Jun 2022 18:23:03 +0300 Subject: [PATCH] Create task.MD --- exchange/task.MD | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 exchange/task.MD diff --git a/exchange/task.MD b/exchange/task.MD new file mode 100644 index 0000000..7a1dac0 --- /dev/null +++ b/exchange/task.MD @@ -0,0 +1,59 @@ +# Описание задачи + +Напишите программу для простейшего матчинга заявок на упрощенной бирже. На бирже торгуется четыре ценных бумаги ("A", "B", "C" и "D"). Базовая валюта биржи - доллар ("$"). + +Входные данные для программы содержатся в двух файлах. Первый файл `clients.txt` содержит список клиентов биржи с указанием их исходных балансов по торгующимся ценным бумагам и доллару. +Второй файл, `orders.txt`, это список заявок от клиентов в хронологическом порядке. +Результатом работы программы является файл `result.txt` аналогичный по структуре файлу `clients.txt` и содержащий состояние балансов всех клиетов после обработки всех заявок. + +## Описание форматов файлов + +Структура файлов предельно проста. Каждая строка тесктового файла содержит одну запись. Поля записи отделяются друг от друга с помощью символа табуляции (\t). +Имена клиентов, названия ценных бумаг - строки, состоящие из буквенных и цифровых символов ASCII без разделителей. Числовые значения представлены целыми числами. + +### Файл `clients.txt` + +Файл списка клиетов имеет следующие поля: + * Имя клиента + * Баланс клиента по долларам + * Баланс клиента по ценной бумаге "A" в штуках + * Баланс по ценной бумаге "B" + * Баланс по ценной бумаге "C" + * Баланс по ценной бумаге "D" + +Пример нескольких строк файла: + +``` +C1 1000 10 5 15 0 +C2 2000 3 35 40 10 +``` + +### Файл `orders.txt` + +Файл списка заявок имеет формат: + + * Имя клиента выставившего заявку + * Символ операции: "s" - продажа или "b" - покупка. + * Наименование ценной бумаги + * Цена заявки (целое число за одну штуку ценной бумаги) + * Количество продаваемых или покупаемых ценных бумаг + +Пример нескольких строк файла: + +``` +C1 b A 7 12 +C2 s A 8 10 +``` + +## Замечания + + 1. Частичное сопоставление заявок реализовывать не обязательно. Для упрощения можно сопоставлять заявки только по полному совпадению цены и количества. + 1. Не нужно обрабатывать ситуации продажи и покупки самому себе. + 1. Состояние счетов клиентов можно обрабатывать без транзакций. + 1. Для простоты можно не проверять отрицательные балансы клиентов по ценным бумагам и долларам. + +## Ожидаемые результаты + + * Основной результат - файл конечного состояния счетов клиентов биржи после обработки предоставленных данных + * Исходный код проекта на Github + * Набор unit-тестов