29 lines
669 B
Text
29 lines
669 B
Text
local fmt = require "fmt"
|
|
|
|
local function equilibrium(a)
|
|
local len = #a
|
|
local equi = {}
|
|
if len == 0 then return equi end -- sequence has no indices at all
|
|
local rsum = a:reduce(|acc, x| -> acc + x)
|
|
local lsum = 0
|
|
for i = 1, len do
|
|
rsum -= a[i]
|
|
if rsum == lsum then equi:insert(i) end
|
|
lsum += a[i]
|
|
end
|
|
return equi
|
|
end
|
|
|
|
local tests = {
|
|
{-7, 1, 5, 2, -4, 3, 0},
|
|
{2, 4, 6},
|
|
{2, 9, 2},
|
|
{1, -1, 1, -1, 1, -1, 1},
|
|
{1},
|
|
{}
|
|
}
|
|
|
|
print("The equilibrium indices for the following sequences are:\n")
|
|
for tests as test do
|
|
fmt.print("%24s -> %s", fmt.swrite(test), fmt.swrite(equilibrium(test)))
|
|
end
|