1 """Decode stupid 7 segment displays"""
4 with open("8_input.txt") as f:
8 digits = [set(d) for d in line.split("|")[0].strip().split(" ")]
9 to_decode = [set(d) for d in line.split("|")[1].strip().split(" ")]
10 for digit_letters in digits:
11 if len(digit_letters) == 2:
12 mapping[1] = digit_letters
13 elif len(digit_letters) == 3:
14 mapping[7] = digit_letters
15 elif len(digit_letters) == 4:
16 mapping[4] = digit_letters
17 elif len(digit_letters) == 7:
18 mapping[8] = digit_letters
20 # Identify the 9, it's a strict superset of 4
21 for digit_letters in [d for d in digits if d not in mapping.values()]:
22 if mapping[4] < digit_letters:
23 mapping[9] = digit_letters
25 # Identify the 3, 1 is a subset of 3, which is a subset of 9
26 for digit_letters in [d for d in digits if d not in mapping.values()]:
27 if mapping[1] < digit_letters and digit_letters < mapping[9]:
28 mapping[3] = digit_letters
30 # Identify the 5, it is a strict subset of 9
31 for digit_letters in [d for d in digits if d not in mapping.values()]:
32 if mapping[9] > digit_letters:
33 mapping[5] = digit_letters
35 # Identify the 2, it's the last one with 5 segments
36 for digit_letters in [d for d in digits if d not in mapping.values()]:
37 if len(digit_letters) == 5:
38 mapping[2] = digit_letters
40 # Identify the 6, 5 is a strict subset of it
41 for digit_letters in [d for d in digits if d not in mapping.values()]:
42 if mapping[5] < digit_letters:
43 mapping[6] = digit_letters
46 mapping[0] = digit_letters
49 for digit_to_decode in to_decode:
50 for k, v in mapping.items():
51 if v == digit_to_decode:
52 decoded_digits.append(str(k))
54 decoded_digits = int("".join(decoded_digits))