day 1 - part 2 - refactoring
This commit is contained in:
parent
5f492b3f66
commit
eac54767b5
10 changed files with 5 additions and 5 deletions
16
src/aoc_2024/day1/common.py
Normal file
16
src/aoc_2024/day1/common.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
from pathlib import Path
|
||||
|
||||
|
||||
def get_lists(data_file: Path) -> tuple[list[int], list[int]]:
|
||||
list1 = []
|
||||
list2 = []
|
||||
for line in data_file.open():
|
||||
numbers = line.strip().split(" ")
|
||||
list1.append(int(numbers[0]))
|
||||
list2.append(int(numbers[1]))
|
||||
return list1, list2
|
||||
|
||||
|
||||
def get_ordered_lists(data_file: Path) -> tuple[list[int], list[int]]:
|
||||
list1, list2 = get_lists(data_file)
|
||||
return sorted(list1), sorted(list2)
|
1000
src/aoc_2024/day1/input-data
Normal file
1000
src/aoc_2024/day1/input-data
Normal file
File diff suppressed because it is too large
Load diff
19
src/aoc_2024/day1/part1.py
Normal file
19
src/aoc_2024/day1/part1.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
from pathlib import Path
|
||||
|
||||
from aoc_2024.day1.common import get_ordered_lists
|
||||
|
||||
|
||||
def compute_distance(list1, list2) -> int:
|
||||
return sum([abs(item2 - item1) for item1, item2 in zip(list1, list2)])
|
||||
|
||||
|
||||
def main(data_file: Path):
|
||||
list1, list2 = get_ordered_lists(data_file)
|
||||
distance = compute_distance(list1, list2)
|
||||
print(distance)
|
||||
return distance
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
file = Path(__file__).parent / "input-data"
|
||||
main(file)
|
38
src/aoc_2024/day1/part2.py
Normal file
38
src/aoc_2024/day1/part2.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
from pathlib import Path
|
||||
|
||||
from aoc_2024.day1.common import get_ordered_lists
|
||||
|
||||
|
||||
def get_elem_amount(data: list[int]) -> dict[int, int]:
|
||||
data_set = set(data)
|
||||
amount = {}
|
||||
for element in data_set:
|
||||
nb_elem = data.count(element)
|
||||
data.remove(element)
|
||||
amount[element] = nb_elem
|
||||
return amount
|
||||
|
||||
|
||||
def compute_similarity_score(
|
||||
elem_amount1: dict[int, int], elem_amount2: dict[int, int]
|
||||
) -> int:
|
||||
score = 0
|
||||
for k1, v1 in elem_amount1.items():
|
||||
if k1 in elem_amount2.keys():
|
||||
score += k1 * v1 * elem_amount2[k1]
|
||||
return score
|
||||
|
||||
|
||||
def main(data_file: Path):
|
||||
list1, list2 = get_ordered_lists(data_file)
|
||||
elem_amount1 = get_elem_amount(list1)
|
||||
elem_amount2 = get_elem_amount(list2)
|
||||
|
||||
similarity_score = compute_similarity_score(elem_amount1, elem_amount2)
|
||||
print(similarity_score)
|
||||
return similarity_score
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
file = Path(__file__).parent / "input-data"
|
||||
main(file)
|
Loading…
Add table
Add a link
Reference in a new issue