Skip to content

Instantly share code, notes, and snippets.

@aaronjensen
Created July 23, 2016 20:25
Show Gist options
  • Select an option

  • Save aaronjensen/ef0c58d7e0492b656ba21d47153b9b1b to your computer and use it in GitHub Desktop.

Select an option

Save aaronjensen/ef0c58d7e0492b656ba21d47153b9b1b to your computer and use it in GitHub Desktop.
defmodule Bottles do
def song, do: verses(99, 0)
def verses(first, last) do
Enum.map_join first..last, "\n", &verse/1
end
def verse(number) do
"#{String.capitalize(quantity(number))} #{container(number)} of beer on the wall, " <>
"#{quantity(number)} #{container(number)} of beer.\n" <>
"#{action(number)}, " <>
"#{quantity(successor(number))} #{container(successor(number))} of beer on the wall.\n"
end
defp quantity(0), do: "no more"
defp quantity(number), do: to_string number
defp container(1), do: "bottle"
defp container(_number), do: "bottles"
defp action(0), do: "Go to the store and buy some more"
defp action(number), do: "Take #{pronoun(number)} down and pass it around"
defp pronoun(1), do: "it"
defp pronoun(_number), do: "one"
defp successor(0), do: 99
defp successor(number), do: number - 1
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment