From 5a966b48393088a706f1e86101383405bc44f18d Mon Sep 17 00:00:00 2001 From: Ruidy Date: Sun, 1 Dec 2024 17:59:45 +0100 Subject: [PATCH] refactor: Add type specs and simplify calculate_similarity_score function --- lib/advent_code2024/day1.ex | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/advent_code2024/day1.ex b/lib/advent_code2024/day1.ex index 9e2bb0e..2693d0f 100644 --- a/lib/advent_code2024/day1.ex +++ b/lib/advent_code2024/day1.ex @@ -3,6 +3,7 @@ defmodule AdventCode2024.Day1 do Solution for Advent of Code 2024 - Day 1: Historian Hysteria """ + @spec solve(String.t()) :: {:ok, integer()} | {:error, String.t()} def solve(input_file \\ "day1/input.txt") do case File.read(input_file) do {:ok, content} -> @@ -15,6 +16,7 @@ defmodule AdventCode2024.Day1 do end end + @spec solve_part2(String.t()) :: {:ok, integer()} | {:error, String.t()} def solve_part2(input_file \\ "day1/input.txt") do case File.read(input_file) do {:ok, content} -> @@ -27,6 +29,7 @@ defmodule AdventCode2024.Day1 do end end + @spec parse_input(String.t()) :: {[integer()], [integer()]} defp parse_input(content) do {left, right} = content @@ -40,19 +43,19 @@ defmodule AdventCode2024.Day1 do {left, right} end + @spec calculate_total_distance([integer()], [integer()]) :: integer() defp calculate_total_distance(left, right) do Enum.zip(Enum.sort(left), Enum.sort(right)) |> Enum.map(fn {a, b} -> abs(a - b) end) |> Enum.sum() end + @spec calculate_similarity_score([integer()], [integer()]) :: integer() defp calculate_similarity_score(left, right) do frequencies = Enum.frequencies(right) left - |> Enum.map(fn num -> - num * Map.get(frequencies, num, 0) - end) + |> Enum.map(&(&1 * Map.get(frequencies, &1, 0))) |> Enum.sum() end end