pub fn reverse(text: &str) -> String {
text
.chars()
.rev()
.collect()
}
pub fn switch_case(text: &str) -> String {
text
.chars()
.map(|c| if c.is_uppercase() {
c.to_ascii_lowercase()
} else if c.is_lowercase() {
c.to_ascii_lowercase()
} else {c})
.collect()
}
pub fn stringify_value_9999(value: i64) -> Option<String> {
if value > 9999 || value < 0 {
return None;
} else if value == 0 {
return Some(String::from("zero"))
}
let thousands = value / 1000;
let hundreds = (value - thousands * 1000) / 100;
let tens = (value - thousands * 1000 - hundreds * 100) / 10;
let ones = value - thousands * 1000 - hundreds * 100 - tens * 10;
const STRINGIFIED:[&str; 9] = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
const STRINGIFIED_TEN:[&str; 10] = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
const STRINGIFIED_TENS:[&str; 8] = ["twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninty"];
let mut result = String::new();
if thousands > 0 {
result.push_str(STRINGIFIED[(thousands-1) as usize]);
result.push_str(" thousands");
}
if hundreds > 0 {
if !result.is_empty() {
result.push(' ');
}
result.push_str(STRINGIFIED[(hundreds-1) as usize]);
result.push_str(" hundreds");
}
if tens > 0 {
if !result.is_empty() {
result.push(' ');
}
if tens == 1 {
result.push_str(STRINGIFIED_TEN[ones as usize]);
} else {
result.push_str(STRINGIFIED_TENS[(tens - 2) as usize]);
}
}
if ones > 0 && tens != 1 {
if !result.is_empty() {
result.push(' ');
}
}
result.push_str(STRINGIFIED[(ones - 1) as usize]);
Some(result)
}