bottles...
This commit is contained in:
parent
54d87f5415
commit
e6fbfccb42
7 changed files with 378 additions and 0 deletions
34
rust/bottle-song/src/lib.rs
Normal file
34
rust/bottle-song/src/lib.rs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
pub fn recite(start_bottles: u32, take_down: u32) -> String {
|
||||
let end_bottles = start_bottles - take_down;
|
||||
|
||||
((end_bottles + 1)..=start_bottles)
|
||||
.rev()
|
||||
.map(|n| verse(n))
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n\n")
|
||||
}
|
||||
|
||||
fn verse(n: u32) -> String {
|
||||
let current_bottle = bottle_str(n);
|
||||
let next_bottle = bottle_str(n - 1).to_lowercase();
|
||||
|
||||
format!(
|
||||
"{0} hanging on the wall,\n\
|
||||
{0} hanging on the wall,\n\
|
||||
And if one green bottle should accidentally fall,\n\
|
||||
There'll be {1} hanging on the wall.",
|
||||
current_bottle, next_bottle
|
||||
)
|
||||
}
|
||||
|
||||
fn bottle_str(n: u32) -> String {
|
||||
let count_str = match n {
|
||||
10 => "Ten", 9 => "Nine", 8 => "Eight", 7 => "Seven", 6 => "Six",
|
||||
5 => "Five", 4 => "Four", 3 => "Three", 2 => "Two", 1 => "One",
|
||||
_ => "No",
|
||||
};
|
||||
|
||||
let plural = if n == 1 { "bottle" } else { "bottles" };
|
||||
|
||||
format!("{count_str} green {plural}")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue