/ Python / 2021 / 03.py
03.py
 1  from lib import *
 2  
 3  input = read_input(2021, 3)
 4  
 5  
 6  a = ""
 7  b = ""
 8  for x in transpose(input.splitlines()):
 9      a += most_common(x, "01")
10      b += least_common(x, "01")
11  
12  print(int(a, 2) * int(b, 2))
13  
14  
15  def find(x):
16      out = {*input.splitlines()}
17  
18      for i in range(len(input.splitlines()[0])):
19          digits = transpose(out)[i]
20  
21          mx = [least_common, most_common][x](digits, f"{x}{1-x}")
22  
23          out = {n for n in out if n[i] == mx}
24  
25          if len(out) == 1:
26              return int(next(iter(out)), 2)
27  
28  
29  print(find(0) * find(1))