Add Day 7 solution.

This commit is contained in:
2024-12-08 01:51:13 +10:00
parent f1c5694d26
commit 2f95e4b529

69
day7/solver.py Normal file
View File

@@ -0,0 +1,69 @@
"""
Bit tired and lazy today.
Just going to go for minimal effort.
"""
import sys
test_data = r"""
190: 10 19
3267: 81 40 27
83: 17 5
156: 15 6
7290: 6 8 6 15
161011: 16 10 13
192: 17 8 14
21037: 9 7 18 13
292: 11 6 16 20
"""
def load_data(data):
for line in data.splitlines():
if line := line.strip():
target, remaining = line.split(': ')
yield int(target), tuple(map(int, remaining.split()))
def validate(target, parts, current=None, ors=False):
if not parts:
return target == current
part, remaining = parts[0], parts[1:]
if current is None:
valid = validate(target, remaining, part, ors=ors)
elif current > target:
valid = False
else:
# Try mul first
valid = validate(target, remaining, current * part, ors=ors)
valid = valid or validate(target, remaining, current + part, ors=ors)
if ors:
valid = valid or validate(target, remaining, int(str(current)+str(part)), ors=ors)
return valid
def valid_sums(data, **kwargs):
return sum(target for target, parts in load_data(data) if validate(target, parts, **kwargs))
def test_a():
print("Testing")
assert valid_sums(test_data) == 3749
print("Tested")
def test_b():
print("Testing")
assert valid_sums(test_data, ors=True) == 11387
print("Tested")
if __name__ == '__main__':
test_a()
with open(sys.argv[1]) as f:
data = f.read()
print(f"Sum is {valid_sums(data)}")
test_b()
print(f"New Sum is {valid_sums(data, ors=True)}")