#!/usr/bin/ruby

# https://rosettacode.org/wiki/Square_but_not_cube

var square_and_cube = Enumerator({|f|
    1..Inf -> each {|n| f(n**6) }
})
 
var square_but_not_cube = Enumerator({|f|
    1..Inf -> lazy.map {|n| n**2 }.grep {|n| !n.is_power(3) }.each {|n| f(n) }
})
 
say "First 30 positive integers that are a square but not a cube:"
say square_but_not_cube.first(30).join(' ')
 
say "First 15 positive integers that are both a square and a cube:"
say square_and_cube.first(15).join(' ')
