Sha256: 83ba71a8f9d1e995124a8d8fbddfa2d4ff6ff8ef03e6e35deaac4a07f7ac1847

Contents?: true

Size: 1.54 KB

Versions: 327

Compression:

Stored size: 1.54 KB

Contents

defmodule Triplet do

  @doc """
  Calculates sum of a given triplet of integers.
  """
  @spec sum([non_neg_integer]) :: non_neg_integer
  def sum(triplet) do
    Enum.reduce(triplet, 0, &(&1 + &2))
  end

  @doc """
  Calculates product of a given triplet of integers.
  """
  @spec product([non_neg_integer]) :: non_neg_integer
  def product(triplet) do
    Enum.reduce(triplet, 1, &(&1 * &2))
  end

  @doc """
  Determines if a given triplet is pythagorean. That is, do the squares of a and b add up to the square of c?
  """
  @spec pythagorean?([non_neg_integer]) :: boolean
  def pythagorean?([a, b, c]) do
    (a * a) + (b * b) == (c * c)
  end

  defp select?(triplet) do
    pythagorean?(triplet)
  end

  defp select?(triplet, sum) do
    pythagorean?(triplet) && sum(triplet) == sum
  end

  @doc """
  Generates a list of pythagorean triplets from a given min to a given max.
  """
  @spec generate(non_neg_integer, non_neg_integer) :: [list(non_neg_integer)]
  def generate(min, max) do
    for x <- Enum.to_list(min..max),
        y <- Enum.to_list(x..max),
        z <- Enum.to_list(y..max),
        select?([x, y, z]), do: [x, y, z]
  end

  @doc """
  Generates a list of pythagorean triplets from a given min to a given max, whose values add up to a given sum.
  """
  @spec generate(non_neg_integer, non_neg_integer, non_neg_integer) :: [list(non_neg_integer)]
  def generate(min, max, sum) do
    for x <- Enum.to_list(min..max),
        y <- Enum.to_list(x..max),
        z <- Enum.to_list(y..max),
        select?([x, y, z], sum), do: [x, y, z]
  end
end

Version data entries

327 entries across 327 versions & 1 rubygems

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