호두나무 공방/Exercism in Elixir

Grains - Exercism in Elixir

2022. 7. 14. 22:57

문제 보기

간단한 거듭제곱 문제였다. 이 정도 문제는 안 올려도 되나 싶긴 하지만, 기록차 남겨 둔다.

defmodule Grains do
  @doc """
  Calculate two to the power of the input minus one.
  """
  @spec square(pos_integer()) :: {:ok, pos_integer()} | {:error, String.t()}
  def square(number) when number in 1..64 do
    {:ok, Integer.pow(2, number - 1)}
  end

  def square(_number) do
    {:error, "The requested square must be between 1 and 64 (inclusive)"}
  end

  @doc """
  Adds square of each number from 1 to 64.
  """
  @spec total :: {:ok, pos_integer()}
  def total do
    1..64
    |> Enum.map(&(&1 |> square() |> elem(1)))
    |> Enum.sum()
    |> then(fn x -> {:ok, x} end)
  end
end