You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

60 lines
1.4 KiB

#!/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")