From f7620da880e3dade5fdce6fd0f51f290d4353654 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Mon, 28 Dec 2020 11:00:15 +0000 Subject: [rust] Acronym --- rust/acronym/src/lib.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 rust/acronym/src/lib.rs (limited to 'rust/acronym/src/lib.rs') diff --git a/rust/acronym/src/lib.rs b/rust/acronym/src/lib.rs new file mode 100644 index 0000000..dcd4615 --- /dev/null +++ b/rust/acronym/src/lib.rs @@ -0,0 +1,19 @@ +fn to_acronym(word: &str) -> Option { + if word.chars().all(|c| c.is_uppercase() || !c.is_alphabetic()) + || word.chars().all(|c| c.is_lowercase() || !c.is_alphabetic()) + { + word.chars() + .find(|c| c.is_alphabetic()) + .map(|c| c.to_uppercase().to_string()) + } else { + Some(word.chars().filter(|c| c.is_uppercase()).collect()) + } +} + +pub fn abbreviate(phrase: &str) -> String { + phrase + .split(|c| " -:,".contains(c)) // Split into words + .filter(|s| !s.is_empty()) + .flat_map(to_acronym) + .collect() +} -- cgit v1.2.3