Sha256: 0c79e275b0a19eb1808b035c881b7ec49e3c0819c4f36935c036b684b7472a79

Contents?: true

Size: 1.2 KB

Versions: 37

Compression:

Stored size: 1.2 KB

Contents

defmodule Series do
  @spec digits(String.t()) :: [non_neg_integer]
  defp digits("") do
    []
  end

  defp digits(number_string) do
    String.split(number_string, "", trim: true)
    |> Enum.reduce([], fn char, acc -> [String.to_integer(char) | acc] end)
    |> Enum.reverse()
  end

  @spec slices(String.t(), non_neg_integer) :: [list(non_neg_integer)]
  defp slices(number_string, size) do
    digits = digits(number_string)
    chunk(digits, size, 1)
  end

  @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
  end

  def largest_product(number_string, size) do
    unless Enum.member?(Range.new(0, String.length(number_string)), size) do
      raise ArgumentError
    end

    slices = slices(number_string, size)

    Enum.map(slices, &Enum.reduce(&1, fn x, acc -> x * acc end))
    |> Enum.max()
  end

  # Handle Enum.chunks -> Enum.chunk renaming.
  if not ({:chunk, 3} in Enum.__info__(:functions)) do
    defp chunk(coll, n, step), do: Enum.chunks(coll, n, step)
  else
    defp chunk(coll, n, step), do: Enum.chunk(coll, n, step)
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
trackler-2.2.1.147 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.146 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.145 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.144 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.143 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.142 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.141 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.140 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.139 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.138 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.137 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.136 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.135 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.134 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.133 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.132 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.131 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.130 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.129 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.128 tracks/elixir/exercises/largest-series-product/example.exs