diff --git a/.gitignore b/.gitignore index 9339f48..31253a6 100644 --- a/.gitignore +++ b/.gitignore @@ -129,3 +129,5 @@ dmypy.json .pyre/ input_day*.txt y_2022/secret_backup.py +_old_y*/* +gpt.txt diff --git a/y_2024/day1.py b/y_2024/day1.py new file mode 100644 index 0000000..7208430 --- /dev/null +++ b/y_2024/day1.py @@ -0,0 +1,40 @@ +from collections import Counter +from typing import Optional + +from pydantic.dataclasses import dataclass + +from common.aoc import AoCDay + + +@dataclass +class Row: + original: str + processed: Optional[list] = None + + def __post_init__(self) -> None: + self.processed = self.original.split() + + +class Day(AoCDay): + def __init__(self, test=0): + super().__init__(__name__, test) + + def _preprocess_input(self): + # self.__input_data = [[int(i) for i in chunk] for chunk in self._input_data] + # print(f"{self._input_data=}") + parsed_input = [Row(i) for i in self._input_data[0]] + self.__first_list = [int(i.processed[0]) for i in parsed_input] + self.__second_list = [int(i.processed[1]) for i in parsed_input] + + def _calculate_1(self): + result = 0 + for x, y in zip(sorted(self.__first_list), sorted(self.__second_list)): + result += abs(y - x) + return result + + def _calculate_2(self): + result = 0 + c = Counter(self.__second_list) + for x in self.__first_list: + result += x * c.get(x, 0) + return result