|
|
|
/*
|
|
|
|
## logic_number
|
|
|
|
|
|
|
|
### Instructions
|
|
|
|
|
|
|
|
In this exercise it will be given an example of a sequence of numbers, your purpose is to
|
|
|
|
determinate if the sequence returns true or false.
|
|
|
|
For this you have to create a function `number_logic` that will take a number `u32` and return true
|
|
|
|
if the number is the sum of its own digits, each raised to the power of the number of digits,
|
|
|
|
and false otherwise.
|
|
|
|
|
|
|
|
### Example:
|
|
|
|
|
|
|
|
9 returns true, because 9 = 9^1 = 9
|
|
|
|
10 returns false, because 10 != 1^2 + 0^2 = 1
|
|
|
|
153 returns true, because: 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
|
|
|
|
154 returns false, because: 154 != 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190
|
|
|
|
*/
|
|
|
|
use logic_number::*;
|
|
|
|
fn main() {
|
|
|
|
let array = [9, 10, 153, 154];
|
|
|
|
for pat in &array {
|
|
|
|
if number_logic(*pat) == true {
|
|
|
|
println!(
|
|
|
|
"this number returns {} because the number {} obey the rules of the sequence",
|
|
|
|
number_logic(*pat),
|
|
|
|
pat
|
|
|
|
)
|
|
|
|
}
|
|
|
|
if number_logic(*pat) == false {
|
|
|
|
println!("this number returns {} because the number {} does not obey the rules of the sequence", number_logic(*pat),pat )
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_zero() {
|
|
|
|
assert!(number_logic(0))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_single_digit_numbers() {
|
|
|
|
assert!(number_logic(5));
|
|
|
|
assert!(number_logic(9))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_two_digit_numbers() {
|
|
|
|
assert!(!number_logic(10))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_three_or_more_digit_number() {
|
|
|
|
assert!(number_logic(153));
|
|
|
|
assert!(!number_logic(100));
|
|
|
|
assert!(number_logic(9474));
|
|
|
|
assert!(!number_logic(9475));
|
|
|
|
assert!(number_logic(9_926_315));
|
|
|
|
assert!(!number_logic(9_926_316))
|
|
|
|
}
|
|
|
|
}
|