019f8fd211
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15c
git-subtree-split:24f5a642af
Change-Id: I6105b3762b79126b3488359c95978cadb3efa789
50 lines
899 B
Python
50 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"))))
|