add day 4

This commit is contained in:
Moritz Böhme 2022-12-04 08:15:01 +01:00
parent 3d1bdfdf30
commit 1e78948bf8
Signed by: moritz
GPG key ID: 970C6E89EB0547A9
3 changed files with 1052 additions and 0 deletions

View file

@ -0,0 +1,6 @@
2-4,6-8
2-3,4-5
5-7,7-9
2-8,3-7
6-6,4-6
2-6,4-8

1000
2022/src/day4/input.txt Normal file

File diff suppressed because it is too large Load diff

46
2022/src/day4/solution.py Normal file
View file

@ -0,0 +1,46 @@
def get_sections_boundaries(sections: str) -> tuple[int, int]:
split = sections.split("-")
return int(split[0]), int(split[1])
def parse_input(lines: list[str]) -> list[tuple[tuple[int, int], tuple[int, int]]]:
output = []
for line in lines:
stripped = line.strip()
if not stripped.isspace():
split = stripped.split(",")
output.append(
(get_sections_boundaries(split[0]), get_sections_boundaries(split[1]))
)
return output
def contained(sections1: tuple[int, int], sections2: tuple[int, int]) -> bool:
section1_contains_section2 = (
sections1[0] <= sections2[0] and sections1[1] >= sections2[1]
)
section2_contains_section1 = (
sections2[0] <= sections1[0] and sections2[1] >= sections1[1]
)
return section1_contains_section2 or section2_contains_section1
def overlaps(sections1: tuple[int, int], sections2: tuple[int, int]) -> bool:
sections1_overlaps_section2 = sections2[0] <= sections1[1] <= sections2[1]
sections2_overlaps_section1 = sections1[0] <= sections2[1] <= sections1[1]
return sections1_overlaps_section2 or sections2_overlaps_section1
def part1(lines: list[str]) -> int:
return sum(contained(*sections) for sections in parse_input(lines))
def part2(lines: list[str]) -> int:
return sum(overlaps(*sections) for sections in parse_input(lines))
if __name__ == "__main__":
with open("input.txt") as file:
contents = file.readlines()
print(f"Solution for part 1 is: {part1(contents)}")
print(f"Solution for part 2 is: {part2(contents)}")