RosettaCodeData/Task/Equilibrium-index/Elena/equilibrium-index.elena
2020-02-17 23:21:07 -08:00

68 lines
1.1 KiB
Text

import extensions;
import system'routines;
import system'collections;
import extensions'routines;
class EquilibriumEnumerator : Enumerator
{
int left;
int right;
int index;
Enumerator en;
constructor(Enumerator en)
{
this en := en;
self.reset()
}
constructor(Enumerable list)
<= (list.enumerator());
constructor(o)
<= (cast Enumerable(o));
bool next()
{
index += 1;
while(en.next())
{
var element := en.get();
right -= element;
bool found := (left == right);
left += element;
if (found)
{
^ true
};
index += 1
};
^ false
}
reset()
{
en.reset();
left := 0;
right := en.summarize();
index := -1;
en.reset();
}
get() = index;
enumerable() => en;
}
public program()
{
new EquilibriumEnumerator(new int[]::( -7, 1, 5, 2, -4, 3, 0 ))
.forEach:printingLn
}