Notação pós-fixa (Parte 1: avaliação)

Published by zatoichi49 in

As expressões matemáticas geralmente são escritas com notação infixa, em que o operador fica entre os dois operandos. A notação pós-fixa, por outro lado, coloca o operador depois dos operandos. Como usamos a precedência dos operadores para determinar a ordem dos cálculos (por exemplo, multiplicação/divisão é avaliada antes de adição/subtração), podemos mudar a posição dos operandos e eliminar a necessidade de parênteses:

2 + 5   # Infix
2 5 +   # Postfix

5 + (1 + 2) * 4 - 3   # Infix
5 1 2 + 4 * + 3 -     # Postfix

As expressões pós-fixas são avaliadas lendo da esquerda para a direita. Sempre que um operador é encontrado, um cálculo é realizado com os dois operandos anteriores. O processo se repete até que não haja mais cálculos a serem realizados:

2 3 4 * + 9 -   # evaluate 3x4
   2 12 + 9 -   # evaluate 2+12
       14 9 -   # evaluate 14-9
            5   # final answer

Dada uma expressão pós-fixa como uma string, retorne a expressão avaliada. Um único espaço separa cada operador/operando.

Exemplos

postfix("12 3 /") ➞ 4

postfix("5 3 4 * +") ➞ 17

postfix("5 3 + 4 *") ➞ 32

Observações

Postfix também é conhecido como "Reverse Polish Notation". Consulte a aba de recursos para obter mais informações.