호두나무 공방/Exercism in Elixir

Largest Series Product - Exercism in Elixir

2022. 7. 27. 22:56

문제 보기

문자열로 주어지는 수열 중, size 개짜리 부분수열의 각 항목의 곱이 가장 큰 경우를 찾는 문제였다. 큰 틀은 쉬웠는데, 빈 문자열인 경우, size가 0이거나 음수인 경우 등 몇 가지 예외 상황을 처리해야 하는 것이 조금 까다로웠다.

defmodule Series do
  @doc """
  Finds the largest product of a given number of consecutive numbers in a given string of numbers.
  """
  @spec largest_product(String.t(), non_neg_integer) :: non_neg_integer 
  def largest_product(_, 0), do: 1

  def largest_product(number_string, size) do
    if String.length(number_string) < size or size < 0 do
      raise ArgumentError
    end

    number_string
    |> String.to_integer()
    |> Integer.digits()
    |> Enum.chunk_every(size, 1, :discard)
    |> Enum.max_by(&Enum.product/1, &>=/2, fn -> [0] end)
    |> Enum.product()
  end
end