57 lines
1.2 KiB
Python
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)
|