mirror of
https://github.com/thib8956/advent-of-code.git
synced 2024-12-27 14:26:29 +00:00
37 lines
987 B
Python
37 lines
987 B
Python
|
def test(values, part2=False):
|
||
|
if len(values) == 1:
|
||
|
yield values[0]
|
||
|
else:
|
||
|
for rest in test(values[1:], part2):
|
||
|
yield values[0] + rest
|
||
|
yield values[0] * rest
|
||
|
if part2:
|
||
|
yield int(str(rest) + str(values[0])) # concatenation
|
||
|
|
||
|
|
||
|
def main(data):
|
||
|
part1 = 0
|
||
|
part2 = 0
|
||
|
for expected, values in data:
|
||
|
for res in test(values[::-1]):
|
||
|
if res == expected:
|
||
|
part1 += res
|
||
|
break
|
||
|
for res in test(values[::-1], part2=True):
|
||
|
if res == expected:
|
||
|
part2 += res
|
||
|
break
|
||
|
|
||
|
print("Part 1: ", part1)
|
||
|
print("Part 2: ", part2)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
import sys
|
||
|
infile = sys.argv[1] if 1 < len(sys.argv) else "example.txt"
|
||
|
with open(infile) as f:
|
||
|
data = [l.rstrip().split(": ") for l in f.readlines()]
|
||
|
data = [(int(a), tuple(map(int, b.split(" ")))) for a, b in data]
|
||
|
main(data)
|
||
|
|