Files
2021-12-14 21:06:45 +03:00

35 lines
1.3 KiB
Python

from itertools import combinations
with open("input") as f:
data = f.read().strip().split('\n')
data = [[s.split() for s in d.split('|')] for d in data]
print(sum(sum(1 if len(y) in {2,3,4,7} else 0 for y in x) for _, x in data))
known = {
2: 1,
3: 7,
4: 4,
7: 8,
}
s = 0
for digits, number in data:
real = {}
for digit in digits:
if len(digit) in known:
real[known[len(digit)]] = set(digit)
for x in combinations(digits, 9):
base = set('abcdefg')
for d in x:
base = base.intersection(set(d))
if len(base)==1:
f = next(iter(base))
real[2] = [d for digit in digits if len(d := set(digit))==5 and f not in d][0]
real[3] = [d for digit in digits if len(d := set(digit))==5 and len(real[2]-d)==1 and len(d-real[2])==1][0]
real[5] = [d for digit in digits if len(d := set(digit))==5 and d!=real[2] and d!=real[3]][0]
real[9] = [d for digit in digits if len(d := set(digit))==6 and d==real[3] | real[4]][0]
real[0] = [d for digit in digits if len(d := set(digit))==6 and len(d - real[5])==2][0]
real[6] = [d for digit in digits if len(d := set(digit))==6 and d!=real[0] and d!=real[9]][0]
real = {frozenset(v): k for k, v in real.items()}
s += int(''.join(str(real[frozenset(n)]) for n in number))
print(s)