AdventOfCode/Python/2021/08/day8.py

74 lines
2.2 KiB
Python

input = open("input.txt", 'r')
data = []
for line in input:
data.append(list(line.strip().split(" ")))
letters = [set() for i in range(0, 10)]
dataset = ['a','b','c','d','e','f','g']
total = 0
for line in data:
letters = [set() for i in range(0, 10)]
for i in range(0, 10):
entry = line[i]
if len(entry) == 2:
letters[1] = set([frozenset(entry)])
elif len(entry) == 3:
letters[7] = set([frozenset(entry)])
elif len(entry) == 4:
letters[4] = set([frozenset(entry)])
elif len(entry) == 5:
letters[2].update(set([frozenset(entry)]))
letters[3].update(set([frozenset(entry)]))
letters[5].update(set([frozenset(entry)]))
elif len(entry) == 6:
letters[0].update(set([frozenset(entry)]))
letters[6].update(set([frozenset(entry)]))
letters[9].update(set([frozenset(entry)]))
elif len(entry) == 7:
letters[8] = set([frozenset(entry)])
cf = letters[1].pop()
letters[1].add(cf)
for st in letters[3]:
if st.intersection(cf) == cf:
letters[3] = set([st])
letters[2].remove(st)
letters[5].remove(st)
acf = letters[7].pop()
letters[7].add(acf)
for st in letters[6]:
if st.intersection(acf) != acf:
letters[6] = set([st])
letters[0].remove(st)
letters[9].remove(st)
abdefg = letters[6].pop()
letters[6].add(abdefg)
c = frozenset(dataset).difference(abdefg)
for st in letters[2]:
if st.intersection(c) == c:
letters[2] = set([st])
letters[5].remove(st)
bcdf = letters[4].pop()
letters[4].add(bcdf)
for st in letters[9]:
if st.intersection(bcdf) == bcdf:
letters[9] = set([st])
letters[0].remove(st)
num = ''
for i in range(11, 15):
entry = frozenset(line[i])
j = 0
for decoder in letters:
popStorage = decoder.pop()
decoder.add(popStorage)
if popStorage == entry:
num += chr(j+48)
j += 1
total += int(num)
print(total)