euler/rust/src/euler/problem_002.rs

39 lines
687 B
Rust

struct Fibonacci {
curr: u32,
next: u32,
}
impl Iterator for Fibonacci {
type Item = u32;
fn next(&mut self) -> Option<u32> {
let new = self.curr + self.next;
self.curr = self.next;
self.next = new;
Some(self.curr)
}
}
fn fibonacci() -> Fibonacci {
Fibonacci { curr: 1, next: 1 }
}
fn fibonacci_sum_up_to(number: u32) -> u32 {
return fibonacci().take_while(|n| n < &number).filter(|n| n % 2 == 0).sum();
}
fn solution() -> u32 {
return fibonacci_sum_up_to(4000000);
}
#[cfg(test)]
mod tests {
use euler::problem_002::solution;
#[test]
fn problem_002() {
assert_eq!(solution(), 4613732);
}
}