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