Skip to content

Commit a3f0f44

Browse files
committed
Day 7 done!
1 parent a614b04 commit a3f0f44

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

2024/day_07/Python/operators.py

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import operator as op
2+
import itertools
3+
4+
def load_input(filename: str) -> list:
5+
with open(filename, "r") as file:
6+
lines = file.readlines()
7+
return [line.strip() for line in lines]
8+
9+
10+
def process_input(lines):
11+
answers = []
12+
values = []
13+
for line in lines:
14+
_answer, _values = line.split(": ")
15+
answers.append(int(_answer))
16+
values.append([int(x) for x in _values.split(" ")])
17+
18+
return answers, values
19+
20+
def check_equation(answer, values, pos_operators = [op.add, op.mul]):
21+
Noperators = len(values) - 1
22+
23+
operator_list = itertools.product(pos_operators, repeat=Noperators)
24+
25+
for op_list in operator_list:
26+
result = values[0]
27+
for op, val in zip(op_list, values[1:]):
28+
result = op(result, val)
29+
if result == answer:
30+
return True
31+
32+
def concatenate_operator(a, b):
33+
return int(str(a) + str(b))
34+
35+
36+
def do_puzzle(answer, values, pos_operators):
37+
# Find which equations are possible
38+
possible = []
39+
for answer, value in zip(answers, values):
40+
if check_equation(answer, value, pos_operators=pos_operators):
41+
possible.append(True)
42+
else:
43+
possible.append(False)
44+
45+
# Sum possible answers
46+
total = 0
47+
for answer, value, is_possible in zip(answers, values, possible):
48+
if is_possible:
49+
total += answer
50+
print(f"Total possible answers: {total}")
51+
52+
53+
if __name__ == "__main__":
54+
input_lines = load_input("day07_input.txt")
55+
56+
answers, values = process_input(input_lines)
57+
58+
# Part 1:
59+
print("Answer Part 1:")
60+
pos_operators = [op.add, op.mul]
61+
do_puzzle(answers, values, pos_operators)
62+
63+
# Part 2:
64+
print("Answer Part 2:")
65+
pos_operators = [op.add, op.mul, concatenate_operator]
66+
do_puzzle(answers, values, pos_operators)

0 commit comments

Comments
 (0)