advent_of_code_2022/day4/main.py
2022-12-04 12:12:06 +01:00

41 lines
1 KiB
Python

from typing import Callable, Iterable
from common.file import read_data
test_dataset = [
"2-4,6-8",
"2-3,4-5",
"5-7,7-9",
"2-8,3-7",
"6-6,4-6",
"2-6,4-8",
]
def find_overlapping_assignments_1(data: list[str]) -> int:
return sum(process(line, all) for line in data)
def find_overlapping_assignments_2(data: list[str]) -> int:
return sum(process(line, any) for line in data)
def process(line: str, func: Callable[[Iterable], bool]) -> int:
a, b = line.strip().split(",")
start_a, end_a = [int(x) for x in a.split("-")]
int_a = range(start_a, end_a + 1)
start_b, end_b = [int(x) for x in b.split("-")]
int_b = range(start_b, end_b + 1)
return int(func(x in int_b for x in int_a) or func(x in int_a for x in int_b))
if __name__ == "__main__":
dataset = read_data()
res = find_overlapping_assignments_1(dataset)
assert res == 2, f"{res} is not the right value"
res = find_overlapping_assignments_2(dataset)
assert res == 4, f"{res} is not the right value"