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))