Major refactor

This commit is contained in:
2026-04-03 23:04:51 -04:00
parent e7f337c735
commit 35d07e8df1
124 changed files with 4929 additions and 2429 deletions

View File

@@ -0,0 +1,62 @@
pub fn a_or_an(word: &str) -> &'static str {
let vowels = ['a', 'e', 'i', 'o', 'u'];
let lowercase_word = word.to_lowercase();
// Special cases where the article should be "a"
let special_cases_a = vec!["one"];
if special_cases_a.contains(&lowercase_word.as_str()) {
return "a";
}
// Special cases where the article should be "an"
let special_cases_an = vec!["hour"];
if special_cases_an.contains(&lowercase_word.as_str()) {
return "an";
}
let first_char = lowercase_word.chars().next();
match first_char {
// If the first character is a vowel, return "an"
Some(c) if vowels.contains(&c) => "an",
// Otherwise, return "a"
_ => "a",
}
}
pub fn number_to_words(n: i32) -> String {
let ones = [
"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
];
let teens = [
"ten",
"eleven",
"twelve",
"thirteen",
"fourteen",
"fifteen",
"sixteen",
"seventeen",
"eighteen",
"nineteen",
];
let tens = [
"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety",
];
if n < 10 {
ones[n as usize].to_string()
} else if n < 20 {
teens[(n - 10) as usize].to_string()
} else if n < 100 {
let ten_part = tens[(n / 10) as usize];
let one_part = ones[(n % 10) as usize];
if n % 10 == 0 {
ten_part.to_string() // e.g., 20 → "twenty"
} else {
format!("{}-{}", ten_part, one_part) // e.g., 42 → "forty-two"
}
} else {
"Number out of range".to_string() // Handle numbers >= 100 (or extend the logic)
}
}