]> git.friedersdorff.com Git - max/advent_of_code_2021.git/blob - 3_2.py
Try day 14
[max/advent_of_code_2021.git] / 3_2.py
1 """Life support rating"""
2
3 def most_common(digits):
4     ones = 0
5     for d in digits:
6         if d == '1':
7             ones += 1
8
9     if ones >= len(digits)/2:
10         return 1
11     else:
12         return 0
13
14
15 def least_common(digits):
16     ones = 0
17     for d in digits:
18         if d == '1':
19             ones += 1
20
21     if ones >= len(digits)/2:
22         return 0
23     else:
24         return 1
25
26
27 with open("3_1_input.txt") as f:
28     all_lines = [l.strip() for l in f]
29     n_digits = len(all_lines[0])
30
31
32 lines = all_lines
33 to_keep = []
34 for i in range(n_digits):
35     print(len(list(zip(*lines))))
36     digits = list(zip(*lines))[i]
37     mc = str(most_common(digits))
38
39     for line in lines:
40         if line[i] == mc:
41             to_keep.append(line)
42
43     lines = to_keep
44     to_keep = []
45
46     if len(lines) == 1:
47         oxygen = lines[0]
48         print("Oxygen", lines[0])
49         break
50
51 lines = all_lines
52 to_keep = []
53 for i in range(n_digits):
54     digits = list(zip(*lines))[i]
55     lc = str(least_common(digits))
56
57     for line in lines:
58         if line[i] == lc:
59             to_keep.append(line)
60
61     lines = to_keep
62     to_keep = []
63
64     if len(lines) == 1:
65         co2 = lines[0]
66         print("CO2", lines[0])
67         break
68
69
70 oxygen_b10 = int(oxygen, base=2)
71 co2_b10 = int(co2, base=2)
72
73 print(oxygen_b10 * co2_b10)