Задача «Права доступа» Решение

Условие

В файловую систему одного суперкомпьютера проник вирус, который сломал контроль за правами доступа к файлам. Для каждого файла известно, с какими действиями можно к нему обращаться:

  • запись W,
  • чтение R,
  • запуск X.

В первой строке содержится число N — количество файлов содержащихся в данной файловой системе. В следующих N строчках содержатся имена файлов и допустимых с ними операций, разделенные пробелами. Далее указано число M — количество запросов к файлам. В последних Mстроках указан запрос вида Операция Файл. К одному и тому же файлу может быть применено любое количество запросов.

Вам требуется восстановить контроль над правами доступа к файлам (ваша программа для каждого запроса должна будет возвращать OK если над файлом выполняется допустимая операция, или же Access denied, если операция недопустима.

Решение

ACTION_PERMISSION = {
    'read': 'R',
    'write': 'W',
    'execute': 'X',
}

file_permissions = {}
for i in range(int(input())):
    file, *permissions = input().split()
    file_permissions[file] = set(permissions)

for i in range(int(input())):
    action, file = input().split()
    if ACTION_PERMISSION[action] in file_permissions[file]:
        print('OK')
    else:
        print('Access denied')

Комментарии

  1. Тоже просто так решить не смог, банально из-за незнания того, что так можно.
    *A - означает, что A принимает ноль или более аргументов.
    Допустим A, *B = (123, 12345, 12345, 12345)
    тогда A = 123, B = [12345, 12345, 12345] где A приняла первое значение, B - все остальные.
    Минус питонтьютора в том, что там задачи требуют более глубокого изучения возможностей языка, чем просто объясняется в предварительном брифинге. Зато вот так вот ты и узнал, что означает *A

Добавить комментарий

Ваш e-mail не будет опубликован.