Erlang Array Change
-module(array_change).
-export([array_change/1]).
array_change([H | T]) ->
{_, Total} = lists:foldl(fun(X, {Prev, Acc}) ->
case X =< Prev of
true ->
New = Prev + 1,
{New, Acc + (New - X)};
false ->
{X, Acc}
end
end, {H, 0}, T),
Total.
This moves left to right and bumps values only when needed so the array becomes strictly increasing.