Шина событий с именованными обработчиками

Задача по программированию с проверкой онлайн

Сложность
Средняя
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Функции и замыкания
Классы и ООП

Шина событий хранит общий счётчик (в начале 0) и для каждого события — список зарегистрированных обработчиков в порядке регистрации. Обработчики названы и меняют счётчик: inc — прибавить 1, dec — вычесть 1, double — умножить на 2, negate — сменить знак, reset — обнулить.

Дан список команд commands; верните по числу на каждую команду. Слова в команде разделены одним пробелом:

  • on событие обработчик — добавить обработчик в конец списка события;
  • once событие обработчик — то же, но обработчик сработает только при ближайшем emit этого события и сразу после срабатывания удаляется;
  • off событие обработчик — убрать самую раннюю регистрацию этого обработчика у этого события (обычную или once); если такой нет, ничего не делать;
  • emit событие — выполнить по порядку все обработчики события (один и тот же обработчик, зарегистрированный дважды, срабатывает дважды); события без обработчиков не меняют счётчик.

Результат для on, once и off — число обработчиков этого события после команды; для emit — значение счётчика после всех обработчиков.

Пример: ["on tick inc", "on tick double", "emit tick", "off tick inc", "emit tick"] → [1, 2, 2, 1, 4].


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки