Уявіть, у мене є нескінченна кількість домашніх завдань (!), Кожна з яких отримала ціле число.
Позначення проблеми математики - це позначення для опису підмножини проблеми за допомогою специфікаторів проблеми.
Вираз MPN може складатися з кількох речей:
- Єдине значення. Це являє собою набір , що містить номер:
99 -> {99}
. - Простий діапазон. Це являє собою набір , що містить всі цифри від початку до кінця діапазону:
10~13 -> {10, 11, 12, 13}
. Якщо ліва або права сторона відсутня, то вони вважаються відповідно -бесконечністю або нескінченністю відповідно~10 -> {x|x ≤ 10}
;~ -> ℤ
. - Вираз MPN, за яким слідує «пропустити» та інший вираз 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
- Номер
і виводить деяке значення truthy або falsey залежно від того, чи є ця проблема у наборі, описаному виразом MPN.
Технічні умови
- Можна припустити, що перший вхід є добре сформованим виразом MPN (тобто, що він відповідає вищевказаній граматиці)
- Числа у виразі MPN завжди є цілими числами. Вони можуть бути негативними або нульовими, але ніколи не матимуть дробової частини.
- Це код-гольф , тому виграє найкоротше дійсне подання (вимірюється в байтах).
- Ви можете використовувати різні символи для
~
та,
, якщо хочете.
Випробування
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,~
який, я вважаю, я правильно інтерпретував. Інші 2 відповіді поки що не задовольняють її (знову ж таки, припускаючи, що я правильно інтерпретую). Якщо я неправильно зрозумів, будь ласка, виправте його та уточніть, але, з мого розуміння, воно повинно відповідати будь-якому (це об'єднання множини, яке нічого не відповідає, з набором, який відповідає всім). Це такі випадки, про які я говорив раніше, і, на мою думку, вони могли б допомогти багато під час тестування наших рішень.