Formatted
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user