mirror of
https://github.com/rjNemo/ai_advent_code_2024
synced 2026-06-06 02:26:44 +00:00
chore: format and renaming
This commit is contained in:
parent
992008b34c
commit
8a6ea03597
3 changed files with 22 additions and 17 deletions
|
|
@ -4,5 +4,8 @@ defmodule AdventCode2024 do
|
|||
"""
|
||||
|
||||
defdelegate solve_day1(input_file \\ "day1/input.txt"), to: AdventCode2024.Day1, as: :solve
|
||||
defdelegate solve_day1_part2(input_file \\ "day1/input.txt"), to: AdventCode2024.Day1, as: :solve_part2
|
||||
|
||||
defdelegate solve_day1_part2(input_file \\ "day1/input.txt"),
|
||||
to: AdventCode2024.Day1,
|
||||
as: :solve_part2
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,20 +6,24 @@ defmodule AdventCode2024.Day1 do
|
|||
def solve(input_file \\ "day1/input.txt") do
|
||||
case File.read(input_file) do
|
||||
{:ok, content} ->
|
||||
{left_list, right_list} = parse_input(content)
|
||||
result = calculate_total_distance(left_list, right_list)
|
||||
{left, right} = parse_input(content)
|
||||
result = calculate_total_distance(left, right)
|
||||
{:ok, result}
|
||||
{:error, reason} -> {:error, reason}
|
||||
|
||||
{:error, reason} ->
|
||||
{:error, reason}
|
||||
end
|
||||
end
|
||||
|
||||
def solve_part2(input_file \\ "day1/input.txt") do
|
||||
case File.read(input_file) do
|
||||
{:ok, content} ->
|
||||
{left_list, right_list} = parse_input(content)
|
||||
result = calculate_similarity_score(left_list, right_list)
|
||||
{left, right} = parse_input(content)
|
||||
result = calculate_similarity_score(left, right)
|
||||
{:ok, result}
|
||||
{:error, reason} -> {:error, reason}
|
||||
|
||||
{:error, reason} ->
|
||||
{:error, reason}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -28,7 +32,7 @@ defmodule AdventCode2024.Day1 do
|
|||
content
|
||||
|> String.split("\n", trim: true)
|
||||
|> Enum.map(&String.split(&1, ~r/\s+/, trim: true))
|
||||
|> Enum.map(fn [left, right] ->
|
||||
|> Enum.map(fn [left, right] ->
|
||||
{String.to_integer(left), String.to_integer(right)}
|
||||
end)
|
||||
|> Enum.unzip()
|
||||
|
|
@ -36,17 +40,17 @@ defmodule AdventCode2024.Day1 do
|
|||
{left, right}
|
||||
end
|
||||
|
||||
defp calculate_total_distance(left_list, right_list) do
|
||||
Enum.zip(Enum.sort(left_list), Enum.sort(right_list))
|
||||
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
|
||||
|
||||
defp calculate_similarity_score(left_list, right_list) do
|
||||
frequencies = Enum.frequencies(right_list)
|
||||
|
||||
left_list
|
||||
|> Enum.map(fn num ->
|
||||
defp calculate_similarity_score(left, right) do
|
||||
frequencies = Enum.frequencies(right)
|
||||
|
||||
left
|
||||
|> Enum.map(fn num ->
|
||||
num * Map.get(frequencies, num, 0)
|
||||
end)
|
||||
|> Enum.sum()
|
||||
|
|
|
|||
|
|
@ -12,11 +12,9 @@ defmodule AdventCode2024Test do
|
|||
test "handles missing input file" do
|
||||
assert {:error, :enoent} = AdventCode2024.solve_day1("nonexistent.txt")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "Day 1 Part 2: Similarity Score" do
|
||||
|
||||
test "solves day 1 part 2 puzzle with actual input file" do
|
||||
assert {:ok, result} = AdventCode2024.solve_day1_part2()
|
||||
assert is_integer(result)
|
||||
|
|
|
|||
Loading…
Reference in a new issue