def common_digit(list_of_lists: list, position: int, most=True) -> int: digits = [] for ip in list_of_lists: digits.append(int(ip[position])) # print(f"1: {digits.count(1)}, 0: {digits.count(0)}", end="") if not most: return 0 if digits.count(1) >= digits.count(0) else 1 return 1 if digits.count(1) >= digits.count(0) else 0 def main() -> None: with open("aoc3-1.txt", "r") as file: inputs = [el.strip() for el in file.readlines()] digits = [[] for _ in range(len(inputs[0]))] for j, ip in enumerate(inputs): for i, dg in enumerate(ip): dg = dg.strip() if dg != "": digits[i].append(int(dg)) gamma, epsilon = [], [] for el in digits: gamma.append(1 if el.count(1) >= el.count(0) else 0) epsilon.append(0 if el.count(1) >= el.count(0) else 1) gamma_str = "".join([str(el) for el in gamma]) epsilon_str = "".join([str(el) for el in epsilon]) gamma_int = int(gamma_str, 2) epsilon_int = int(epsilon_str, 2) print(f"Gamma: {gamma_str} -- {gamma_int}") print(f"Epsilon: {epsilon_str} -- {epsilon_int}") print(f"Consumption: {gamma_int*epsilon_int}") oxy_inputs = [el for el in inputs] co2_inputs = [el for el in inputs] i = 0 while len(oxy_inputs) > 1: mcd = common_digit(oxy_inputs, i) oxy_inputs = [el for el in oxy_inputs if el[i] == str(mcd)] # print(f", MCD: {mcd}, len: {len(oxy_inputs)}") i += 1 i = 0 while len(co2_inputs) > 1: lcd = common_digit(co2_inputs, i, False) co2_inputs = [el for el in co2_inputs if el[i] == str(lcd)] # print(f", LCD: {lcd}, len: {len(co2_inputs)}") i += 1 oxy_str, co2_str = oxy_inputs[0], co2_inputs[0] oxy_int, co2_int = int(oxy_str, 2), int(co2_str, 2) print(f"Oxygen: {oxy_str} -- {oxy_int}") print(f"CO2: {co2_str} -- {co2_int}") print(f"Life support: {oxy_int*co2_int}") if __name__ == "__main__": main()