mirror of
https://github.com/rjNemo/ai_advent_code_2024
synced 2026-06-12 13:36:39 +00:00
refactor: Add type specs and simplify calculate_similarity_score function
This commit is contained in:
parent
5a5a16ab1c
commit
5a966b4839
1 changed files with 6 additions and 3 deletions
|
|
@ -3,6 +3,7 @@ defmodule AdventCode2024.Day1 do
|
||||||
Solution for Advent of Code 2024 - Day 1: Historian Hysteria
|
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
|
def solve(input_file \\ "day1/input.txt") do
|
||||||
case File.read(input_file) do
|
case File.read(input_file) do
|
||||||
{:ok, content} ->
|
{:ok, content} ->
|
||||||
|
|
@ -15,6 +16,7 @@ defmodule AdventCode2024.Day1 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec solve_part2(String.t()) :: {:ok, integer()} | {:error, String.t()}
|
||||||
def solve_part2(input_file \\ "day1/input.txt") do
|
def solve_part2(input_file \\ "day1/input.txt") do
|
||||||
case File.read(input_file) do
|
case File.read(input_file) do
|
||||||
{:ok, content} ->
|
{:ok, content} ->
|
||||||
|
|
@ -27,6 +29,7 @@ defmodule AdventCode2024.Day1 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec parse_input(String.t()) :: {[integer()], [integer()]}
|
||||||
defp parse_input(content) do
|
defp parse_input(content) do
|
||||||
{left, right} =
|
{left, right} =
|
||||||
content
|
content
|
||||||
|
|
@ -40,19 +43,19 @@ defmodule AdventCode2024.Day1 do
|
||||||
{left, right}
|
{left, right}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec calculate_total_distance([integer()], [integer()]) :: integer()
|
||||||
defp calculate_total_distance(left, right) do
|
defp calculate_total_distance(left, right) do
|
||||||
Enum.zip(Enum.sort(left), Enum.sort(right))
|
Enum.zip(Enum.sort(left), Enum.sort(right))
|
||||||
|> Enum.map(fn {a, b} -> abs(a - b) end)
|
|> Enum.map(fn {a, b} -> abs(a - b) end)
|
||||||
|> Enum.sum()
|
|> Enum.sum()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec calculate_similarity_score([integer()], [integer()]) :: integer()
|
||||||
defp calculate_similarity_score(left, right) do
|
defp calculate_similarity_score(left, right) do
|
||||||
frequencies = Enum.frequencies(right)
|
frequencies = Enum.frequencies(right)
|
||||||
|
|
||||||
left
|
left
|
||||||
|> Enum.map(fn num ->
|
|> Enum.map(&(&1 * Map.get(frequencies, &1, 0)))
|
||||||
num * Map.get(frequencies, num, 0)
|
|
||||||
end)
|
|
||||||
|> Enum.sum()
|
|> Enum.sum()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue