18 lines
607 B
Plaintext
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
|