Блок задач

5. Один класс

Темы
Сложность 5

Задача «Obeder»

При совместном обеде в кафе или ресторане часто возникает проблема расчётов: поиск сдачи и т.д. Если одна и та же компания людей обедает регулярно, проще каждый раз платить за всех кому-то одному, по очереди. Но в этом случае необходимо вести учёт, чтобы периодически сводить все долги друг другу к нулю.

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

Входные данные

Файл журнала обедов, каждая строчка которого содержит следующую информацию:

  • Время обеда tsPOSIX timestamp.
  • Идентификатор пользователя user_id – строковый никнейм (например, superIgor2000)
  • Сумма sum – число в копейках. Может быть как положительной (заплатил за всех), так и отрицательной (долг за еду).

Таким образом, формат одной строчки:

ts user_id sum

Задача

Реализовать модуль, который инкапсулирует записи обо всех тратах и долгах пользователей и может выдать рекомендации в формате «кто, кому и сколько должен отдать» за определенный период времени (при заданных timestamp начала и конца периода).

Примечания

  1. К реализуемому модулю могут производиться множественные запросы. Каждый раз читать файл не следует.
  2. В реализуемом классе лучше хранить простые структуры с нужной информацией. Необходимо будет реализовать парсер, который преобразует текстовую строку в такую структуру.
  3. При выборе контейнера для хранения записей стоит задуматься о производительности приложения.
  4. Интересные усовершенствования функционала приветствуются и будут оцениваться дополнительно.

Пример вывода в консоль

user_1 -> user_2  - 301 р 50 коп
user_1 -> user_5  - 101 р 34 коп
user_4 -> user_3  - 1 р 01 коп