-
Notifications
You must be signed in to change notification settings - Fork 445
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(luhn_algorithm): new optional exercise for rust piscine
- Loading branch information
Showing
1 changed file
with
62 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
## luhn_algorithm | ||
|
||
### Instructions | ||
|
||
Create a function which checks if a number is valid per the Luhn formula. | ||
|
||
The function will receive a string and return a boolean. | ||
An empty string or a number with only one digit will be considered an invalid number. | ||
Spaces are accepted in the script but have to be stripped during the calculation (in other words they won't affect the result). | ||
|
||
The Luhn formula is used to check if a number is a valid credit card number and in some other scenarios where you need to check a number fast and without accessing a database. | ||
|
||
We can summarize the formula as follow: | ||
|
||
- We want to check the number `4539 3195 0343 6467` | ||
- We take every second digit starting by the right | ||
- We multiply those digits by 2 | ||
- If the result is more than 9 we subtract 9 from it | ||
- We sum all the digits | ||
- If sum is evenly divisible by 10 then this number is valid | ||
|
||
So we will get: | ||
|
||
- `4539 3195 0343 6467` | ||
- `4_3_ 3_9_ 0_4_ 6_6_`: numbers to modify | ||
- `8_6_ 6_9_ 0_8_ 3_3_`: modified numbers | ||
- `8569 6195 0383 3437`: the new sequence of digits | ||
- `80`: the sum of all digits | ||
- `80` is evenly divisible by 10 so the result is `true` | ||
|
||
### Expected Function | ||
|
||
```rust | ||
pub fn is_luhn_formula(code: &str) -> bool { | ||
} | ||
``` | ||
|
||
### Usage | ||
|
||
Here is a possible program to test your function, | ||
|
||
```rust | ||
fn main() { | ||
println!("{}", is_luhn_formula("")); | ||
println!("{}", is_luhn_formula("1")); | ||
println!("{}", is_luhn_formula("79927398713")); | ||
println!("{}", is_luhn_formula("7992 7398 713")); | ||
println!("{}", is_luhn_formula("1234567890123456")); | ||
} | ||
``` | ||
|
||
And its output: | ||
|
||
```console | ||
$ cargo run | ||
false | ||
false | ||
true | ||
true | ||
false | ||
$ | ||
``` |