Add twelve days of christmas example

This commit is contained in:
Timothy Warren 2019-02-06 11:52:08 -05:00
parent ef64ba88ab
commit ad04552e39
2 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,7 @@
[package]
name = "twelve_days_of_christmas"
version = "0.1.0"
authors = ["Timothy Warren <twarren@nabancard.com>"]
edition = "2018"
[dependencies]

View File

@ -0,0 +1,58 @@
const ORDINALS: [&str; 12] = [
"first",
"second",
"third",
"fourth",
"fifth",
"sixth",
"seventh",
"eighth",
"ninth",
"tenth",
"eleventh",
"twelfth",
];
const GIFTS: [&str; 12] = [
"Twelve drummers drumming",
"Eleven pipers piping",
"Ten lords a-leaping",
"Nine ladies dancing",
"Eight maids a-milking",
"Seven swans a-swimming",
"Six geese a-laying",
"Five golden rings",
"Four calling birds",
"Three french hens",
"Two turtle doves",
"and a partridge in a pear tree.",
];
fn format_verse(day: &str, gifts: &str) -> String {
format!("On the {} day of Christmas, my true love gave to me: \n{}\n", day, gifts)
}
fn main() {
for n in 0..12 {
let verse: String = match n {
0 => format_verse("first", "A partridge in a pear tree."),
_ => {
// The highest index is 11, and we want
// the highest index to start, so we can
// easily have the cumulative list each verse.
let gift_index = 11 - n;
// Get the slice of the array of gifts, from
// the index to the end of the array
let gifts = &GIFTS[gift_index..]
.to_vec() // So we have the join method that returns a string
.join(",\n");
format_verse(ORDINALS[n], gifts)
}
};
// For some reason, the println! macro only takes string literals
println!("{}", verse);
}
}