65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
def binerator(value,length):
|
|
out = "{0:b}".format(value)
|
|
while len(out) < length:
|
|
out = "0" + out
|
|
return out
|
|
|
|
def trinerator(value,length):
|
|
out = ""
|
|
while value > 0:
|
|
out = str(int(value)%3) + out
|
|
value = value//3
|
|
while len(out) < length:
|
|
out = "0" + out
|
|
return out
|
|
|
|
def firstTestResult(test):
|
|
out = 0
|
|
for i in range(0,pow(2,len(test[1])-1)):
|
|
bin = binerator(i,len(test[1])-1)
|
|
total = int(test[1][0])
|
|
for j in range(0,len(bin)):
|
|
match bin[j:j+1]:
|
|
case "0":
|
|
total += int(test[1][j+1])
|
|
case "1":
|
|
total *= int(test[1][j+1])
|
|
case _:
|
|
print("THIS IS AN ERROR")
|
|
if str(total) == test[0]:
|
|
return 1
|
|
return 0
|
|
|
|
def secondTestResult(test):
|
|
out = 0
|
|
for i in range(0,pow(3,len(test[1])-1)):
|
|
bin = trinerator(i,len(test[1])-1)
|
|
total = int(test[1][0])
|
|
for j in range(0,len(bin)):
|
|
match bin[j:j+1]:
|
|
case "0":
|
|
total += int(test[1][j+1])
|
|
case "1":
|
|
total *= int(test[1][j+1])
|
|
case "2":
|
|
total = int(str(total)+test[1][j+1])
|
|
case _:
|
|
print("THIS IS AN ERROR")
|
|
if str(total) == test[0]:
|
|
return 1
|
|
return 0
|
|
|
|
tests = []
|
|
with open("input07.txt") as file:
|
|
for line in file:
|
|
tests.append([line.split(":")[0],line.split(":")[1][1:-1].split(" ")])
|
|
out = 0
|
|
for test in tests:
|
|
if firstTestResult(test) >= 1:
|
|
out += int(test[0])
|
|
print("first challenge: "+str(out))
|
|
out = 0
|
|
for test in tests:
|
|
if secondTestResult(test) >= 1:
|
|
out += int(test[0])
|
|
print("second challenge: "+str(out)) |