feat: day 1 completed

This commit is contained in:
2024-12-01 13:24:01 +01:00
commit b318e1cdfd
9 changed files with 1124 additions and 0 deletions

3
day_1/README.md Normal file
View File

@@ -0,0 +1,3 @@
# --- Day 1: Historian Hysteria ---
See: https://adventofcode.com/2024/day/1

6
day_1/example.txt Normal file
View File

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

1000
day_1/input.txt Normal file

File diff suppressed because it is too large Load Diff

49
day_1/main.py Normal file
View File

@@ -0,0 +1,49 @@
import bisect
from collections import Counter
from typing import Generator, TextIO, Tuple
def read_input(f: TextIO) -> Generator[Tuple[int, int], None, None]:
for line in f:
x, y = line.strip().split()
yield (int(x), int(y))
def total_distance() -> int:
left = []
right = []
total_distance = 0
with open("input.txt", "r") as f:
for x, y in read_input(f):
bisect.insort(left, x)
bisect.insort(right, y)
for x, y in zip(left, right):
total_distance += abs(x - y)
return total_distance
def similarity_score() -> int:
left = []
right = []
similarity_score = 0
with open("input.txt", "r") as f:
for x, y in read_input(f):
left.append(x)
right.append(y)
frequencies = Counter(right)
for x in left:
similarity_score += x * frequencies[x]
return similarity_score
if __name__ == "__main__":
print(f"total_distance = {total_distance()}")
print(f"similarity_score = {similarity_score()}")