-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path__H__parsing-a-boolean-expression.js
51 lines (45 loc) · 1.67 KB
/
__H__parsing-a-boolean-expression.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// https://leetcode.com/problems/parsing-a-boolean-expression/description/
const c = console.log.bind(console);
var parseBoolExpr = function(expression) {
let arr = expression.split("");
let secondArr = [];
while (arr.length != 0) {
let popped = arr.pop();
let calcArr = [];
// c(popped)
// c(secondArr)
if (popped === "&" || popped === "|" || popped === "!") {
// c(secondArr)
while (true) {
let secondPopped = secondArr.pop();
// c("secondPopped : " + secondPopped);
// c("Second Arr : " + JSON.stringify(secondArr));
secondPopped != "(" && secondPopped != ')' && secondPopped != ',' ? calcArr.push(secondPopped) : "";
if (secondPopped === ")") {
switch (popped) {
case '|':
secondArr.push(calcArr.includes('t') ? "t" : "f")
break;
case '&':
secondArr.push(calcArr.every(i => i == 't') ? "t" : "f")
break;
case '!':
secondArr.push(calcArr[0] == "f" ? "t" : "f")
break;
default:
}
break;
}
}
} else {
secondArr.push(popped);
}
}
// return secondArr;
return secondArr[0] == "t" ? true : false
};
c(parseBoolExpr("&(|(f,t),&(f,t))"))
c(parseBoolExpr("|(f,f,f,t)"))
c(parseBoolExpr("!(&(f,t))"))
c(parseBoolExpr("&(|(f))"));
c(parseBoolExpr("&(t,t,t)"))