68 lines
1.1 KiB
Text
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
|
|
}
|