with open('input21.txt','r') as f: inp = f.read().splitlines(keepends=False) _monkeys = {} for line in inp: monkey, value = line.split(': ') _monkeys[monkey] = value Equation1 = _monkeys['root'].split()[0] Equation2 = _monkeys['root'].split()[2] print(Equation1, Equation2) n = 0 done = False monkeys = _monkeys.copy() monkeys['humn'] = 'humn' while not done: done = True for item in Equation1.split(): if item not in ['-','+','/','*','humn','(',')'] and not item.isnumeric(): if monkeys[item].isnumeric(): insert = monkeys[item] else: insert = '( ' + monkeys[item] + ' )' Equation1 = Equation1.replace(item, insert) done = False break done = False while not done: done = True for item in Equation2.split(): if item not in ['-','+','/','*','humn','(',')'] and not item.isnumeric(): if monkeys[item].isnumeric(): insert = monkeys[item] else: insert = '( ' + monkeys[item] + ' )' Equation2 = Equation2.replace(item, insert) done = False break if 'humn' in Equation1: Equation1 = Equation1.replace('humn', 'x') Equation = eval('lambda x:' + Equation1) else: Equation1 = eval('lambda x:' + Equation1) number = Equation1(1) if 'humn' in Equation2: Equation2 = Equation2.replace('humn', 'x') Equation = eval('lambda x:' + Equation2) else: Equation2 = eval('lambda x:' + Equation2) number = Equation2(1) if Equation(0) < number: increase = False else: increase = True step = 100000000 while not Equation(n) == number: print(n, Equation(n), number) if increase: if Equation(n) < number: increase = False step /= 10 else: n += step else: if Equation(n) > number: increase = True step /= 10 else: n -= step print(n) print(Equation1,'\n', Equation2)