Skip to content

Instantly share code, notes, and snippets.

@davidjmemmett
Last active August 29, 2015 14:27
Show Gist options
  • Save davidjmemmett/97bfddf207b08835b9e3 to your computer and use it in GitHub Desktop.
Save davidjmemmett/97bfddf207b08835b9e3 to your computer and use it in GitHub Desktop.
operands = {
'+': lambda a, b: a + b,
'-': lambda a, b: a - b,
'x': lambda a, b: a * b,
'/': lambda a, b: a / b
}
def parse(eq):
bits = []
last_num = ''
for index in range(len(eq)):
char = eq[index]
if char.isdigit():
last_num += char
elif char == ' ':
continue
elif char in operands:
bits.append(last_num)
bits.append(char)
last_num = ''
if last_num != '':
bits.append(last_num)
return bits
def solve(eq):
result = 0
last_operand = operands['+']
for bit in parse(eq):
if bit.isdigit():
result = last_operand(result, int(bit))
else:
last_operand = operands[bit]
return result
if __name__ == '__main__':
assert solve('0') == 0
assert solve('1') == 1
assert solve('1 + 1') == 2
assert solve('1 + 1 x 5') == 10
assert solve('1 + 1 x 5 + 6') == 16
assert solve('1 + 1 x 5 + 6 / 4') == 4
assert solve('1 + 1 x 5 + 6 / 4 + 8') == 12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment