Files
aocpy/2021/d3.py
2024-10-20 20:48:27 -04:00

57 lines
1.2 KiB
Python

from lib import get_data
from lib import ints
from collections import defaultdict
data = get_data(__file__)
def count_one_zero(xs, index):
ones, zeros = 0, 0
for x in xs:
if x[index] == "1":
ones += 1
elif x[index] == "0":
zeros += 1
else:
assert False
return (ones, zeros)
a = ""
b = ""
lines = list(data.strip().splitlines())
for i in range(len(lines[0])):
ones, zeros = count_one_zero(lines, i)
if ones > zeros:
a += "1"
b += "0"
elif zeros > ones:
a += "0"
b += "1"
else:
assert False
a, b = int(a, 2), int(b, 2)
print(a * b)
lines = list(data.strip().splitlines())
for i in range(len(lines[0])):
ones, zeros = count_one_zero(lines, i)
c = "1" if ones >= zeros else "0"
lines = [l for l in lines if l[i] == c]
if len(lines) == 1:
break
(line,) = lines
a = int(line, 2)
lines = list(data.strip().splitlines())
for i in range(len(lines[0])):
ones, zeros = count_one_zero(lines, i)
c = "0" if zeros <= ones else "1"
lines = [l for l in lines if l[i] == c]
if len(lines) == 1:
break
(line,) = lines
b = int(line, 2)
print(a * b)