]> git.friedersdorff.com Git - max/advent_of_code_2021.git/blob - 8_2.py
Try day 14
[max/advent_of_code_2021.git] / 8_2.py
1 """Decode stupid 7 segment displays"""
2
3 s = 0
4 with open("8_input.txt") as f:
5     for line in f:
6         mapping = {}
7
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
19
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
24
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
29
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
34
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
39
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
44             else:
45                 # Only 0 remains
46                 mapping[0] = digit_letters
47
48         decoded_digits = []
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))
53
54         decoded_digits = int("".join(decoded_digits))
55         print(decoded_digits)
56         s += decoded_digits
57
58 print(s)