diff --git a/js/src/EvaluateReversePolishNotation.mjs b/js/src/EvaluateReversePolishNotation.mjs new file mode 100644 index 0000000..67e059a --- /dev/null +++ b/js/src/EvaluateReversePolishNotation.mjs @@ -0,0 +1,33 @@ +/** + * @param {string[]} tokens + * @return {number} + */ +var evalRPN = function (tokens) { + const stack = []; + tokens.forEach((token) => { + const num = Number(token); + if (!isNaN(num)) { + stack.push(num); + } else { + const m1 = stack.pop(); + const m2 = stack.pop(); + switch (token) { + case '+': + stack.push(m2 + m1); + break; + case '-': + stack.push(m2 - m1); + break; + case '*': + stack.push(m2 * m1); + break; + case '/': + stack.push(Math.trunc(m2 / m1)); + break; + } + } + }); + return stack.pop() +}; + +export default evalRPN; \ No newline at end of file diff --git a/js/test/EvaluateReversePolishNotation.test.mjs b/js/test/EvaluateReversePolishNotation.test.mjs new file mode 100644 index 0000000..b4d7122 --- /dev/null +++ b/js/test/EvaluateReversePolishNotation.test.mjs @@ -0,0 +1,13 @@ +import test from "node:test"; +import { strict as assert } from "node:assert"; +import evalRPN from "../src/EvaluateReversePolishNotation.mjs"; + +test("Evaluate Reverse Polish Notation", async (t) => { + await t.test("1st", () => { + assert.strictEqual(evalRPN(["2", "1", "+", "3", "*"]), 9); + }); + + await t.test("2nd", () => { + assert.strictEqual(evalRPN(["4", "13", "5", "/", "+"]), 6); + }); +}); \ No newline at end of file