RosettaCodeData/Task/Pythagorean-triples/Ruby/pythagorean-triples.rb

30 lines
639 B
Ruby
Raw Permalink Normal View History

2013-04-10 23:57:08 -07:00
class PythagoranTriplesCounter
def initialize(limit)
@limit = limit
@total = 0
2015-11-18 06:14:39 +00:00
@primitives = 0
2013-04-10 23:57:08 -07:00
generate_triples(3, 4, 5)
end
2015-11-18 06:14:39 +00:00
attr_reader :total, :primitives
2013-04-10 23:57:08 -07:00
private
def generate_triples(a, b, c)
perim = a + b + c
return if perim > @limit
2015-11-18 06:14:39 +00:00
@primitives += 1
2013-04-10 23:57:08 -07:00
@total += @limit / perim
generate_triples( a-2*b+2*c, 2*a-b+2*c, 2*a-2*b+3*c)
generate_triples( a+2*b+2*c, 2*a+b+2*c, 2*a+2*b+3*c)
generate_triples(-a+2*b+2*c,-2*a+b+2*c,-2*a+2*b+3*c)
end
end
perim = 10
while perim <= 100_000_000
c = PythagoranTriplesCounter.new perim
2015-11-18 06:14:39 +00:00
p [perim, c.total, c.primitives]
2013-04-10 23:57:08 -07:00
perim *= 10
end