Контест Middle Кеш и очереди обновлено

Дедупликация событий из NDJSON-потока

Условие

Консьюмер очереди сбрасывает события в NDJSON: по одному JSON-объекту на строку. Доставка «хотя бы один раз», поэтому одно событие может прийти несколько раз, а ещё в поток попадает мусор.

Строка корректна, если это валидный JSON, верхний уровень это объект (не массив, не null), и у него есть строковые поля id и type. Пустые строки (и из одних пробелов) пропускай без учёта. Некорректные строки считай. Из корректных учитывай только первое событие с данным id, повторы пропускай.

Выведи по строке <type> <число уникальных событий> для каждого типа в порядке возрастания кодов символов, последней строкой invalid <число некорректных строк>.

До 500 строк.

Пример

{"id":"e1","type":"order.created"}
{"id":"e2","type":"order.paid"}
{"id":"e1","type":"order.created"}
{oops
{"id":"e3","type":"order.paid","amount":100}
order.created 1
order.paid 2
invalid 1

Как подойти

Подсказки: 3
  1. JSON.parse в try/catch на каждую строку.
  2. Проверь тип верхнего уровня: typeof null === "object" и массив тоже объект.
  3. Set обработанных id.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.