Imaginez que j'ai un nombre infini de problèmes de devoirs (!) Chacun étant donné un nombre entier.
La notation mathématique des problèmes est une notation permettant de décrire des sous-ensembles du problème à l'aide de spécificateurs de problème.
Une expression MPN peut comprendre plusieurs éléments:
- Une seule valeur. Cela représente un ensemble contenant le numéro:
99 -> {99}
. - Une gamme simple. Cela représente l'ensemble contenant tous les numéros du début à la fin de la plage:
10~13 -> {10, 11, 12, 13}
. Si les côtés gauche ou à droite sont absents, ils sont supposés être -Infinity ou Infinity respectivement~10 -> {x|x ≤ 10}
;~ -> ℤ
. - Une expression MPN, suivie de "skip" et d'une autre expression MPN. Cela représente la différence des deux ensembles:
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - Deux expressions MPN, séparées par une virgule. Cela représente l'union de deux ensembles:
1,8~9,15~17 -> {1,8,9,15,16,17}
.
L'opérateur "sauter" se lie plus étroitement que l'opérateur virgule, donc 16,110~112 skip 16 -> {16,110,111,112}
(16 n'est pas inclus dans l'ensemble {110,111,112}
, donc l'exclusion 16 n'a pas d'importance.)
Vous pouvez également mettre des expressions entre parenthèses pour la désambiguïsation:
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
Voici la grammaire:
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
Votre tâche consiste à écrire un programme qui prend deux entrées:
- Une expression MPN
- Un numéro
et génère une valeur true ou falsey selon que ce problème se trouve dans l'ensemble décrit par l'expression MPN.
Caractéristiques
- Vous pouvez supposer que la première entrée est une expression MPN bien formée (c'est-à-dire qu'elle correspond à la grammaire ci-dessus)
- Les nombres dans une expression MPN sont toujours des entiers. Ils peuvent être négatifs ou nuls, mais n'auront jamais de partie fractionnaire.
- Il s'agit de code-golf , donc la soumission valide la plus courte (mesurée en octets) gagne.
- Vous pouvez utiliser différents caractères pour
~
et,
, si vous le souhaitez.
Cas de test
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
~
et ,
, mais pas pour skip
.
6 skip 6,~
que je crois avoir interprété correctement. Les 2 autres réponses jusqu'à présent ne le satisfont pas (encore une fois, en supposant que j'interprète correctement). Si j'ai mal compris, veuillez le corriger et clarifier, mais d'après ma compréhension, cela devrait correspondre à n'importe quoi (c'est l'union d'un ensemble qui ne correspond à rien avec un ensemble qui correspond à tout). Ce sont les types de cas dont je parlais plus tôt et qui, je pense, pourraient beaucoup aider lors du test de nos solutions.