Контест Middle ООП, трейты и интерфейсы обновлено

Диспетчер событий с приоритетами

Условие

Реализуйте диспетчер событий, как в Symfony EventDispatcher. Команды:

  • on event listener priority: подписать слушателя (priority целое, больше значит раньше; при равенстве раньше тот, кто подписался раньше);
  • emit event: вызвать слушателей события по порядку. Слушатель, чьё имя начинается с stop, останавливает распространение события (сам он вызывается).

Вывод: на каждый emit строку event: слушатели через пробел в порядке вызова, или event: -.

Ввод: n (n ≤ 2·10⁴), затем команды.

Пример

5
on user.created mail 0
on user.created audit 10
on user.created stopX 5
emit user.created
emit other
user.created: audit stopX
other: -

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

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