1 ! Copyright (c) 2012 Anonymous
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel math.statistics math.vectors sequences ;
4 IN: rosetta-code.equilibrium-index
6 ! http://rosettacode.org/wiki/Equilibrium_index
8 ! An equilibrium index of a sequence is an index into the
9 ! sequence such that the sum of elements at lower indices is
10 ! equal to the sum of elements at higher indices. For example,
20 ! 3 is an equilibrium index, because:
21 ! A0 + A1 + A2 = A4 + A5 + A6
23 ! 6 is also an equilibrium index, because:
24 ! A0 + A1 + A2 + A3 + A4 + A5 = 0
25 ! (sum of zero elements is zero)
27 ! 7 is not an equilibrium index, because it is not a valid index
30 ! Write a function that, given a sequence, returns its
31 ! equilibrium indices (if any). Assume that the sequence may be
34 : equilibrium-indices ( seq -- indices )
35 [ cum-sum0 ] [ <reversed> cum-sum0 <reversed> ] bi