euler/ruby/euler045.rb

24 lines
444 B
Ruby

def triangular
triangular_enum = Enumerator.new do |y|
n = 1
loop do
x = n * (n+1) / 2
n += 1
y << x
end
end
triangular_enum
end
def pentagonal?(n)
((Math.sqrt((24 * n) + 1) + 1) / 6) % 1 == 0
end
def hexagonal?(n)
((Math.sqrt((8 * n) + 1) + 1) / 4) % 1 == 0
end
def triangular_pentagonal_and_hexagonal_up_to(n)
triangular.take_while { |x| x < n }.select { |x| pentagonal?(x) && hexagonal?(x) }
end