38 lines
679 B
Rust
Executable File
38 lines
679 B
Rust
Executable File
fn main() {
|
|
let fib_instance = FibItr::default();
|
|
println!("{}",
|
|
fib_instance
|
|
.filter(is_even)
|
|
.take_while(|x| *x < 4000000)
|
|
.sum::<usize>()
|
|
);
|
|
}
|
|
|
|
fn is_even(x: &usize) -> bool {
|
|
x % 2 == 0
|
|
}
|
|
|
|
struct FibItr {
|
|
index: usize,
|
|
prev: usize
|
|
}
|
|
|
|
impl Iterator for FibItr {
|
|
type Item = usize;
|
|
fn next ( &mut self ) -> Option<usize> {
|
|
let result = self.index + self.prev;
|
|
self.prev = self.index;
|
|
self.index = result;
|
|
return Some(result);
|
|
}
|
|
}
|
|
|
|
impl Default for FibItr {
|
|
fn default() -> Self {
|
|
FibItr {
|
|
index: 1,
|
|
prev: 1
|
|
}
|
|
}
|
|
}
|