24 lines
444 B
Ruby
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
|