Digamos que tengo una expresión:
9 * 8 + 1 - 4
Esta expresión se puede interpretar de seis maneras diferentes, dependiendo de la precedencia del operador:
(((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 (- + *)
Digamos que soy un desarrollador, y no tengo ganas de memorizar tablas de precedencia, etc., así que solo voy a adivinar.
En este caso, el mayor margen de error sería 45-77, que es una diferencia de 32. Esto significa que mi suposición solo se desactivará en un máximo de 32.
El reto
Dada una expresión que consiste en los números y +
, -
, *
, /
(división entera) y%
, la producción de la diferencia absoluta de la más grande y el más pequeño valor posible para que la expresión, en base a la precedencia de operadores.
Especificaciones
- La expresión de entrada no contendrá paréntesis y cada operador es asociativo a la izquierda.
- La expresión de entrada solo contendrá enteros no negativos. Sin embargo, las subexpresiones pueden evaluar negativas (p
1 - 4
. Ej .). - Puede tomar la expresión en cualquier formato razonable. Por ejemplo:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- La entrada contendrá al menos 1 y como máximo 10 operadores.
- Cualquier expresión que contenga una división o módulo por 0 debe ignorarse.
- Puede suponer que el módulo no recibirá operandos negativos.
Casos de prueba
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
funciona el operador en números negativos? ¿Como C o Python o algo más?
%
como si tuvieras dos precedentes diferentes en tu segundo ejemplo.