Day 1 part 1 solution
This commit is contained in:
34
2025/day1.ex
34
2025/day1.ex
@@ -1,5 +1,3 @@
|
|||||||
ops = ["L50", "R50", "R1"]
|
|
||||||
|
|
||||||
defmodule Dial do
|
defmodule Dial do
|
||||||
# Initial conditions
|
# Initial conditions
|
||||||
def rotate(operations), do: rotate(50, operations, 0)
|
def rotate(operations), do: rotate(50, operations, 0)
|
||||||
@@ -9,18 +7,38 @@ defmodule Dial do
|
|||||||
|
|
||||||
# Compute the new dial position
|
# Compute the new dial position
|
||||||
def rotate(index, [head | tail], zeroes) do
|
def rotate(index, [head | tail], zeroes) do
|
||||||
index = case head do
|
new_index = case head do
|
||||||
"R" <> number -> index + String.to_integer(number)
|
"R" <> number -> rotate_right(index, String.to_integer(number))
|
||||||
"L" <> number -> index - String.to_integer(number)
|
"L" <> number -> rotate_left(index, String.to_integer(number))
|
||||||
end
|
end
|
||||||
|
|
||||||
case index do
|
case new_index do
|
||||||
0 -> rotate(index, tail, zeroes+1)
|
0 -> rotate(new_index, tail, zeroes+1)
|
||||||
_ -> rotate(index, tail, zeroes)
|
_ -> rotate(new_index, tail, zeroes)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp rotate_right(index, number) do
|
||||||
|
diff = index + rem(number, 100)
|
||||||
|
case diff do
|
||||||
|
diff when diff <= 99 -> diff
|
||||||
|
diff when diff > 99 -> diff - 100
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp rotate_left(index, number) do
|
||||||
|
diff = index - rem(number, 100)
|
||||||
|
case diff do
|
||||||
|
diff when diff >= 0 -> diff
|
||||||
|
diff when diff < 0 -> diff + 100
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ops = File.stream!("./day1.txt")
|
||||||
|
|> Stream.map(&String.trim_trailing/1)
|
||||||
|
|> Enum.to_list()
|
||||||
|
|
||||||
dial = Dial.rotate(ops)
|
dial = Dial.rotate(ops)
|
||||||
|
|
||||||
IO.puts dial
|
IO.puts dial
|
||||||
|
|||||||
4059
2025/day1.txt
Normal file
4059
2025/day1.txt
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user