Formatted

This commit is contained in:
2025-12-13 15:44:10 -05:00
parent d34cf3575c
commit 42f56993f1
3 changed files with 21 additions and 17 deletions

View File

@@ -1,8 +1,9 @@
filepath = Path.join([File.cwd!, "lib", "year_2025", "day1_input.txt"]) filepath = Path.join([File.cwd!(), "lib", "year_2025", "day1_input.txt"])
ops = File.stream!(filepath)
|>Stream.map(&String.trim_trailing/1) ops =
|>Enum.to_list File.stream!(filepath)
|> Stream.map(&String.trim_trailing/1)
|> Enum.to_list()
{_, zeroes} = AdventOfCode.Year2025.Dial.rotate(ops) {_, zeroes} = AdventOfCode.Year2025.Dial.rotate(ops)
IO.puts(zeroes) IO.puts(zeroes)

View File

@@ -3,17 +3,18 @@ defmodule AdventOfCode.Year2025.Dial do
def rotate(operations), do: rotate(50, operations, 0) def rotate(operations), do: rotate(50, operations, 0)
# When no operations remain, return the number of zeroes # When no operations remain, return the number of zeroes
def rotate(index, [], zeroes), do: { index, zeroes } def rotate(index, [], zeroes), do: {index, zeroes}
# Compute the new dial position # Compute the new dial position
def rotate(index, [head | tail], zeroes) do def rotate(index, [head | tail], zeroes) do
{ new_index, _crosses } = case head do {new_index, _crosses} =
"R" <> number -> rotate_right(index, String.to_integer(number)) case head do
"L" <> number -> rotate_left(index, String.to_integer(number)) "R" <> number -> rotate_right(index, String.to_integer(number))
end "L" <> number -> rotate_left(index, String.to_integer(number))
end
case new_index do case new_index do
0 -> rotate(new_index, tail, zeroes+1) 0 -> rotate(new_index, tail, zeroes + 1)
_ -> rotate(new_index, tail, zeroes) _ -> rotate(new_index, tail, zeroes)
end end
end end
@@ -21,18 +22,20 @@ defmodule AdventOfCode.Year2025.Dial do
defp rotate_right(index, number) do defp rotate_right(index, number) do
crosses = div(number, 100) crosses = div(number, 100)
diff = index + rem(number, 100) diff = index + rem(number, 100)
case diff do case diff do
diff when diff <= 99 -> { diff, crosses } diff when diff <= 99 -> {diff, crosses}
diff when diff > 99 -> { diff - 100, crosses + 1 } diff when diff > 99 -> {diff - 100, crosses + 1}
end end
end end
defp rotate_left(index, number) do defp rotate_left(index, number) do
crosses = div(number, 100) crosses = div(number, 100)
diff = index - rem(number, 100) diff = index - rem(number, 100)
case diff do case diff do
diff when diff >= 0 -> { diff, crosses } diff when diff >= 0 -> {diff, crosses}
diff when diff < 0 -> { diff + 100, crosses + 1 } diff when diff < 0 -> {diff + 100, crosses + 1}
end end
end end
end end

View File

@@ -4,7 +4,7 @@ defmodule AdventOfCode.Year2025.DialTest do
import AdventOfCode.Year2025.Dial import AdventOfCode.Year2025.Dial
test "dial starts at 50" do test "dial starts at 50" do
{ index, _ } = rotate([]) {index, _} = rotate([])
assert index == 50 assert index == 50
end end
@@ -15,7 +15,7 @@ defmodule AdventOfCode.Year2025.DialTest do
test "rotate left decrements index" do test "rotate left decrements index" do
{index, _} = rotate(["L1"]) {index, _} = rotate(["L1"])
assert index ==49 assert index == 49
end end
test "increments zero crossings when landing on zero" do test "increments zero crossings when landing on zero" do