Sha256: 2300241cee6b207e73cf67802181db4aaeae53f22cbff9a94e83da699dbfad78

Contents?: true

Size: 855 Bytes

Versions: 396

Compression:

Stored size: 855 Bytes

Contents

class Triplets
  attr_reader :factors, :sum
  def initialize(conditions)
    min = conditions.fetch(:min_factor) { 1 }
    max = conditions.fetch(:max_factor)
    @sum = conditions[:sum]
    @factors = (min..max).to_a
  end

  def to_a
    triplets = []
    each_triplet do |triplet|
      triplets << triplet if select?(triplet)
    end
    triplets
  end

  def each_triplet
    factors.combination(3).each do |a, b, c|
      yield Triplet.new(a, b, c)
    end
  end

  def select?(triplet)
    triplet.pythagorean? && (!sum || triplet.sum == sum)
  end
end

class Triplet
  def self.where(conditions)
    Triplets.new(conditions).to_a
  end

  attr_reader :a, :b, :c
  def initialize(a, b, c)
    @a = a
    @b = b
    @c = c
  end

  def sum
    a + b + c
  end

  def product
    a * b * c
  end

  def pythagorean?
    a**2 + b**2 == c**2
  end
end

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.138 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.137 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.136 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.135 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.134 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.133 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.132 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.131 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.130 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.129 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.128 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.127 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.126 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.125 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.124 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.123 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.122 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.121 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb
trackler-2.2.1.120 tracks/ruby/exercises/pythagorean-triplet/.meta/solutions/pythagorean_triplet.rb