RosettaCodeData/Task/Greatest-subsequential-sum/Elixir/greatest-subsequential-sum-...

18 lines
607 B
Plaintext

defmodule Greatest do
def subseq_sum(list) do
list_i = Enum.with_index(list)
acc = {0, 0, length(list), 0, 0}
{_,max,first,last,_} = Enum.reduce(list_i, acc, fn {elm,i},{curr,max,first,last,curr_first} ->
if curr < 0 do
if elm > max, do: {elm, elm, i, i, curr_first},
else: {elm, max, first, last, curr_first}
else
cur2 = curr + elm
if cur2 > max, do: {cur2, cur2, curr_first, i, curr_first},
else: {cur2, max, first, last, curr_first}
end
end)
{max, Enum.slice(list, first..last)}
end
end