diff options
| -rwxr-xr-x | challenge-331/benjamin-andre/rust/ch-1.rs | 16 | ||||
| -rwxr-xr-x | challenge-331/benjamin-andre/rust/ch-2.rs | 24 |
2 files changed, 40 insertions, 0 deletions
diff --git a/challenge-331/benjamin-andre/rust/ch-1.rs b/challenge-331/benjamin-andre/rust/ch-1.rs new file mode 100755 index 0000000000..4fed8bf7e0 --- /dev/null +++ b/challenge-331/benjamin-andre/rust/ch-1.rs @@ -0,0 +1,16 @@ +#!/bin/sh +//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit + +fn last_word(s: &str) -> usize { + s.trim() + .split_whitespace() + .last() + .map_or(0, |word| word.len()) +} + +#[test] +fn example() { + assert_eq!(last_word("The Weekly Challenge"), 9); + assert_eq!(last_word(" Hello World "), 5); + assert_eq!(last_word("Let's begin the fun"), 3); +} diff --git a/challenge-331/benjamin-andre/rust/ch-2.rs b/challenge-331/benjamin-andre/rust/ch-2.rs new file mode 100755 index 0000000000..33ed4dacdf --- /dev/null +++ b/challenge-331/benjamin-andre/rust/ch-2.rs @@ -0,0 +1,24 @@ +#!/bin/sh +//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit + +fn buddy_strings(source: &str, target: &str) -> bool { + if source.len() != target.len() { + return false; + } + let s: Vec<char> = source.chars().collect(); + let t: Vec<char> = target.chars().collect(); + let diffs: Vec<usize> = (0..s.len()).filter(|&i| s[i] != t[i]).collect(); + match diffs.len() { + 0 => s.len() != s.iter().collect::<std::collections::HashSet<_>>().len(), + 2 => s[diffs[0]] == t[diffs[1]] && s[diffs[1]] == t[diffs[0]], + _ => false, + } +} + +#[test] +fn example() { + assert_eq!(buddy_strings("fuck", "fcuk"), true); + assert_eq!(buddy_strings("love", "love"), false); + assert_eq!(buddy_strings("fodo", "food"), true); + assert_eq!(buddy_strings("feed", "feed"), true); +} |
