75 lines
2.2 KiB
Python
75 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)
|