FallArk
- 127
- 0
Working solution:
Working on making it support minus(es?):p
Code:
def eval_infix_sum(expr,pos):
ans, pos = eval_infix_product(expr,pos)
while expr[pos] == '+' or expr[pos] == '-':
if expr[pos] == '+':
rhs,pos = eval_infix_product(expr,pos + 1)
ans = ans + rhs
elif expr[pos] == '-':
rhs,pos = eval_infix_product(expr,pos + 1)
ans = ans - rhs
return ans,pos
def eval_infix_product(expr,pos):
ans,pos = eval_infix_factor(expr,pos)
while expr[pos] == '*' or expr[pos] == '/' or expr[pos] == '%':
if expr[pos] == '*':
rhs,pos = eval_infix_factor(expr,pos + 1)
ans = ans * rhs
elif expr[pos] == '/':
rhs,pos = eval_infix_factor(expr,pos + 1)
ans = ans / rhs
elif expr[pos] == '%':
rhs,pos = eval_infix_factor(expr,pos + 1)
ans = ans % rhs
return ans,pos
def eval_infix_factor(expr,pos):
if expr[pos] == '(':
ans,pos = eval_infix_sum(expr,pos+1)
return ans,pos+1
else:
return int(expr[pos]),pos+1
def eval_infix_list(expr):
ans,discard = eval_infix_sum(expr,0)
return ans
def eval_infix(expr):
return eval_infix_list(expr.split() + [ ";"])