aboutsummaryrefslogtreecommitdiff
path: root/2021/03/puzzle-2.py
blob: c5ae8944976c3c14f3d462e5198228628699ab91 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python3

from copy import deepcopy
from typing import Callable


def solve(lines: list[str], comp: Callable[[int, int], bool]) -> int:
	while True:
		for i in range(len(lines[0])):
			if len(lines) == 1:
				return int(lines[0], 2)

			ones = len([line for line in lines if line[i] == "1"])
			zeros = len([line for line in lines if line[i] == "0"])

			if comp(zeros, ones):
				lines = [line for line in lines if line[i] == "0"]
			else:
				lines = [line for line in lines if line[i] == "1"]


def main() -> None:
	with open("input", "r", encoding="utf-8") as f:
		data = [l.strip() for l in f.readlines()]

	print(solve(deepcopy(data), lambda x, y: x > y) * solve(data, lambda x, y: x <= y))


if __name__ == "__main__":
	main()