Erlang Min Avg Two Slice
-module(min_avg_two_slice).
-export([min_avg_two_slice/1]).
min_avg_two_slice(A) ->
N = length(A),
Arr = array:from_list(A),
Init = (array:get(0, Arr) + array:get(1, Arr)) / 2,
{_, Idx} = lists:foldl(fun(I, {MinV, IdxAcc}) ->
Two = (array:get(I, Arr) + array:get(I + 1, Arr)) / 2,
Cur = case I + 2 < N of
true ->
Three = (array:get(I, Arr) + array:get(I + 1, Arr) + array:get(I + 2, Arr)) / 3,
min(Two, Three);
false ->
Two
end,
case Cur < MinV of
true -> {Cur, I};
false -> {MinV, IdxAcc}
end
end, {Init, 0}, lists:seq(0, N - 2)),
Idx.
This leans on the key trick for this problem: the minimum average slice is always length 2 or 3.