Wyobraź sobie, że mam nieskończoną liczbę problemów domowych (!), Z których każdy ma liczbę całkowitą.
Matematyka Notacja problemu to notacja opisująca podzbiory problemu za pomocą specyfikatorów problemu.
Wyrażenie MPN może składać się z kilku rzeczy:
- Jedna wartość. Stanowi zbiór zawierający numer:
99 -> {99}
. - Prosty zakres. Stanowi zbiór zawierający wszystkie numery od początku do końca zakresu:
10~13 -> {10, 11, 12, 13}
. Jeżeli lewa lub prawa strona brakuje, to są one traktowane jako -Infinity lub Nieskończoność odpowiednio:~10 -> {x|x ≤ 10}
;~ -> ℤ
. - Wyrażenie MPN, po którym następuje „pomiń” i inne wyrażenie MPN. Stanowi różnicę dwóch zestawach:
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - Dwa wyrażenia MPN, oddzielone przecinkiem. Stanowi to związek dwóch zestawach:
1,8~9,15~17 -> {1,8,9,15,16,17}
.
Operator „pomiń” wiąże się mocniej niż operator przecinka, więc 16,110~112 skip 16 -> {16,110,111,112}
(16 nie jest zawarte w zestawie {110,111,112}
, więc wykluczenie 16 nie ma znaczenia).
Możesz także umieścić wyrażenia w nawiasach, aby uzyskać jednoznaczność:
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
Oto gramatyka:
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
Twoim zadaniem jest napisanie programu, który przyjmuje dwa dane wejściowe:
- Wyrażenie MPN
- Numer
i generuje pewną wartość prawdy lub falseya w zależności od tego, czy problem występuje w zestawie opisanym przez wyrażenie MPN.
Dane techniczne
- Możesz założyć, że pierwsze wejście jest poprawnie sformułowanym wyrażeniem MPN (tzn. Że pasuje do powyższej gramatyki)
- Liczby w wyrażeniu MPN są zawsze liczbami całkowitymi. Mogą być ujemne lub zerowe, ale nigdy nie będą miały części ułamkowej.
- To jest golf golfowy , więc wygrywa najkrótsze prawidłowe zgłoszenie (mierzone w bajtach).
- Możesz użyć różnych znaków dla
~
i,
, jeśli chcesz.
Przypadki testowe
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
~
and ,
but not for skip
.
6 skip 6,~
który, jak sądzę , poprawnie zinterpretowałem. Pozostałe 2 odpowiedzi do tej pory nie spełniają tego (ponownie, zakładając, że interpretuję poprawnie). Jeśli źle zrozumiałem, proszę to poprawić i wyjaśnić, ale z mojego zrozumienia, powinien on pasować do wszystkiego (jest to połączenie zbioru, które nie pasuje do niczego z zestawem, który pasuje do wszystkiego). Są to przypadki, o których mówiłem wcześniej, które moim zdaniem mogą bardzo pomóc w testowaniu naszych rozwiązań.