Контест Middle ASP.NET Core обновлено

Трассировка конвейера middleware

Условие

Смоделируйте конвейер middleware. Каждый элемент одного из трёх видов:

  • name pass: пишет name>, вызывает следующий, после возврата пишет <name;
  • name block PREFIX CODE: если путь начинается с PREFIX, пишет name! и завершает запрос с кодом CODE, не вызывая следующий; иначе ведёт себя как pass;
  • name endpoint PATH: если путь в точности равен PATH, пишет name# и отвечает 200; иначе молча передаёт дальше (как маршрутизация, не нашедшая совпадения).

Если запрос дошёл до конца конвейера, ответ 404.

Ввод: n (n ≤ 30) элементов, затем q (q ≤ 3000) путей.

Вывод: для каждого пути журнал через пробел, затем = CODE.

Пример

4
log pass
auth block /admin 401
health endpoint /health
api endpoint /api
3
/health
/admin/users
/missing
log> auth> health# <auth <log = 200
log> auth! <log = 401
log> auth> <auth <log = 404

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

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