advent_of_code/2024/day7/main.py

67 lines
1.8 KiB
Python
Raw Normal View History

2024-12-10 19:02:13 -05:00
import sys
from math import log10
import os
sys.path.insert(1, os.path.abspath('../../'))
from python_tools.aoc_utils import *
def look_for_solution_p1(ans, input):
if (len(input) == 1):
return (ans == input[0])
else:
ans1 = look_for_solution_p1(ans-input[-1], input[:-1])
ans2 = look_for_solution_p1(ans/input[-1], input[:-1])
return ans1 or ans2
def digits(n):
return int(log10(n)) + 1
def look_for_solution_p2(ans, input):
if (len(input) == 1):
return (ans == input[0])
else:
ans1, ans2, ans3 = False, False, False
if (ans-input[-1]) >= 0:
ans1 = look_for_solution_p2(ans-input[-1], input[:-1])
if int(ans/input[-1]) == ans/input[-1]:
ans2 = look_for_solution_p2(ans/input[-1], input[:-1])
#first check ans is a int
if int(ans) == ans:
if input[-1] == int(str(int(ans))[-digits(input[-1]):]):
new_ans = str(int(ans))[:-digits(input[-1])]
if new_ans == '':
ans = look_for_solution_p2(0, input[:-1])
# print("SD:LFKJSDF", input, ans)
# return True
else:
ans3 = look_for_solution_p2(int(new_ans), input[:-1])
return ans1 or ans2 or ans3
def part_one(g):
p1 = 0
for i in g:
if look_for_solution_p1(i, g[i]):
p1+=i
print("Part One: ", p1)
def part_two(g):
p2 = 0
for i in g:
if look_for_solution_p2(i, g[i]):
p2+=i
print("Part Two: ", p2)
G = {}
def main():
contents = file2list("input.txt")
for i in contents:
x = i.split(":")
G[int(x[0])] = list(map(int, x[1].split()))
# print(G)
part_one(G)
part_two(G)
if __name__ == "__main__":
main()