Elixir Array Change
defmodule ArrayChange do
  def array_change(a) when length(a) < 2, do: 0

  def array_change(a) do
    {_final, total} =
      Enum.reduce(0..(length(a) - 2), {a, 0}, fn k, {arr, total} ->
        cur = Enum.at(arr, k)
        nxt = Enum.at(arr, k + 1)

        if cur >= nxt do
          diff = cur - nxt + 1
          {List.update_at(arr, k + 1, &(&1 + diff)), total + diff}
        else
          {arr, total}
        end
      end)

    total
  end
end

This moves left to right and bumps values only when needed so the array becomes strictly increasing.