57 lines
1.1 KiB
Python
57 lines
1.1 KiB
Python
with open("input.txt") as f:
|
|
og_lines = [i.strip() for i in f.readlines()]
|
|
|
|
lines = og_lines[:]
|
|
|
|
|
|
def count_digits(ar):
|
|
zeros = [0] * len(ar[0])
|
|
ones = [0] * len(ar[0])
|
|
|
|
for row in ar:
|
|
for pos, c in enumerate(row.strip()):
|
|
(zeros if c == "0" else ones)[pos] += 1
|
|
|
|
return zeros, ones
|
|
|
|
|
|
def filter_by_digit(lines, position, value):
|
|
return [i for i in lines if i[position] == value]
|
|
|
|
|
|
# oxy = most common
|
|
# co2 = least common
|
|
|
|
# oxy
|
|
position = 0
|
|
while len(lines) > 1:
|
|
zeros, ones = count_digits(lines)
|
|
zeros, ones = zeros[position], ones[position]
|
|
|
|
print(zeros, ones, "pos", position, "remaining lines", len(lines))
|
|
lines = filter_by_digit(lines, position, "1" if ones >= zeros else "0")
|
|
|
|
position += 1
|
|
|
|
oxy = lines[0]
|
|
|
|
|
|
lines = og_lines[:]
|
|
|
|
# co0
|
|
position = 0
|
|
while len(lines) > 1:
|
|
zeros, ones = count_digits(lines)
|
|
zeros, ones = zeros[position], ones[position]
|
|
|
|
print(zeros, ones, "pos", position, "remaining lines", len(lines))
|
|
lines = filter_by_digit(lines, position, "0" if zeros <= ones else "1")
|
|
|
|
position += 1
|
|
|
|
co2 = lines[0]
|
|
|
|
print(int(oxy, 2) * int(co2, 2))
|
|
|
|
# 29m
|