Блок задач

5. Один класс

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

Задача «Twitter Trends»

Требуется разработать программу, которая бы вычисляла «трендовость» пользователей и хештегов в твитах.

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

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

  • Время поста ts (в формате POSIX timestamp).
  • Идентификатор пользователя user_id (целое положительное число).
  • Набор хештегов, связанных с постом, hashtags (в формате <hashtag_1>, <hashtag_2>, ..., <hashtag_N>).

Задача

Реализовать класс, который инкапсулирует записи о постах и имеет возможность выполнять над ними следующие операции:

  1. Добавить запись.
  2. Удалить запись.
  3. Удалить все записи.
  4. Найти топ-N (N задается при запросе) хештегов в заданном диапазоне времени (ts начала и конца интервала). Топ-N — N наиболее популярных хештэгов.
  5. Определить «трендовость» пользователя по заданному user_id и топ-N тегов. «Трендовость» — отношение количества употреблений хэштегов из топ-N к общему количеству употреблений хэштегов.

Отдельно должен быть реализован вывод результатов в консоль.

Примечания

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

Тестирование

В рамках задания необходимо разработать тесты для всех реализуемых операций. Подумайте, как аккуратно и максимально полно протестировать вычисление top-N.