struct Fibonacci {t: (u64, u64)}
impl Iterator for Fibonacci {
type Item = u64;
fn next(&mut self) -> Option<Self::Item> {
let current = Some(self.t.0);
self.t = (self.t.1, self.t.0 + self.t.1);
current
}
}
fn main() {
let fib = |a, b| Fibonacci {t: (a, b)};
let f = |a, b, c| fib(a, b).take_while(|&x| x <= c).position(|x| x == c);
for c in 1..6 {println!("c: {}, pos: {:?}", c, f(1, 1, c))}
}
c3RydWN0IEZpYm9uYWNjaSB7dDogKHU2NCwgdTY0KX0KaW1wbCBJdGVyYXRvciBmb3IgRmlib25hY2NpIHsKICAgIHR5cGUgSXRlbSA9IHU2NDsKICAgIGZuIG5leHQoJm11dCBzZWxmKSAtPiBPcHRpb248U2VsZjo6SXRlbT4gewogICAgICAgIGxldCBjdXJyZW50ID0gU29tZShzZWxmLnQuMCk7CiAgICAgICAgc2VsZi50ID0gKHNlbGYudC4xLCBzZWxmLnQuMCArIHNlbGYudC4xKTsKICAgICAgICBjdXJyZW50CiAgICB9Cn0KZm4gbWFpbigpIHsKICAgIGxldCBmaWIgPSB8YSwgYnwgRmlib25hY2NpIHt0OiAoYSwgYil9OwogICAgbGV0IGYgPSB8YSwgYiwgY3wgZmliKGEsIGIpLnRha2Vfd2hpbGUofCZ4fCB4IDw9IGMpLnBvc2l0aW9uKHx4fCB4ID09IGMpOwogICAgZm9yIGMgaW4gMS4uNiB7cHJpbnRsbiEoImM6IHt9LCBwb3M6IHs6P30iLCBjLCBmKDEsIDEsIGMpKX0KfQo=