Цепочка промежуточных обработчиков

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

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

Запрос — целое число. Он проходит через цепочку промежуточных обработчиков (middleware), как луковица: каждый слой что-то делает «на входе», передаёт запрос следующему слою и затем что-то делает с ответом «на выходе». В самом центре стоит обработчик, который возвращает полученное число без изменений.

Слои записаны строками имя:k (k — целое, может быть отрицательным), первая строка — самый внешний слой:

  • add:k — передать дальше x + k; ответ вернуть как есть;
  • mul:k — передать дальше x * k; ответ вернуть как есть;
  • wrap:k — передать x, к ответу прибавить k;
  • scale:k — передать x, ответ умножить на k;
  • cap:k — передать x, ответ ограничить сверху числом k (взять меньшее из ответа и k);
  • limit:k — если текущий x больше k, сразу вернуть -1, не вызывая внутренние слои; иначе передать x дальше, ответ вернуть как есть. Внешние слои при этом всё равно обработают это -1 на выходе.

Дан список слоёв middlewares и список запросов requests. Верните ответ на каждый запрос; запросы не влияют друг на друга. Пустая цепочка возвращает запрос как есть. Значения помещаются в 32 бита.

Пример: ["add:1", "limit:10", "wrap:5"], [3, 20] → [9, -1]: для 3 вход даёт 4, limit пропускает, центр возвращает 4, wrap прибавляет 5; для 20 вход даёт 21, limit обрывает цепочку.


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

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

Ещё задачи

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