SUP = 10000
def pythagorean_triples sup = SUP
ary = []
1.step(sup, 2){|a|
aa = a * a
1.step(a - 2, 2){|b|
next if a.gcd(b) > 1
x, y = [aa - b * b >> 1, a * b].sort
next if y > sup
xx = yy = 0
ary += (sup/y).times.map{[xx += x, yy += y]}
}
}
ary
end
pt = pythagorean_triples.sort
while a = pt.shift
s1, s2 = [], []
pt.each{|c, d|
if c == a[0]
s1 << d
elsif c == a[1]
s2 << d
end
}
(s1 & s2).each{|e| p [*a, e]}
end
U1VQID0gMTAwMDAKCmRlZiBweXRoYWdvcmVhbl90cmlwbGVzIHN1cCA9IFNVUAogIGFyeSA9IFtdCiAgMS5zdGVwKHN1cCwgMil7fGF8CiAgICBhYSA9IGEgKiBhCiAgICAxLnN0ZXAoYSAtIDIsIDIpe3xifAogICAgICBuZXh0IGlmIGEuZ2NkKGIpID4gMQogICAgICB4LCB5ID0gW2FhIC0gYiAqIGIgPj4gMSwgYSAqIGJdLnNvcnQKICAgICAgbmV4dCBpZiB5ID4gc3VwCiAgICAgIHh4ID0geXkgPSAwCiAgICAgIGFyeSArPSAoc3VwL3kpLnRpbWVzLm1hcHtbeHggKz0geCwgeXkgKz0geV19CiAgICB9CiAgfQogIGFyeQplbmQKCnB0ID0gcHl0aGFnb3JlYW5fdHJpcGxlcy5zb3J0CndoaWxlIGEgPSBwdC5zaGlmdAogIHMxLCBzMiA9IFtdLCBbXQogIHB0LmVhY2h7fGMsIGR8CiAgICBpZiBjID09IGFbMF0KICAgICAgczEgPDwgZAogICAgZWxzaWYgYyA9PSBhWzFdCiAgICAgIHMyIDw8IGQKICAgIGVuZAogIH0KICAoczEgJiBzMikuZWFjaHt8ZXwgcCBbKmEsIGVdfQplbmQK