Day 1 part 1 solution

This commit is contained in:
2025-12-12 23:29:52 -05:00
parent 325cd0b407
commit dbe0615d0e
2 changed files with 4085 additions and 8 deletions

View File

@@ -1,5 +1,3 @@
ops = ["L50", "R50", "R1"]
defmodule Dial do
# Initial conditions
def rotate(operations), do: rotate(50, operations, 0)
@@ -9,18 +7,38 @@ defmodule Dial do
# Compute the new dial position
def rotate(index, [head | tail], zeroes) do
index = case head do
"R" <> number -> index + String.to_integer(number)
"L" <> number -> index - String.to_integer(number)
new_index = case head do
"R" <> number -> rotate_right(index, String.to_integer(number))
"L" <> number -> rotate_left(index, String.to_integer(number))
end
case index do
0 -> rotate(index, tail, zeroes+1)
_ -> rotate(index, tail, zeroes)
case new_index do
0 -> rotate(new_index, tail, zeroes+1)
_ -> 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
ops = File.stream!("./day1.txt")
|> Stream.map(&String.trim_trailing/1)
|> Enum.to_list()
dial = Dial.rotate(ops)
IO.puts dial

4059
2025/day1.txt Normal file

File diff suppressed because it is too large Load Diff