Змагання
Враховуючи рядок, що вказує на символічне позначення дозволу UNIX на файл та його право власності (ідентифікатор користувача та ідентифікатор групи), вирішіть, чи має даний користувач Aдозвіл на читання / запис / виконання його.
Дозволи в системі UNIX
У UNIX кожен файл має три класи дозволів ( користувач , група та інші ) та права власності, включаючи, до якого користувача та до якої групи він належить.
Символічна нотація складається з десяти символів. Перший персонаж не важливий у цьому виклику. Решта дев'ять символів у трьох наборах з трьох символів, що представляють дозволи користувачів, груп та інших класів. Символи в кожному наборі вказують, чи дозволено читання / запис / виконання. Якщо це дозволено, це буде r, wабо x. Інакше так і буде -.
Зверніть увагу , що УИП , setgid і липкі біт може змінити третій символ кожного набору на s, S, tабо T. Ось просте правило: якщо символ є малою літерою, то встановлюється дозвіл; інакше це не так.
(Детальну інформацію про символьні позначення дозволів див. Тут .)
Кожен користувач має свій ідентифікатор користувача, і кожна група має свій ідентифікатор групи. Усі ідентифікатори будуть невід’ємними цілими числами. Користувач буде належати щонайменше до однієї групи. Якщо користувач Aхоче отримати доступ до файлу, система перевірятиме їх дозволи наступним чином:
Якщо файл належить користувачеві
A, перевірте дозволи користувача класу.Якщо файл не належить
A, алеAналежить до групи, до якої належить файл, перевірте дозволи групового класу.В іншому випадку перевірте дозволи інших класів.
Однак є один виняток: якщо ідентифікатор користувача дорівнює 0 (суперпользователь), вони мають дозвіл робити що- небудь !
Технічні умови
- Ваша програма / функція повинна сприймати їх як вхід у будь-якому розумному форматі:
- Дозволи в символічній нотації .
- Ідентифікатор користувача та ідентифікатор групи, до якої належить файл.
- Ідентифікатор користувача
Aта список ідентифікаторів групи, до якихAналежить. - Тип доступу. Ви можете використовувати будь-які три різні одноцифрові або однозначні значення для читання, запису та виконання.
- Повернути / вивести триєдне значення, якщо
Aмає дозвіл на доступ до файлу, або хибне значення, якщо ні. - Можна припустити, що перший символ позначення завжди буде
-(звичайний файл). - Це код-гольф , тому виграє найкоротший у байтах!
Випробування
Формат тут такий [permissions, user ID of file, group ID of file, user ID of A, group IDs of A, type(r/w/x)].
[-rwx------, 13, 15, 13, [15, 24], r]: True # user
[-rwxr-xr-x, 13, 24, 24, [15, 24], w]: False # group
[-rwxr-Sr-T, 13, 15, 24, [15, 35], x]: False # group
[-rwsr-xr-t, 13, 15, 24, [24, 35], x]: True # others
[----------, 13, 15, 0, [0, 1, 2], r]: True # superuser
[----------, 13, 15, 1, [0, 1, 2], r]: False # others
[----rwxrwx, 13, 15, 13, [15, 24], r]: False # user