You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.7 KiB

## iterators
### Instructions
Create a method `new` that takes one number `usize` and initializes the `Number` struct.
This method will have to determinate if the given number is even or odd.
After that you will implement an iterator for the struct `Number` that returns a tuple (usize,usize,usize) containing each field of the struct Number.
The first position of the tuple will have the even numbers, the second will have the odd numbers, and the third will have the factorial numbers.
That being said, You will have to follow this rules:
- If the number is even you will have to calculate the factorial of the next odd number.
- If the number is odd you will have to calculate the factorial of the next even number.
- The tupple has to return all the numbers in the right positions.
Example:
If `a = 5`, 5 is odd, the next even is 6, so the factorial of 6 is 720. Your program will return the following:
```console
Some((6, 5, 720))
```
### Notions
- [Trait Iterator](https://doc.rust-lang.org/std/iter/trait.Iterator.html)
### Expected functions
```rust
impl Number {
pub fn new(nbr: usize) -> Number {
}
}
impl Iterator for Number {
pub fn next(&mut self) -> Option<Self::Item> {}
}
```
### Usage
Here is a program to test your function.
```rust
use iterators::*;
struct Number {
even: usize,
odd: usize,
fact: usize,
}
fn main() {
let mut a = Number::new(4);
println!("{:?}", a.next());
println!("{:?}", a.next());
println!("{:?}", a.next());
println!("{:?}", b.next());
println!("{:?}", b.next());
}
```
And its output:
```console
$ cargo run
Some((6, 5, 720))
Some((6, 7, 5040))
Some((8, 7, 40320))
Some((8, 9, 362880))
Some((10, 9, 3628800))
$
```