각 정수에 주어진 숙제 문제 (!)가 무한하다고 상상해보십시오.
수학 문제 표기법은 문제 지정자를 사용하여 문제의 하위 집합을 설명하는 표기법입니다.
MPN 표현식은 여러 가지로 구성 될 수 있습니다.
- 단일 값. 숫자가 포함 된 집합을 나타냅니다
99 -> {99}
. - 간단한 범위. 범위의 처음부터 끝까지 모든 숫자가 포함 된 집합을 나타냅니다
10~13 -> {10, 11, 12, 13}
. 왼쪽 또는 오른쪽이없는 경우 각각 -Infinity 또는 Infinity 인 것으로 가정합니다.~10 -> {x|x ≤ 10}
;~ -> ℤ
. - MPN 식, "skip"및 다른 MPN식이 뒤 따릅니다. 이것은 두 세트의 차이점을 나타냅니다
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - 쉼표로 구분 된 두 개의 MPN 표현식. 이것은 두 세트의 합집합을 나타냅니다
1,8~9,15~17 -> {1,8,9,15,16,17}
.
"건너 뛰기"연산자는 쉼표 연산자보다 꽉 묶이므로 16,110~112 skip 16 -> {16,110,111,112}
16은 세트에 포함 {110,111,112}
되지 않으므로 16을 제외하면 문제가되지 않습니다.
명확성을 위해 괄호 안에 표현식을 넣을 수도 있습니다.
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
이것은 문법입니다 :
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
당신의 임무는 두 가지 입력이 필요한 프로그램을 작성하는 것입니다.
- MPN 표현
- 숫자
MPN 표현식에 의해 설명 된 세트에 문제가 있는지 여부에 따라 일부 참 또는 거짓 값을 출력합니다.
명세서
- 첫 번째 입력이 올바른 형식의 MPN 표현식이라고 가정 할 수 있습니다 (즉, 위의 문법과 일치 함).
- MPN 표현식의 숫자는 항상 정수입니다. 음수이거나 0 일 수 있지만 소수 부분은 절대 없습니다.
- 이것은 code-golf 이므로 가장 짧은 유효한 제출 (바이트 단위로 측정)이 이깁니다.
- 원하는 경우
~
및에 다른 문자를 사용할 수 있습니다,
.
테스트 사례
10~20 14 -> True
10~20 20 -> True
10~20 skip 14~18 17 -> False
~ skip 6 8 -> True
16,17 skip 16 16 -> True
(16,17) skip 16 16 -> False
~10,5~ 8 -> True
~10,5~ 4 -> True
6 skip 6,~ 6 -> True
~
및 ,
에는 해당되지 않습니다 skip
.
6 skip 6,~
되는 테스트 사례 를 추가했습니다 . 다른 두 가지 답변은 지금까지 그것을 만족시키지 못합니다 (다시 말하면 올바르게 해석한다고 가정). 내가 잘못 이해했다면 그것을 수정하고 명확히하십시오. 그러나 내 이해에서, 그것은 무엇이든 일치해야합니다 (그것은 모든 것과 일치하는 세트와 아무것도 일치하지 않는 세트의 조합입니다). 이것들은 솔루션을 테스트 할 때 많은 도움이 될 수 있다고 생각한 사례입니다.