Files
python-aoc-2021/day08/part2.py
Sebastian Seedorf 7dd2b4ce45 Day 08 (glamorized)
2021-12-08 11:47:51 +01:00

58 lines
1.2 KiB
Python

#!/usr/bin/env python3
# a
# b c
# d
# e f
# g
# 1 c f 2
# 7 a c f 3
# 4 bcd f 4
# 2 a cde g 5
# 3 a cd fg 5
# 5 ab d fg 5
# 0 abc efg 6
# 6 ab defg 6
# 9 abcd fg 6
# 8 abcdefg 7
# 1 = len(2)
# 7 = len(3)
# 4 = len(4)
# 8 = len(7)
# 3 = len(5) and len(&1)==2 and len(&4)==3
# 5 = len(5) and len(&1)==1 and len(&4)==3
# 2 = len(5) and len(&1)==1 and len(&4)==2
# 9 = len(6) and len(&1)==2 and len(&4)==4
# 0 = len(6) and len(&1)==2 and len(&4)==3
# 6 = len(6) and len(&1)==1 and len(&4)==3
lines = (x.strip() for x in open("input.txt"))
result = 0
MAPPING = {
(5, 2, 3): 3,
(5, 1, 3): 5,
(5, 1, 2): 2,
(6, 2, 4): 9,
(6, 2, 3): 0,
(6, 1, 3): 6
}
for line in lines:
input, output = tuple(map(lambda x: list(map(lambda v: ''.join(sorted(v)), x.split())), line.split(' | ')))
input.sort(key=len)
num1, num4 = input[0], input[2]
numbers = {input[0]: 1, input[2]: 4, input[1]: 7, input[9]: 8}
for seg in input:
compare = (len(seg), sum(x in num1 for x in seg), sum(x in num4 for x in seg))
if compare in MAPPING:
numbers[seg] = MAPPING[compare]
result += int(''.join(str(numbers[v]) for v in output))
print(result)