Equilibrium index: Difference between revisions

→‎{{header|Picat}}: Moved into subsections, added {{out}}
(→‎{{header|Picat}}: Moved into subsections, added {{out}})
Line 2,100:
=={{header|Picat}}==
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 =>
As = [
Line 2,131 ⟶ 2,156:
println(r2=R2),
 
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]
all2 = [4,7]
Line 2,186 ⟶ 2,187:
CPU time 0.019 seconds.
 
r2 = [115,372,4082,4254,4258,4261]</pre>
</pre>
 
=={{header|PicoLisp}}==
495

edits