from lib import get_data from lib import ints from collections import defaultdict data = get_data(__file__) def count_one_zero(xs, index): ones, zeros = 0, 0 for x in xs: if x[index] == "1": ones += 1 elif x[index] == "0": zeros += 1 else: assert False return (ones, zeros) a = "" b = "" lines = list(data.strip().splitlines()) for i in range(len(lines[0])): ones, zeros = count_one_zero(lines, i) if ones > zeros: a += "1" b += "0" elif zeros > ones: a += "0" b += "1" else: assert False a, b = int(a, 2), int(b, 2) print(a * b) lines = list(data.strip().splitlines()) for i in range(len(lines[0])): ones, zeros = count_one_zero(lines, i) c = "1" if ones >= zeros else "0" lines = [l for l in lines if l[i] == c] if len(lines) == 1: break (line,) = lines a = int(line, 2) lines = list(data.strip().splitlines()) for i in range(len(lines[0])): ones, zeros = count_one_zero(lines, i) c = "0" if zeros <= ones else "1" lines = [l for l in lines if l[i] == c] if len(lines) == 1: break (line,) = lines b = int(line, 2) print(a * b)