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.