Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- op_mapping = {}
- parts_mapping = {}
- def operation(parts):
- if len(parts) == 2:
- return int(parts[1])
- else:
- f = op_mapping[parts[1]](parts_mapping[parts[1]])
- s = op_mapping[parts[3]](parts_mapping[parts[3]])
- if parts[2] == '+': return f + s
- elif parts[2] == '-': return f - s
- elif parts[2] == '*': return f * s
- else: return f / s
- def backprop(result, node):
- parts = parts_mapping[node]
- if len(parts) == 2:
- if node == 'humn': return [result]
- else: return []
- else:
- f = op_mapping[parts[1]](parts_mapping[parts[1]])
- s = op_mapping[parts[3]](parts_mapping[parts[3]])
- if parts[2] == '+': return backprop(result - s, parts[1]) or backprop(result - f, parts[3])
- elif parts[2] == '-': return backprop(result + s, parts[1]) or backprop(f - result, parts[3])
- elif parts[2] == '*': return backprop(result / s, parts[1]) or backprop(result / f, parts[3])
- else: return backprop(result * s, parts[1]) or backprop(f/result, parts[3])
- for i in range(len(input_lines)):
- line = input_lines[i]
- parts = line.split(' ')
- monkey = parts[0][:-1]
- op_mapping[monkey] = operation
- parts_mapping[monkey] = parts
- def root_op(parts):
- f = op_mapping[parts[1]](parts_mapping[parts[1]])
- s = op_mapping[parts[3]](parts_mapping[parts[3]])
- return (backprop(f, parts[3]) or backprop(s, parts[1]))[0]
- # Uncomment the following line to run part 2
- # op_mapping['root'] = root_op
- op_mapping['root'](parts_mapping['root'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement