51 lines
899 B
Python
51 lines
899 B
Python
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
def tokenize(xs):
|
||
|
result = []
|
||
|
i = 0
|
||
|
while i < len(xs):
|
||
|
curr = xs[i]
|
||
|
if curr in {'*','+'}:
|
||
|
result.append(curr)
|
||
|
i += 1
|
||
|
continue
|
||
|
i += 1
|
||
|
while i < len(xs) and xs[i] in {str(x) for x in range(10)}:
|
||
|
curr += xs[i]
|
||
|
i += 1
|
||
|
result.append(int(curr))
|
||
|
return result
|
||
|
|
||
|
def parse(tokens):
|
||
|
result = []
|
||
|
series = []
|
||
|
for token in tokens:
|
||
|
if token == '*':
|
||
|
continue
|
||
|
elif token == '+':
|
||
|
result.append(series)
|
||
|
series = []
|
||
|
else:
|
||
|
series.append(token)
|
||
|
if series:
|
||
|
result.append(series)
|
||
|
return result
|
||
|
|
||
|
def product(xs):
|
||
|
result = 1
|
||
|
for x in xs:
|
||
|
result *= x
|
||
|
return result
|
||
|
|
||
|
def evaluate(tree):
|
||
|
return sum([product(xs) for xs in tree])
|
||
|
|
||
|
print(evaluate(parse(tokenize("2+30*8*9+10"))))
|