Dis que j'ai une expression:
9 * 8 + 1 - 4
Cette expression peut être interprétée de six manières différentes, en fonction de la priorité de l'opérateur:
(((9 * 8) + 1) - 4) = 69 (* + -)
((9 * 8) + (1 - 4)) = 69 (* - +)
((9 * (8 + 1)) - 4) = 77 (+ * -)
(9 * ((8 + 1) - 4)) = 45 (+ - *)
((9 * 8) + (1 - 4)) = 69 (- * +)
(9 * (8 + (1 - 4))) = 45 (- + *)
Supposons que je suis un développeur et que je n'aime pas mémoriser les tableaux de priorité, etc., alors je vais deviner.
Dans ce cas, la marge d'erreur la plus grande serait 45-77, soit une différence de 32. Cela signifie que mon estimation ne sera que de 32.
Le défi
Compte tenu d' une expression consistant en les nombres et +
, -
, *
, /
(division entière) et %
, la sortie de différence absolue de la plus grande et la plus petite valeur possible pour cette expression, en fonction de la priorité des opérateurs.
Caractéristiques
- L'expression en entrée ne contiendra pas de parenthèses et chaque opérateur est associatif à gauche.
- L'expression d'entrée ne contiendra que des entiers non négatifs. Cependant, les sous-expressions peuvent donner des résultats négatifs (par exemple
1 - 4
). - Vous pouvez prendre l'expression dans n'importe quel format raisonnable. Par exemple:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- L'entrée contiendra au moins 1 et au plus 10 opérateurs.
- Toute expression contenant une division ou un modulo par 0 doit être ignorée.
- Vous pouvez supposer que modulo ne recevra pas d'opérandes négatifs.
Cas de test
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
fonctionne l'opérateur sur les nombres négatifs? La voie comme C ou Python ou autre chose?
%
avoir deux précédents différents dans votre deuxième exemple.