45 lines
3.2 KiB
Elixir
45 lines
3.2 KiB
Elixir
defmodule TwelveDays do
|
|
@verses [
|
|
"On the first day of Christmas my true love gave to me, a Partridge in a Pear Tree.",
|
|
"On the second day of Christmas my true love gave to me, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the third day of Christmas my true love gave to me, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the fourth day of Christmas my true love gave to me, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the fifth day of Christmas my true love gave to me, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the sixth day of Christmas my true love gave to me, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the seventh day of Christmas my true love gave to me, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the eighth day of Christmas my true love gave to me, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the ninth day of Christmas my true love gave to me, nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the tenth day of Christmas my true love gave to me, ten Lords-a-Leaping, nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the eleventh day of Christmas my true love gave to me, eleven Pipers Piping, ten Lords-a-Leaping, nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.",
|
|
"On the twelfth day of Christmas my true love gave to me, 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 Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree."
|
|
]
|
|
|
|
@doc """
|
|
Given a `number`, return the song's verse for that specific day, including
|
|
all gifts for previous days in the same line.
|
|
"""
|
|
@spec verse(number :: integer) :: String.t()
|
|
def verse(number) do
|
|
@verses |> Enum.at(number - 1)
|
|
end
|
|
|
|
@doc """
|
|
Given a `starting_verse` and an `ending_verse`, return the verses for each
|
|
included day, one per line.
|
|
"""
|
|
@spec verses(starting_verse :: integer, ending_verse :: integer) :: String.t()
|
|
def verses(starting_verse, ending_verse) do
|
|
@verses
|
|
|> Enum.slice(starting_verse - 1, ending_verse - starting_verse + 1)
|
|
|> Enum.join("\n")
|
|
end
|
|
|
|
@doc """
|
|
Sing all 12 verses, in order, one verse per line.
|
|
"""
|
|
@spec sing() :: String.t()
|
|
def sing do
|
|
@verses |> Enum.join("\n")
|
|
end
|
|
end
|