calcolatrice di prefissi utilizzando lo stack in javascript

Sep 05 2020

Sto cercando di creare una calcolatrice con il metodo di input RPN (notazione polacca inversa) utilizzando lo stack in javascript.

input : [1, 5, '+', 6, 3, '-', '/', 7, '*']

1 è un operando, spingere a Stack.

5 è un operando, spingere a Stack.

"+" è un operatore, apri 1 e 5, calcola e invia il risultato allo Stack.

6 è un operando, spingere a Stack.

3 è un operando, spingere a Stack.

'-' è un operatore, fai apparire 6 e 3, sottrai e sposta il risultato in Stack.

"/" è un operatore, pop 6 e 3, li divide e inserisce il risultato in Stack.

7 è un operando, spingere a Stack.

'*' è un operatore, fai apparire 2 e 7, moltiplicali e sposta il risultato in Stack.

output : [14]

c'è qualche altra alternativa per rendere il mio codice più efficace?

const x1 = x.push(1);
const x2 = x.push(5);
const x3 = x.push('+');

x.pop(1);
x.pop(5);
x.pop('+');
x.push(1+5);

const x4 = x.push(6);
const x5 = x.push(3);
const x6 = x.push('-');

x.pop(6);
x.pop(3);
x.pop('-');
x.push(6-3);

const x7 = x.push('/');
x.pop(6);
x.pop(3);
x.pop('/');
x.push(6/3);

const x8 = x.push(7);
const x9 = x.push('*');

x.pop(2);
x.pop(7);
x.pop('*');
x.push(2*7);

console.log(x);

Risposte

3 NinaScholz Sep 05 2020 at 01:12

Potresti prendere un oggetto per tutti gli operatori e controllare se il valore di inputè un operatore, quindi eseguire l'operazione con i valori saltati invertiti dello stack o inserire il valore nello stack.

const
    operators = {
        '+': (a, b) => a + b,
        '-': (a, b) => a - b,
        '*': (a, b) => a * b,
        '/': (a, b) => a / b
    },
    input = [1, 5, '+', 6, 3, '-', '/', 7, '*'],
    stack = [];

input.forEach(value => {
    stack.push(value in operators
        ? operators[value](...stack.splice(-2))
        : value
    );
    console.log(...stack);
});
.as-console-wrapper { max-height: 100% !important; top: 0; }