mirror of
https://github.com/sstent/Advent2021.git
synced 2026-01-27 01:22:12 +00:00
108 lines
2.5 KiB
Python
108 lines
2.5 KiB
Python
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)
|