运行时间: 42 ms
内存: 16.7 MB
from sortedcontainers import SortedList
from typing import List
from collections import defaultdict, deque
from itertools import accumulate
from functools import cache
import sys
import math
inf=float("inf")
class Solution:
def log(self, *s):
pass
def parseBoolExpr(self,expr:str):
expr=expr.replace(',','')
# print(expr)
def dfs(op,args:str):
self.log(f'{op}:{args}')
l,r=0,len(args)-1
while l<=r:
if args[l]=='f':
tmp_result=False
elif args[l]=='t':
tmp_result=True
else:
if op == '!':
right_index=r-l
else:
right_index=args[l:].index(')')
tmp_result = dfs(args[l],args[l+2:l+right_index])
l+=right_index
if op == '&' and tmp_result==False:
return False
elif op == '|' and tmp_result == True:
return True
elif op=='!':
return not tmp_result
l+=1
return True if op=='&' else False
return dfs(expr)
def parseBoolExpr(self,expr:str):
expr=expr.replace(',','')
stacks=[]
stack_values=[[]]
for i,v in enumerate(expr):
if v == '(':
stack_values.append([])
stacks.append(expr[i-1])
elif v==')':
op=stacks.pop()
vs=stack_values.pop()
if op=='&':
flag=all(vs)
elif op=='|':
flag=any(vs)
elif op=='!':
flag=not vs[0]
# self.log(op,stack_values[:],vs,flag)
stack_values[-1].append(flag)
elif v=='f':
stack_values[-1].append(False)
elif v=='t':
stack_values[-1].append(True)
return stack_values[0][0]
def run(self, *args):
return self.parseBoolExpr(*args)
class SolutionDebug(Solution):
logs = ""
def log(self, *s):
self.logs += " ".join([str(v) for v in s])+"
"
def run(self, *args, **kw) -> int:
self.logs = ""
try:
return super().run(*args, **kw)
except Exception as e:
import traceback
traceback.print_exc()
return None
if __name__ == '__main__':
s = SolutionDebug()
null=None
true=True
false=False
for case in [
["|(&(t,f,t),t)",True],
["!(&(!(&(f)),&(t),|(f,f,t)))",False],
["!(&(!(t),&(f),|(f)))",true],
["|(&(t,f,t),!(t))",false],
["&(|(f))",false],
["|(f,f,f,f,t)",true],
["!(&(f,t))",true]
]:
s.logs = ""
e = s.run(*case[:-1])
if e != case[-1]:
print(e, case)
print(s.logs)
break