Equilibrium index: Difference between revisions

Content added Content deleted
(→‎{{header|Picat}}: Moved into subsections, added {{out}})
Line 2,100: Line 2,100:
=={{header|Picat}}==
=={{header|Picat}}==
Note: Picat is 1-based.
Note: Picat is 1-based.

===Prolog-style===
{{trans|Prolog}}
<lang Picat>equilibrium_index1(A, Ix) =>
append(Front, [_|Back], A),
sum(Front) = sum(Back),
Ix = length(Front)+1. % give 1 based index</lang>

===Loop approach===
{{trans|Java}}
<lang Picat>equilibrium_index2(A, Ix) =>
Len = A.length,
Ix1 = [],
TotalSum = sum(A),
RunningSum = 0,
foreach(I in 1..Len)
AI = A[I],
if TotalSum - RunningSum - AI == RunningSum then
Ix1 := Ix1 ++ [I]
end,
RunningSum := RunningSum + AI
end,
Ix = Ix1.</lang>

Test the approaches.
<lang Picat>go =>
<lang Picat>go =>
As = [
As = [
Line 2,131: Line 2,156:
println(r2=R2),
println(r2=R2),


nl.
nl.</lang>
% Inspired by the Prolog solution
equilibrium_index1(A, Ix) =>
append(Front, [_|Back], A),
sum(Front) = sum(Back),
Ix = length(Front)+1. % give 1 based index

% From the Java solution
equilibrium_index2(A, Ix) =>
Len = A.length,
Ix1 = [],
TotalSum = sum(A),
RunningSum = 0,
foreach(I in 1..Len)
AI = A[I],
if TotalSum - RunningSum - AI == RunningSum then
Ix1 := Ix1 ++ [I]
end,
RunningSum := RunningSum + AI
end,
Ix = Ix1.

</lang>


{{out}}
Output:
<pre>a = [-7,1,5,2,-4,3,0]
<pre>
a = [-7,1,5,2,-4,3,0]
all1 = [4,7]
all1 = [4,7]
all2 = [4,7]
all2 = [4,7]
Line 2,186: Line 2,187:
CPU time 0.019 seconds.
CPU time 0.019 seconds.


r2 = [115,372,4082,4254,4258,4261]
r2 = [115,372,4082,4254,4258,4261]</pre>
</pre>


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==