Elixir Tape Equilibrium
defmodule TapeEquilibrium do
def tape_equilibrium(a) do
total = Enum.sum(a)
size = length(a)
{_first, _second, min} =
Enum.reduce(0..(size - 2)//1, {0, total, :infinity}, fn i, {first, second, min} ->
first = first + i
second = second - i
diff = abs(first - second)
min = if min == :infinity or diff < min, do: diff, else: min
{first, second, min}
end)
min
end
end
This keeps left and right running sums and updates the smallest difference at each split point.