Sha256: 69145574c747b97ccd10bed4d2fb92dc7de32de6822d312fe9e20d4f46347e28

Contents?: true

Size: 1.19 KB

Versions: 327

Compression:

Stored size: 1.19 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

327 entries across 327 versions & 1 rubygems

Version Path
trackler-2.2.1.109 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.108 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.107 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.106 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.105 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.104 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.103 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.102 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.101 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.100 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.99 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.98 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.97 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.96 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.95 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.94 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.93 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.92 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.91 tracks/elixir/exercises/largest-series-product/example.exs
trackler-2.2.1.90 tracks/elixir/exercises/largest-series-product/example.exs