Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- monkeys = {}
- with open('input', 'r') as f:
- for line in f.readlines():
- monkey, num = line.strip().split(': ')
- monkeys[monkey] = num
- def get_num(monkey):
- args = monkeys[monkey].split()
- if len(args) == 1:
- return int(args[0])
- numa = get_num(args[0])
- numb = get_num(args[2])
- return eval("numa" + args[1] + "numb")
- print("part 1:", get_num("root"))
- def get_num2(monkey):
- if monkey == "humn":
- return None
- args = monkeys[monkey].split()
- if len(args) == 1:
- return int(args[0])
- numa = get_num2(args[0])
- numb = get_num2(args[2])
- left = args[0] if numa is None else str(numa)
- right = args[2] if numb is None else str(numb)
- if numa is not None and numb is not None:
- result = int(eval("numa" + args[1] + "numb"))
- monkeys[monkey] = str(result)
- return result
- else:
- monkeys[monkey] = ' '.join([left, args[1], right])
- return None
- get_num2("root")
- # for i, v in monkeys.items():
- # if ' ' in v:
- # print(i, v)
- def solve(monkey, target):
- if monkey == "humn":
- return target
- args = monkeys[monkey].split()
- if args[0].isdigit():
- new_monkey = args[2]
- else:
- new_monkey = args[0]
- if args[1] == '+':
- if args[0].isdigit():
- return solve(new_monkey, target - int(args[0]))
- else:
- return solve(new_monkey, target - int(args[2]))
- if args[1] == '-':
- if args[0].isdigit():
- return solve(new_monkey, int(args[0]) - target)
- else:
- return solve(new_monkey, int(args[2]) + target)
- if args[1] == '*':
- if args[0].isdigit():
- return solve(new_monkey, target / int(args[0]))
- else:
- return solve(new_monkey, target / int(args[2]))
- if args[1] == '/':
- if args[0].isdigit():
- return solve(new_monkey, int(args[0]) / target)
- else:
- return solve(new_monkey, target * int(args[2]))
- args = monkeys["root"].split()
- if args[0].isdigit():
- monkey = args[2]
- target = int(args[0])
- else:
- monkey = args[0]
- target = int(args[2])
- result = solve(monkey, target)
- print("part 2:", result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement