Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

flipp5b/waves-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание задачи

Напишите программу для простейшего матчинга заявок на упрощенной бирже. На бирже торгуется четыре ценных бумаги (A, B, C и D). Базовая валюта биржи - доллар ($).

Входные данные для программы содержатся в двух файлах. Первый файл (clients.txt) содержит список клиентов биржи с указанием их исходных балансов по торгующимся ценным бумагам и доллару. Второй файл (orders.txt) — это список заявок от клиентов в хронологическом порядке. Результатом работы программы является файл result.txt аналогичный по структуре файлу clients.txt и содержащий состояние балансов всех клиетов после обработки всех заявок.

Реализация должна быть на Scala.

Описание форматов файлов

Каждая строка тесктового файла содержит одну запись. Поля записи отделяются друг от друга с помощью символа табуляции (\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   10  12
C2  s   A   8   10

Требования к матчингу

  • Состояние счетов клиентов можно обрабатывать без транзакций.
  • Балансы клиентов не могут уходить в минус. Заявки, не обеспеченные нужным количеством валюты (при покупке) или ценных бумаг (при продаже), должны отвергаться. Например:
    C1  1000    10  5   15  0 
    C2  2000    3   35  40  10
    
    C1   b   A   10  150 (1)
    C2   s   B   40  10  (2)
    
    Заявка (1) должна быть отвергнута, потому что у С1 недостаточно валюты для того, чтобы купить 10 бумаг A по цене 150$. Заявка (2) должна быть отвергнута, потому что у С2 есть только 35 бумаг В.
  • Реализовать частичное сопоставление заявок:
    C1   b   A   10  12 (1)
    C2   s   A   8   10 (2)
    
    Заявка 1 и 2 должна частично сопоставиться т.е. заявка 2 полностью погасится, заявка 1 погасится частично и изменит стейт на C1 b A 2 12.
  • Заявки на исполнение по одной цене должны исполняться в порядке поступления:
    C1   b   A   10  10 (1)
    C2   b   A   10  10 (2)
    C3   s   A   10  15 (3)
    
    В такой ситуации сначала сопоставятся заявки (3) и (1), (1) полностью погасится, а затем остаток от (3) сопоставится с заявкой (2).

Ожидаемые результаты

  • Основной результат - программа, которая обработав данные клиентов и список заявок (clients.txt и orders.txt) генерирует файл конечного состояния счетов клиентов (results.txt).
    • программа должна запускаться через sbt run (или любым другим способом, описанном в README)
  • Исходный код проекта на Github
  • Набор unit-тестов (тесты, естественно, должны проходить)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages