Stellen Sie sich vor, ich habe unendlich viele Hausaufgabenprobleme (!) Mit jeweils einer ganzen Zahl.
Die mathematische Problemnotation ist eine Notation zur Beschreibung von Teilmengen des Problems mithilfe von Problemspezifizierern.
Ein MPN-Ausdruck kann aus mehreren Dingen bestehen:
- Ein einzelner Wert. Dies stellt einen Satz mit der Nummer:
99 -> {99}
. - Ein einfacher Bereich. Dies stellt den Satz alle Zahlen von Anfang bis zum Ende des Bereichs enthalten:
10~13 -> {10, 11, 12, 13}
. Wenn die linke oder rechte Seite fehlt, dann wird angenommen , dass sie -Infinity oder Unendlichkeit sein beziehungsweise:~10 -> {x|x ≤ 10}
;~ -> ℤ
. - Ein MPN-Ausdruck, gefolgt von "Überspringen" und einem anderen MPN-Ausdruck. Dies stellt den Unterschied der beiden Sätze:
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - Zwei MPN-Ausdrücke, durch Komma getrennt. Dies stellt die Vereinigung von zwei Sätzen:
1,8~9,15~17 -> {1,8,9,15,16,17}
.
Der "Überspringen" -Operator bindet enger als der Komma-Operator, also 16,110~112 skip 16 -> {16,110,111,112}
(16 ist nicht in der Menge enthalten {110,111,112}
, daher spielt das Ausschließen von 16 keine Rolle.)
Sie können Ausdrücke auch zur Disambiguierung in Klammern setzen:
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
Das ist die Grammatik:
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
Ihre Aufgabe ist es, ein Programm zu schreiben, das zwei Eingaben übernimmt:
- Ein MPN-Ausdruck
- Eine Zahl
und gibt in Abhängigkeit davon, ob sich dieses Problem in der Menge befindet, die durch den MPN-Ausdruck beschrieben wird, einen Wahrheitsgehalt oder einen falschen Wert aus.
Spezifikationen
- Sie können davon ausgehen, dass die erste Eingabe ein wohlgeformter MPN-Ausdruck ist (dh, dass er der obigen Grammatik entspricht).
- Zahlen in einem MPN-Ausdruck sind immer ganze Zahlen. Sie können negativ oder null sein, haben aber niemals einen Bruchteil.
- Dies ist Code-Golf , also gewinnt die kürzeste gültige Übermittlung (gemessen in Bytes).
- Sie können verschiedene Zeichen für
~
und verwenden,
, wenn Sie möchten.
Testfälle
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
~
und ,
, aber nicht für skip
.
6 skip 6,~
den ich meiner Meinung nach richtig interpretiert habe. Die anderen 2 Antworten sind noch nicht zufriedenstellend (vorausgesetzt, ich interpretiere richtig). Wenn ich es falsch verstanden habe, korrigieren Sie es bitte und klären Sie es, aber meines Wissens sollte es mit allem übereinstimmen (es ist die Vereinigung einer Menge, die mit nichts übereinstimmt, mit einer Menge, die mit allem übereinstimmt). Dies sind die Fälle, über die ich vorhin gesprochen habe und von denen ich denke, dass sie beim Testen unserer Lösungen sehr hilfreich sein können.