31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
import sys
|
|
S = 0
|
|
for l in sys.stdin.read().splitlines():
|
|
[code,num] = l.split('|')
|
|
codes = code.split(" ")
|
|
D = { }
|
|
# uniq choices 1,4,7,8
|
|
D[1] = [l for l in codes if len(l)==2][0]
|
|
D[7] = [l for l in codes if len(l)==3][0]
|
|
D[4] = [l for l in codes if len(l)==4][0]
|
|
D[8] = [l for l in codes if len(l)==7][0]
|
|
# multiple choices
|
|
L5 = [l for l in codes if len(l)==5] # 2 or 3 or 5
|
|
L6 = [l for l in codes if len(l)==6] # 0 or 6 or 9
|
|
# only 9 contains a 4 (and a 3)
|
|
D[9] = [l for l in L6 if (set(l)&set(D[4]))==set(D[4])][0]
|
|
# 0 contains a 7 and a 1 is not a 9
|
|
D[0] = [l for l in L6 if (set(l)&set(D[7]))==set(D[7]) and l != D[9]][0]
|
|
# 6 is not a 9 nor a 0
|
|
D[6] = [l for l in L6 if l != D[0] and l != D[9]][0]
|
|
# only 3 contains a 7
|
|
D[3] = [l for l in L5 if len(set(l)&set(D[7]))==3][0]
|
|
# 5 has only on difference with 6, 2 has 3
|
|
D[5] = [l for l in L5 if len(set(l)^set(D[6]))==1][0]
|
|
# 2 is not a 5 nor a 3
|
|
D[2] = [l for l in L5 if l != D[5] and l != D[3]][0]
|
|
# decode using inverted dictionary
|
|
E = {"".join(sorted(v)):k for (k,v) in D.items()}
|
|
S += int("".join(str(E["".join(sorted(i))]) for i in num.split(" ")[1:]))
|
|
print(S)
|