Four is the number of letters in the ...: Difference between revisions
Content added Content deleted
m (Rust - minor edit) |
m (Rust - reformatted with rustfmt) |
||
Line 1,637: | Line 1,637: | ||
<lang rust>struct NumberNames { |
<lang rust>struct NumberNames { |
||
cardinal: &'static str, |
cardinal: &'static str, |
||
ordinal: &'static str |
ordinal: &'static str, |
||
} |
} |
||
Line 1,650: | Line 1,650: | ||
const SMALL_NAMES: [NumberNames; 20] = [ |
const SMALL_NAMES: [NumberNames; 20] = [ |
||
NumberNames { |
NumberNames { |
||
cardinal: "zero", |
|||
ordinal: "zeroth", |
|||
}, |
|||
NumberNames { cardinal: "three", ordinal: "third" }, |
|||
NumberNames { |
NumberNames { |
||
cardinal: "one", |
|||
ordinal: "first", |
|||
}, |
|||
NumberNames { cardinal: "seven", ordinal: "seventh" }, |
|||
NumberNames { |
NumberNames { |
||
cardinal: "two", |
|||
ordinal: "second", |
|||
}, |
|||
NumberNames { cardinal: "eleven", ordinal: "eleventh" }, |
|||
NumberNames { |
NumberNames { |
||
cardinal: "three", |
|||
NumberNames { cardinal: "thirteen", ordinal: "thirteenth" }, |
|||
ordinal: "third", |
|||
}, |
|||
NumberNames { cardinal: "fifteen", ordinal: "fifteenth" }, |
|||
NumberNames { |
NumberNames { |
||
cardinal: "four", |
|||
NumberNames { cardinal: "seventeen", ordinal: "seventeenth" }, |
|||
ordinal: "fourth", |
|||
}, |
|||
NumberNames { cardinal: "nineteen", ordinal: "nineteenth" } |
|||
NumberNames { |
|||
cardinal: "five", |
|||
ordinal: "fifth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "six", |
|||
ordinal: "sixth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "seven", |
|||
ordinal: "seventh", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "eight", |
|||
ordinal: "eighth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "nine", |
|||
ordinal: "ninth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "ten", |
|||
ordinal: "tenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "eleven", |
|||
ordinal: "eleventh", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "twelve", |
|||
ordinal: "twelfth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "thirteen", |
|||
ordinal: "thirteenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "fourteen", |
|||
ordinal: "fourteenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "fifteen", |
|||
ordinal: "fifteenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "sixteen", |
|||
ordinal: "sixteenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "seventeen", |
|||
ordinal: "seventeenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "eighteen", |
|||
ordinal: "eighteenth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "nineteen", |
|||
ordinal: "nineteenth", |
|||
}, |
|||
]; |
]; |
||
const TENS: [NumberNames; 8] = [ |
const TENS: [NumberNames; 8] = [ |
||
NumberNames { |
NumberNames { |
||
cardinal: "twenty", |
|||
ordinal: "twentieth", |
|||
}, |
|||
NumberNames { cardinal: "fifty", ordinal: "fiftieth" }, |
|||
NumberNames { |
NumberNames { |
||
cardinal: "thirty", |
|||
ordinal: "thirtieth", |
|||
}, |
|||
NumberNames { cardinal: "ninety", ordinal: "ninetieth" } |
|||
NumberNames { |
|||
cardinal: "forty", |
|||
ordinal: "fortieth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "fifty", |
|||
ordinal: "fiftieth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "sixty", |
|||
ordinal: "sixtieth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "seventy", |
|||
ordinal: "seventieth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "eighty", |
|||
ordinal: "eightieth", |
|||
}, |
|||
NumberNames { |
|||
cardinal: "ninety", |
|||
ordinal: "ninetieth", |
|||
}, |
|||
]; |
]; |
||
Line 1,686: | Line 1,770: | ||
cardinal: &'static str, |
cardinal: &'static str, |
||
ordinal: &'static str, |
ordinal: &'static str, |
||
number: usize |
number: usize, |
||
} |
} |
||
Line 1,703: | Line 1,787: | ||
cardinal: "hundred", |
cardinal: "hundred", |
||
ordinal: "hundredth", |
ordinal: "hundredth", |
||
number: 100 |
number: 100, |
||
}, |
}, |
||
NamedNumber { |
NamedNumber { |
||
cardinal: "thousand", |
cardinal: "thousand", |
||
ordinal: "thousandth", |
ordinal: "thousandth", |
||
number: 1000 |
number: 1000, |
||
}, |
|||
NamedNumber { |
NamedNumber { |
||
cardinal: "million", |
cardinal: "million", |
||
ordinal: "millionth", |
ordinal: "millionth", |
||
number: 1000000 |
number: 1000000, |
||
}, |
}, |
||
NamedNumber { |
NamedNumber { |
||
cardinal: "billion", |
cardinal: "billion", |
||
ordinal: "billionth", |
ordinal: "billionth", |
||
number: 1000000000 |
number: 1000000000, |
||
}, |
|||
NamedNumber { |
NamedNumber { |
||
cardinal: "trillion", |
cardinal: "trillion", |
||
ordinal: "trillionth", |
ordinal: "trillionth", |
||
number: 1000000000000 |
number: 1000000000000, |
||
}, |
}, |
||
NamedNumber { |
NamedNumber { |
||
cardinal: "quadrillion", |
cardinal: "quadrillion", |
||
ordinal: "quadrillionth", |
ordinal: "quadrillionth", |
||
number: 1000000000000000 |
number: 1000000000000000, |
||
}, |
}, |
||
NamedNumber { |
NamedNumber { |
||
cardinal: "quintillion", |
cardinal: "quintillion", |
||
ordinal: "quintillionth", |
ordinal: "quintillionth", |
||
number: 1000000000000000000 |
number: 1000000000000000000, |
||
} |
}, |
||
]; |
]; |
||
Line 1,740: | Line 1,826: | ||
return &NAMED_NUMBERS[i - 1]; |
return &NAMED_NUMBERS[i - 1]; |
||
} |
} |
||
} |
} |
||
&NAMED_NUMBERS[N - 1] |
&NAMED_NUMBERS[N - 1] |
||
} |
} |
||
Line 1,756: | Line 1,842: | ||
struct WordList { |
struct WordList { |
||
words: Vec<(usize, usize)>, |
words: Vec<(usize, usize)>, |
||
string: String |
string: String, |
||
} |
} |
||
impl WordList { |
impl WordList { |
||
fn new() -> WordList { |
fn new() -> WordList { |
||
WordList { |
WordList { |
||
words: Vec::new(), |
|||
string: String::new(), |
|||
} |
|||
} |
} |
||
fn append(&mut self, s: &str) { |
fn append(&mut self, s: &str) { |
||
Line 1,797: | Line 1,886: | ||
} else if n < 100 { |
} else if n < 100 { |
||
if n % 10 == 0 { |
if n % 10 == 0 { |
||
words.append(TENS[n/10 - 2].get_name(ordinal)); |
words.append(TENS[n / 10 - 2].get_name(ordinal)); |
||
} else { |
} else { |
||
words.append(TENS[n/10 - 2].get_name(false)); |
words.append(TENS[n / 10 - 2].get_name(false)); |
||
words.extend("-"); |
words.extend("-"); |
||
words.extend(SMALL_NAMES[n % 10].get_name(ordinal)); |
words.extend(SMALL_NAMES[n % 10].get_name(ordinal)); |
||
Line 1,806: | Line 1,895: | ||
} else { |
} else { |
||
let big = big_name(n); |
let big = big_name(n); |
||
count += append_number_name(words, n/big.number, false); |
count += append_number_name(words, n / big.number, false); |
||
if n % big.number == 0 { |
if n % big.number == 0 { |
||
words.append(big.get_name(ordinal)); |
words.append(big.get_name(ordinal)); |
||
Line 1,822: | Line 1,911: | ||
let mut result = WordList::new(); |
let mut result = WordList::new(); |
||
const WORDS: &'static [&'static str] = &[ |
const WORDS: &'static [&'static str] = &[ |
||
"Four |
"Four", |
||
" |
"is", |
||
"the", |
|||
"number", |
|||
"of", |
|||
"letters", |
|||
"in", |
|||
"the", |
|||
"first", |
|||
"word", |
|||
"of", |
|||
"this", |
|||
"sentence,", |
|||
]; |
|||
for s in WORDS { |
for s in WORDS { |
||
result.append(s); |
result.append(s); |
||
Line 1,862: | Line 1,963: | ||
let s = sentence(n); |
let s = sentence(n); |
||
let word = s.get_word(n - 1); |
let word = s.get_word(n - 1); |
||
print!( |
print!( |
||
"The {}th word is '{}' and has {} letters. ", |
|||
n, |
|||
word, |
|||
count_letters(word) |
|||
); |
|||
println!("Sentence length: {}", s.sentence_length()); |
println!("Sentence length: {}", s.sentence_length()); |
||
n *= 10; |
n *= 10; |