bottle_song
This commit is contained in:
28
elixir/bottle-song/lib/bottle_song.ex
Normal file
28
elixir/bottle-song/lib/bottle_song.ex
Normal file
@@ -0,0 +1,28 @@
|
||||
defmodule BottleSong do
|
||||
@moduledoc """
|
||||
Handles lyrics of the popular children song: Ten Green Bottles
|
||||
"""
|
||||
|
||||
defp verse(n) do
|
||||
bottle_sense = fn
|
||||
0 -> "No green bottles"
|
||||
1 -> "One green bottle"
|
||||
2 -> "Two green bottles"
|
||||
3 -> "Three green bottles"
|
||||
4 -> "Four green bottles"
|
||||
5 -> "Five green bottles"
|
||||
6 -> "Six green bottles"
|
||||
7 -> "Seven green bottles"
|
||||
8 -> "Eight green bottles"
|
||||
9 -> "Nine green bottles"
|
||||
10 -> "Ten green bottles"
|
||||
end
|
||||
|
||||
"#{bottle_sense.(n)} hanging on the wall,\n#{bottle_sense.(n)} hanging on the wall,\nAnd if one green bottle should accidentally fall,\nThere'll be #{String.downcase(bottle_sense.(n-1))} hanging on the wall."
|
||||
end
|
||||
|
||||
@spec recite(pos_integer, pos_integer) :: String.t()
|
||||
def recite(start_bottle, take_down) do
|
||||
Enum.map_join(0..(take_down - 1), "\n\n", &verse(start_bottle - &1))
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user