Skip to content

Instantly share code, notes, and snippets.

@heri16
Created January 16, 2016 08:43
Show Gist options
  • Save heri16/49a2d9eb9bed9e929b7e to your computer and use it in GitHub Desktop.
Save heri16/49a2d9eb9bed9e929b7e to your computer and use it in GitHub Desktop.
defmodule Fizzbuzz do
def fizzbuzz_case(num) do
case num do
num when rem(num, 15) == 0 -> "FizzBuzz"
num when rem(num, 5) == 0 -> "Buzz"
num when rem(num, 3) == 0 -> "Fizz"
num -> num
end
end
def print(to) do
1..to
|> Enum.into([])
|> Enum.map(&fizzbuzz/1)
|> Enum.join("\n")
|> IO.puts
end
# Follow Elixir convention
def fizzbuzz(num) when rem(num, 5) == 0 and rem(num, 3) == 0 do
"Fizzbuzz"
end
def fizzbuzz(num) when rem(num, 3) == 0 do
"Fizz"
end
def fizzbuzz(num) when rem(num, 5) == 0 do
"Buzz"
end
def fizzbuzz(num) do
num
end
# Recursive version
def print_recursive(to) when to > 0 do
fizzbuzz_recursive(to,[])
|> Enum.join("\n")
|> IO.puts
end
def fizzbuzz_recursive(_num = 0, acc) do
acc
end
def fizzbuzz_recursive(num, acc) when rem(num, 5) == 0 and rem(num, 3) == 0 do
acc = ["Fizzbuzz" | acc]
fizzbuzz_recursive(num-1, acc)
end
def fizzbuzz_recursive(num, acc) when rem(num, 3) == 0 do
acc = ["Fizz" | acc]
fizzbuzz_recursive(num-1, acc)
end
def fizzbuzz_recursive(num, acc) when rem(num, 5) == 0 do
acc = ["Buzz" | acc]
fizzbuzz_recursive(num-1, acc)
end
def fizzbuzz_recursive(num, acc) do
acc = [ num | acc ]
fizzbuzz_recursive(num-1, acc)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment