exercism/rust/luhn/src/lib.rs
2025-12-08 22:00:50 +03:00

22 lines
656 B
Rust

/// Check a Luhn checksum.
pub fn is_valid(code: &str) -> bool {
code.chars()
.rev()
.filter(|c| !c.is_whitespace())
.try_fold((0, 0), |(i, sum), c| {
c.to_digit(10).map(|d| {
let added = if 1 == i % 2 {
let multiplyed = d * 2;
if multiplyed > 9 {
multiplyed - 9
} else {
multiplyed
}
} else {
d
};
(i + 1, sum + added)
})
})
.is_some_and(|(i, sum)| i > 1 && 0 == sum % 10)
}