#!/usr/bin/env python3 import sys, re, math from operator import add, mul, truediv, mod from functools import reduce def parse(line): l = line.split(' ') if l[0] == 'inp': i,o = l else: i,o = l[0], [l[1],l[2]] return (i,o) def replist(l,v,r): return [r if i == v else i for i in l] def eql(a,b): return int(a == b) def div(a,b): return math.trunc(reduce(truediv,[a,b])) def alu(instruction, inp): reg = {'w': 0, 'x': 0, 'y': 0, 'z': 0} inp = list(str(inp)) index = 0 for i,ops in instruction: if i == 'inp': reg[ops] = inp[index] index += 1 else: reg[ops[0]] = reduce(eval(i),[int(reg[o]) if o in 'wxyz' else int(o) for o in ops]) return reg if __name__ == '__main__': instr = [parse(line.strip('\n')) for line in open(sys.argv[1])] for i in range(1,9): for k in range(11111111111,99999999999): for j in ['18','27']: r = alu(instr,str(i)+j+str(k)) print(str(i)+j+str(k),r) if r['z'] == 0: print(i,j,k) for i in range(99999999999999,9999999999999,-1): if i % 10000 == 0: print(i) if '0' in str(i): continue r = alu(instr,str(i)) if r['z'] == 0: print(i) break # challenge 1 res1 = "" print("challenge 1:" + "\n" + res1 + "\n") # challenge 2 res2 = "" print("challenge 2:" + "\n" + res2 + "\n")