Digamos que eu tenho uma expressão:
9 * 8 + 1 - 4
Essa expressão pode ser interpretada de seis maneiras diferentes, dependendo da precedência do 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 eu seja um desenvolvedor e não tenha vontade de memorizar tabelas de precedência, etc., então vou adivinhar.
Nesse caso, a maior margem de erro seria 45-77, que é uma diferença de 32. Isso significa que meu palpite só será desativado em um máximo de 32.
O desafio
Dada uma expressão consistindo de números e +
, -
, *
, /
(divisão inteira) e %
, de saída da diferença absoluta do maior e o menor valor possível para que a expressão, com base na prioridade de operadores.
Especificações
- A expressão de entrada não conterá parênteses e todo operador é associativo à esquerda.
- A expressão de entrada conterá apenas números inteiros não negativos. No entanto, subexpressões podem ser consideradas negativas (por exemplo
1 - 4
). - Você pode pegar a expressão em qualquer formato razoável. Por exemplo:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- A entrada conterá pelo menos 1 e no máximo 10 operadores.
- Qualquer expressão que contenha uma divisão ou módulo por 0 deve ser ignorada.
- Você pode assumir que o módulo não receberá operandos negativos.
Casos de teste
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
operador trabalha com números negativos? A maneira como C ou Python ou algo mais?
%
como tendo duas precedências diferentes no seu segundo exemplo.