from aocd import get_data from aocd import submit input_data = get_data(day=3, year=2021) test_data = """00100 11110 10110 10111 10101 01111 00111 11100 10000 11001 00010 01010""" c02 = input_data.split("\n") # c02 = test_data.split("\n") line_len = len(c02[0]) oxygen = c02.copy() c02 = c02.copy() for i in range(line_len): if len(oxygen) == 1: print("only 1 left") break #get count for this column counts_ones = 0 counts_zeroes = 0 for line in oxygen: line = list(line) bit = line[i] if bit == "1": counts_ones += 1 elif bit == "0": counts_zeroes += 1 print("Zeros:" + str(counts_zeroes) + "Ones:" + str(counts_ones)) if counts_ones >= counts_zeroes: for index, line in reversed(list(enumerate(oxygen))): # print(line) if line[i] == "0": print("drop zeros in col " + str(i)+ ":" + ''.join(str(i) for i in line)) oxygen.remove(line) elif counts_ones < counts_zeroes: for index, line in reversed(list(enumerate(oxygen))): if line[i] == "1": print("drop ones in col" + str(i)+ ":" + ''.join(str(i) for i in line)) oxygen.remove(line) print("remaining oxygen") print(oxygen) print(oxygen) ###CO2 for i in range(line_len): if len(c02) == 1: print("only 1 left") break #get count for this column counts_ones = 0 counts_zeroes = 0 for line in c02: line = list(line) bit = line[i] if bit == "1": counts_ones += 1 elif bit == "0": counts_zeroes += 1 print("Zeros:" + str(counts_zeroes) + "Ones:" + str(counts_ones)) if counts_ones < counts_zeroes: for index, line in reversed(list(enumerate(c02))): # print(line) if line[i] == "0": print("drop zeros in col " + str(i)+ ":" + ''.join(str(i) for i in line)) c02.remove(line) elif counts_ones >= counts_zeroes: for index, line in reversed(list(enumerate(c02))): if line[i] == "1": print("drop ones in col" + str(i)+ ":" + ''.join(str(i) for i in line)) c02.remove(line) print("remaining c02") print(c02) print(c02) # print(epsilon) c02 = ''.join(str(i) for i in c02) oxygen = ''.join(str(i) for i in oxygen) print(str(int(c02, 2))) print(str(int(oxygen, 2))) powerconsumption = int(c02, 2) * int(oxygen, 2) print(powerconsumption) submit(powerconsumption)