Контест Junior Типы и нулевые значения обновлено

Права доступа битовой маской на Go

Условие

Права пользователей хранятся битовой маской: read = 1, write = 2, exec = 4, admin = 8. Изначально у всех маска 0. Обработайте команды:

  • grant <user> <perm>: выдать право;
  • revoke <user> <perm>: отозвать право (если его нет, ничего не меняется);
  • check <user> <perm>: вывести YES, если право есть, иначе NO. Пользователь с правом admin проходит любую проверку.

После всех команд выведите строку ---, а затем для каждого упомянутого в командах пользователя строку <user> <маска> в порядке возрастания имён.

Ввод: n (1 ≤ n ≤ 2000), затем n команд. Имена из латиницы и цифр.

Пример

6
grant anna read
grant anna write
check anna write
check anna exec
revoke anna read
check boris read
YES
NO
NO
---
anna 2
boris 0

Как подойти

Тип Perm с константами через iota, map[string]Perm, операции |=, &^= и &, в конце сортировка ключей.

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

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

Термины по теме