The algorithm is pretty straightforward: to take k largest batteries from a list of n, take the earliest largest digit among the first (n - k + 1), then iterate for all the digits after that one.
defmodule Y2025.Day03 do
def digits(s) do
s
|> String.graphemes()
|> Enum.map(&String.to_integer(&1))
end
def first_digit(digits, k) do
n = length(digits)
digits
|> Enum.take(n - k + 1)
|> Enum.with_index()
|> Enum.max_by(fn {a, i} -> {a, -i} end)
end
def max_digits(digits, k) do
k..1//-1
|> Enum.reduce({digits, 0}, fn k, {digits, acc} ->
{d, pos} = first_digit(digits, k)
{digits |> Enum.drop(pos + 1), acc * 10 + d}
end)
|> elem(1)
end
def max_joltage(s, k \\ 2) do
digits(s)
|> max_digits(k)
end
def part1(s, k \\ 2) do
s
|> String.split("\n")
|> Enum.map(&max_joltage(&1, k))
|> Enum.sum()
end
def part2(s) do
part1(s, 12)
end
end






















