Advertisement
HexTree

Advent of Code 2022 Day 21

Dec 21st, 2022
854
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.24 KB | Source Code | 0 0
  1. monkeys = {}
  2.  
  3. with open('input', 'r') as f:
  4.     for line in f.readlines():
  5.         monkey, num = line.strip().split(': ')
  6.         monkeys[monkey] = num
  7.  
  8.  
  9. def get_num(monkey):
  10.     args = monkeys[monkey].split()
  11.     if len(args) == 1:
  12.         return int(args[0])
  13.     numa = get_num(args[0])
  14.     numb = get_num(args[2])
  15.     return eval("numa" + args[1] + "numb")
  16.  
  17. print("part 1:", get_num("root"))
  18.  
  19. def get_num2(monkey):
  20.     if monkey == "humn":
  21.         return None
  22.     args = monkeys[monkey].split()
  23.     if len(args) == 1:
  24.         return int(args[0])
  25.     numa = get_num2(args[0])
  26.     numb = get_num2(args[2])
  27.     left = args[0] if numa is None else str(numa)
  28.     right = args[2] if numb is None else str(numb)
  29.     if numa is not None and numb is not None:
  30.         result = int(eval("numa" + args[1] + "numb"))
  31.         monkeys[monkey] = str(result)
  32.         return result
  33.     else:
  34.         monkeys[monkey] = ' '.join([left, args[1], right])
  35.         return None
  36.  
  37. get_num2("root")
  38.  
  39. # for i, v in monkeys.items():
  40. #     if ' ' in v:
  41. #         print(i, v)
  42.  
  43.  
  44. def solve(monkey, target):
  45.     if monkey == "humn":
  46.         return target
  47.     args = monkeys[monkey].split()
  48.     if args[0].isdigit():
  49.         new_monkey = args[2]
  50.     else:
  51.         new_monkey = args[0]
  52.     if args[1] == '+':
  53.         if args[0].isdigit():
  54.             return solve(new_monkey, target - int(args[0]))
  55.         else:
  56.             return solve(new_monkey, target - int(args[2]))
  57.     if args[1] == '-':
  58.         if args[0].isdigit():
  59.             return solve(new_monkey, int(args[0]) - target)
  60.         else:
  61.             return solve(new_monkey, int(args[2]) + target)
  62.     if args[1] == '*':
  63.         if args[0].isdigit():
  64.             return solve(new_monkey, target / int(args[0]))
  65.         else:
  66.             return solve(new_monkey, target / int(args[2]))
  67.     if args[1] == '/':
  68.         if args[0].isdigit():
  69.             return solve(new_monkey, int(args[0]) / target)
  70.         else:
  71.             return solve(new_monkey, target * int(args[2]))
  72.  
  73.  
  74. args = monkeys["root"].split()
  75. if args[0].isdigit():
  76.     monkey = args[2]
  77.     target = int(args[0])
  78. else:
  79.     monkey = args[0]
  80.     target = int(args[2])
  81.  
  82. result = solve(monkey, target)
  83. print("part 2:", result)
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement