A list comprehension is a special syntax in some programming languages to describe lists. It is similar to the way mathematicians describe sets, with a set comprehension, hence the name.

Some attributes of a list comprehension are:

 They should be distinct from (nested) for loops and the use of map and filter functions within the syntax of the language.
 They should return either a list or an iterator (something that returns successive members of a collection, in order).
 The syntax has parts corresponding to that of set-builder notation. 


Task

Write a list comprehension that builds the list of all Pythagorean triples with elements between   1   and   n.

If the language has multiple ways for expressing such a construct (for example, direct list comprehensions and generators), write one example for each.




var pythTriples = Fiber.new { |n|
    (1..n-2).each { |x|
        (x+1..n-1).each { |y|
            (y+1..n).each { |z| (x*x + y*y == z*z) && Fiber.yield([x, y, z]) }
        }
    }
}
 
var n = 20
while (!pythTriples.isDone) {
    var res = pythTriples.call(n)
    res && System.print(res)
}