Day 01

# puzzle prompt: https://adventofcode.com/2024/day/1

import sys
import time

sys.path.insert(0, "..")

from base.advent import *


class Solution(InputAsLinesSolution):
    _year = 2024
    _day = 1

    _is_debugging = False

    def GetArrays(self, input):
        column1, column2 = [], []

        for line in input:
            ids = line.split("   ")
            column1 += [int(ids[0])]
            column2 += [int(ids[1])]

        column1.sort()
        column2.sort()

        return column1, column2

    def GetDistance(self, input):
        column1, column2 = self.GetArrays(input)

        distance = 0

        for i in range(len(column1)):
            distance += abs(column1[i] - column2[i])

        return distance

    def GetSimilarity(self, input):
        column1, column2 = self.GetArrays(input)

        similarity = 0

        for i in range(len(column1)):
            similarity += column1[i] * sum(id == column1[i] for id in column2)

        return similarity

    def pt1(self, input):
        self.debug(input)

        return self.GetDistance(input)

    def pt2(self, input):
        self.debug(input)

        return self.GetSimilarity(input)

    def part_1(self):
        start_time = time.time()

        res = self.pt1(self.input)

        end_time = time.time()

        self.solve("1", res, (end_time - start_time))

    def part_2(self):
        start_time = time.time()

        res = self.pt2(self.input)

        end_time = time.time()

        self.solve("2", res, (end_time - start_time))


if __name__ == "__main__":
    solution = Solution()

    solution.part_1()

    solution.part_2()