An equilibrium index of a sequence is an index into the sequence such that the sum of elements at lower indices is equal to the sum of elements at higher indices.



For example, in a sequence   



A


{\displaystyle A}

:

   




A

0


=
−
7


{\displaystyle A_{0}=-7}


   




A

1


=
1


{\displaystyle A_{1}=1}


   




A

2


=
5


{\displaystyle A_{2}=5}


   




A

3


=
2


{\displaystyle A_{3}=2}


   




A

4


=
−
4


{\displaystyle A_{4}=-4}


   




A

5


=
3


{\displaystyle A_{5}=3}


   




A

6


=
0


{\displaystyle A_{6}=0}


3   is an equilibrium index, because:

   




A

0


+

A

1


+

A

2


=

A

4


+

A

5


+

A

6




{\displaystyle A_{0}+A_{1}+A_{2}=A_{4}+A_{5}+A_{6}}


6   is also an equilibrium index, because:

   




A

0


+

A

1


+

A

2


+

A

3


+

A

4


+

A

5


=
0


{\displaystyle A_{0}+A_{1}+A_{2}+A_{3}+A_{4}+A_{5}=0}


(sum of zero elements is zero)

7   is not an equilibrium index, because it is not a valid index of sequence 



A


{\displaystyle A}

.



Task;
Write a function that, given a sequence, returns its equilibrium indices (if any).

Assume that the sequence may be very long.




/* NetRexx */
options replace format comments java crossref symbols nobinary
 
numeric digits 20
runSample(arg)
return
 
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- @see http://www.geeksforgeeks.org/equilibrium-index-of-an-array/
method equilibriumIndex(sequence) private static
  es = ''
  loop ix = 1 to sequence.words()
    sum = 0
    loop jx = 1 to sequence.words()
      if jx < ix then sum = sum + sequence.word(jx)
      if jx > ix then sum = sum - sequence.word(jx)
      end jx
      if sum = 0 then es = es ix
    end ix
  return es
 
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
method runSample(arg) private static
  -- Note: A Rexx object based list of "words" starts at index 1
  sequences = [ -
    '-7  1  5  2 -4  3  0', -  -- 4 7
    ' 2  4  6'            , -  -- (no equilibrium point)
    ' 0  2  4  0  6  0'   , -  -- 4
    ' 2  9  2'            , -  -- 2
    ' 1 -1  1 -1  1 -1  1'  -  -- 1 2 3 4 5 6 7
    ]
  loop sequence over sequences
    say 'For sequence "'sequence.space(1, ',')'" the equilibrium indices are: \-'
    say '"'equilibriumIndex(sequence).space(1, ',')'"'
    end sequence
  return
 
 