Equilibrium index: Difference between revisions

Added solution for Action!
(added ReScript)
(Added solution for Action!)
Line 58:
NEXT x = COND #( WHEN y = ( total_sum - y - z ) THEN VALUE y_i( BASE x ( i - 1 ) ) ELSE x )
y = y + z ) ).</lang>
 
=={{header|Action!}}==
<lang Action!>PROC PrintArray(INT ARRAY a INT size)
INT i
 
Put('[)
FOR i=0 TO size-1
DO
IF i>0 THEN Put(' ) FI
PrintI(a(i))
OD
Put(']) PutE()
RETURN
 
INT FUNC SumRange(INT ARRAY a INT first,last)
INT sum
INT i
 
sum=0
FOR i=first TO last
DO
sum==+a(i)
OD
RETURN(sum)
 
PROC EquilibriumIndices(INT ARRAY a INT size
INT ARRAY indices INT POINTER indSize)
INT i,left,right
 
indSize^=0
FOR i=0 TO size-1
DO
left=SumRange(a,0,i-1)
right=SumRange(a,i+1,size-1)
IF left=right THEN
indices(indSize^)=i
indSize^==+1
FI
OD
RETURN
 
PROC Test(INT ARRAY a INT size)
INT ARRAY indices(100)
INT indSize
 
EquilibriumIndices(a,size,indices,@indSize)
Print("Array=") PrintArray(a,size)
Print("Equilibrium indices=") PrintArray(indices,indSize)
PutE()
RETURN
 
PROC Main()
INT ARRAY a=[65529 1 5 2 65532 3 0]
INT ARRAY b=[65535 1 65535 1 65535 1 65535]
INT ARRAY c=[1 2 3 4 5 6 7 8 9]
INT ARRAY d=[0]
 
Test(a,7)
Test(b,7)
Test(c,9)
Test(d,1)
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Equilibrium_index.png Screenshot from Atari 8-bit computer]
<pre>
Array=[-7 1 5 2 -4 3 0]
Equilibrium indices=[3 6]
 
Array=[-1 1 -1 1 -1 1 -1]
Equilibrium indices=[0 1 2 3 4 5 6]
 
Array=[1 2 3 4 5 6 7 8 9]
Equilibrium indices=[]
 
Array=[0]
Equilibrium indices=[0]
</pre>
 
=={{header|Ada}}==
Anonymous user