FizzBuzz에서 factor가 하나 더 추가된 문제. 다른 사람들의 풀이를 보니 전부 다 제각각이라 제법 보는 재미가 있었다. 내 경우에는 이후 확장을 조금 더 자유롭게 할 수 있게끔 나누는 수와 메시지를 인자로 전달하도록 구현했다.
defmodule Raindrops do
@spec convert(pos_integer) :: String.t()
def convert(number) do
{number, ""}
|> divide(3, "Pling")
|> divide(5, "Plang")
|> divide(7, "Plong")
|> then(fn
{num, ""} -> Integer.to_string(num)
{_, str} -> str
end)
end
defp divide({number, acc}, factor, message) do
if rem(number, factor) == 0 do
{number, acc <> message}
else
{number, acc}
end
end
end
다 풀고 보니 Enum과 관련된 문제래서 Enum을 사용하도록 수정해봤다. 이쪽이 조금 더 깔끔해보이는 듯도 하다.
defmodule Raindrops do
@spec convert(pos_integer) :: String.t()
def convert(number) do
[{3, "Pling"}, {5, "Plang"}, {7, "Plong"}]
|> Enum.map(fn {factor, message} ->
if rem(number, factor) == 0, do: message, else: ""
end)
|> Enum.join("")
|> then(fn
"" -> to_string(number)
v -> v
end)
end
end
'호두나무 공방 > Exercism in Elixir' 카테고리의 다른 글
Roman Numerals - Exercism in Elixir (0) | 2022.06.07 |
---|---|
RNA Transcription - Exercism in Elixir (0) | 2022.06.06 |
Pig Latin - Exercism in Elixir (0) | 2022.06.02 |
Protein Translation - Exercism in Elixir (0) | 2022.06.01 |
Pangram - Exercism in Elixir (0) | 2022.05.31 |