Advertisement
Guest User

AOC2022_Day21

a guest
Dec 20th, 2022
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | Source Code | 0 0
  1. op_mapping = {}
  2. parts_mapping = {}
  3.  
  4. def operation(parts):
  5. if len(parts) == 2:
  6. return int(parts[1])
  7. else:
  8. f = op_mapping[parts[1]](parts_mapping[parts[1]])
  9. s = op_mapping[parts[3]](parts_mapping[parts[3]])
  10. if parts[2] == '+': return f + s
  11. elif parts[2] == '-': return f - s
  12. elif parts[2] == '*': return f * s
  13. else: return f / s
  14.  
  15. def backprop(result, node):
  16. parts = parts_mapping[node]
  17. if len(parts) == 2:
  18. if node == 'humn': return [result]
  19. else: return []
  20. else:
  21. f = op_mapping[parts[1]](parts_mapping[parts[1]])
  22. s = op_mapping[parts[3]](parts_mapping[parts[3]])
  23. if parts[2] == '+': return backprop(result - s, parts[1]) or backprop(result - f, parts[3])
  24. elif parts[2] == '-': return backprop(result + s, parts[1]) or backprop(f - result, parts[3])
  25. elif parts[2] == '*': return backprop(result / s, parts[1]) or backprop(result / f, parts[3])
  26. else: return backprop(result * s, parts[1]) or backprop(f/result, parts[3])
  27.  
  28. for i in range(len(input_lines)):
  29. line = input_lines[i]
  30. parts = line.split(' ')
  31. monkey = parts[0][:-1]
  32. op_mapping[monkey] = operation
  33. parts_mapping[monkey] = parts
  34.  
  35. def root_op(parts):
  36. f = op_mapping[parts[1]](parts_mapping[parts[1]])
  37. s = op_mapping[parts[3]](parts_mapping[parts[3]])
  38. return (backprop(f, parts[3]) or backprop(s, parts[1]))[0]
  39.  
  40. # Uncomment the following line to run part 2
  41. # op_mapping['root'] = root_op
  42. op_mapping['root'](parts_mapping['root'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement