권한이 있습니까?


10

도전

파일의 UNIX 권한 및 해당 소유권 (사용자 ID 및 그룹 ID)의 기호 표기법을 나타내는 문자열이 제공되면 지정된 사용자 A에게 파일 읽기 / 쓰기 / 실행 권한이 있는지 여부를 결정 하십시오.

관련 .

UNIX 시스템의 권한

UNIX에서 모든 파일에는 사용자 및 파일이 속한 그룹을 포함하여 세 가지 권한 클래스 ( user , groupother )와 소유권이 있습니다.

기호 표기법은 10 자로 구성됩니다. 첫 번째 캐릭터는이 도전에서 중요하지 않습니다. 나머지 9 개의 문자는 사용자, 그룹 및 기타 클래스의 권한을 나타내는 3 개의 3 자 세트로 구성됩니다. 각 세트의 문자는 읽기 / 쓰기 / 실행이 허용되는지 여부를 나타냅니다. 허용되는 경우 r, w또는 x입니다. 그렇지 않으면 -입니다.

참고 하여 setuid , setgid를스티키 비트가 각 세트의 제 특성을 변경할 수 s, S, t또는 T. 간단한 규칙은 다음과 같습니다. 문자가 소문자이면 권한이 설정됩니다. 그렇지 않으면 그렇지 않습니다.

(권한의 기호 표기법에 대한 자세한 내용은 여기 를 참조 하십시오 .)

모든 사용자는 자신의 사용자 ID를 가지며 모든 그룹은 그룹 ID를 갖습니다. 모든 ID는 음이 아닌 정수입니다. 사용자는 하나 이상의 그룹에 속합니다. 사용자 A가 파일에 액세스하려는 경우 시스템은 다음과 같이 사용 권한을 확인합니다.

  • 파일이 user에 속하는 경우 사용자 클래스 A의 권한을 확인하십시오 .

  • 파일이에 속해 A있지만 A파일이 속한 그룹에 속하는 경우 그룹 클래스 의 권한을 확인하십시오 .

  • 그렇지 않으면 다른 클래스 의 권한을 확인하십시오 .

그러나 한 가지 예외가 있습니다. 사용자 ID가 0 (수퍼 유저) 인 경우 어떤 작업을 수행 할 권한이 있습니다 !

명세서

  • 프로그램 / 기능은 합리적인 형식의 입력으로 이것을 가져와야합니다.
    • 기호 표기법의 권한 .
    • 파일이 속한 사용자 ID 및 그룹 ID.
    • 의 사용자 ID AA속한 그룹 ID 목록입니다 .
    • 액세스 유형. 읽기, 쓰기 및 실행에 세 가지 다른 한 자리 또는 한 문자 값을 사용할 수 있습니다.
  • 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

답변:


6

자바 스크립트 (ES6), 61 51 50 바이트

챌린지에 설명 된 순서대로 6 개의 고유 한 매개 변수를 입력으로 사용합니다. 마지막 매개 변수가 될 것으로 예상 1위한 읽기 , 2대한 쓰기3에 대한 실행 . 반환 0또는 1.

(p,u,g,a,G,P)=>!a|p[u-a?6-3*G.includes(g)+P:P]>'Z'

테스트 사례




1

Pyth, 22 21 바이트

|!Q}@@c3tw*nEQ-2}EEEG

온라인으로 사용해보십시오. 테스트 스위트.

6 줄로 입력을받습니다.

user id
permissions
file user id
file group
user groups
permission (0 = read, 1 = write, 2 = execute)

설명

|!Q}@@c3tw*nEQ-2}EEEG     Implicit: read user id to Q
 !Q                       True if user id is 0, false otherwise
|                         If true, just return it
         w                Read permission string
        -                 Omit first -
      c3                  Split in 3 parts
            E             Read file user id
           n Q            See if it doesn't equal Q
                          -> False (0) if user matches, true (1) otherwise
                 E        Read file group
                  E       Read user groups
                }         -> True (1) if group matches, false (0) otherwise
              -2          Subtract from 2
                          -> 1 if group matches, 2 otherwise
          *               Multiply the two numbers
                          -> 0 if user matches, 1 if group matches, 2 otherwise
     @                    Take correct part of permission string
    @                     Take correct character of that part
   }                G     See if it is in lowercase alphabet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.