AOC 2025 Day 1
Section
defmodule Day01 do
@start_position 50
def data(:test) do
~s(L68
L30
R48
L5
R60
L55
L1
L99
R14
L82
)
end
def data(:real) do
File.read!("data.txt")
end
defp prep(data) do
String.trim(data)
|> String.split("\n")
|> Enum.map(&String.split_at(&1, 1))
|> Enum.map(fn {d, tick} ->
{d, String.to_integer(tick)}
end)
end
def part_01(rotations) do
prep(rotations)
|> Enum.reduce(%{position: @start_position, zeroes: 0}, fn {d, tick}, acc ->
new_position =
case d do
"L" -> Integer.mod(acc.position - tick, 100)
"R" -> Integer.mod(acc.position + tick, 100)
end
new_zero = if new_position == 0, do: acc.zeroes + 1, else: acc.zeroes
%{acc | position: new_position, zeroes: new_zero}
end)
end
end
Day01.data(:test)
|> Day01.part_01()