"""Life support rating""" def most_common(digits): ones = 0 for d in digits: if d == '1': ones += 1 if ones >= len(digits)/2: return 1 else: return 0 def least_common(digits): ones = 0 for d in digits: if d == '1': ones += 1 if ones >= len(digits)/2: return 0 else: return 1 with open("3_1_input.txt") as f: all_lines = [l.strip() for l in f] n_digits = len(all_lines[0]) lines = all_lines to_keep = [] for i in range(n_digits): print(len(list(zip(*lines)))) digits = list(zip(*lines))[i] mc = str(most_common(digits)) for line in lines: if line[i] == mc: to_keep.append(line) lines = to_keep to_keep = [] if len(lines) == 1: oxygen = lines[0] print("Oxygen", lines[0]) break lines = all_lines to_keep = [] for i in range(n_digits): digits = list(zip(*lines))[i] lc = str(least_common(digits)) for line in lines: if line[i] == lc: to_keep.append(line) lines = to_keep to_keep = [] if len(lines) == 1: co2 = lines[0] print("CO2", lines[0]) break oxygen_b10 = int(oxygen, base=2) co2_b10 = int(co2, base=2) print(oxygen_b10 * co2_b10)