Skip to content

Commit 7ce4f26

Browse files
committed
Runtime: 149 ms (Top 25.00%) | Memory: 46.7 MB (Top 37.50%)
1 parent 653f508 commit 7ce4f26

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
1+
// Runtime: 149 ms (Top 25.00%) | Memory: 46.7 MB (Top 37.50%)
12
/**
23
* @param {string} expression
34
* @return {number}
45
*/
56
var evaluate = function(expression) {
6-
return helper(expression);
7+
return helper(expression);
78
};
89

910
const helper = (expr, map = {}) => {
1011
if (expr[0] !== '(')
1112
return /[0-9]|-/.test(expr[0]) ? +expr : map[expr];
12-
13+
1314
map = Object.assign({}, map);
1415
const start = expr[1] === 'm' ? 6 : 5;
1516
const tokens = parse(expr.slice(start, expr.length - 1));
16-
17+
1718
if (expr.startsWith('(m')) return helper(tokens[0], map) * helper(tokens[1], map);
1819
if (expr.startsWith('(a')) return helper(tokens[0], map) + helper(tokens[1], map);
19-
20+
2021
for (let i = 0; i < tokens.length - 2; i += 2)
2122
map[tokens[i]] = helper(tokens[i + 1], map);
22-
23+
2324
return helper(tokens.at(-1), map);
2425
}
2526

2627
const parse = expr => {
2728
const tokens = [];
2829
let [builder, par] = ['', 0];
29-
30+
3031
for (let ch of expr) {
3132
if (ch === '(') par++;
3233
if (ch === ')') par--;
@@ -36,6 +37,6 @@ const parse = expr => {
3637
}
3738
else builder += ch;
3839
}
39-
40+
4041
return builder ? [...tokens, builder] : tokens;
41-
}
42+
}

0 commit comments

Comments
 (0)