RosettaCodeData/Task/Pythagorean-triples/Wren/pythagorean-triples.wren
2023-07-01 13:44:08 -04:00

26 lines
770 B
Text

var sc = System.clock
var total = 0
var prim = 0
var maxPeri = 0
var newTri // recursive function so needs to be declared before it can be called
newTri = Fn.new { |s0, s1, s2|
var p = s0 + s1 + s2
if (p <= maxPeri) {
prim = prim + 1
total = total + (maxPeri/p).floor
newTri.call( 1*s0-2*s1+2*s2, 2*s0-1*s1+2*s2, 2*s0-2*s1+3*s2)
newTri.call( 1*s0+2*s1+2*s2, 2*s0+1*s1+2*s2, 2*s0+2*s1+3*s2)
newTri.call(-1*s0+2*s1+2*s2, -2*s0+1*s1+2*s2, -2*s0+2*s1+3*s2)
}
}
maxPeri = 100
while (maxPeri <= 1e10) {
prim = 0
total = 0
newTri.call(3, 4, 5)
var secs = (System.clock - sc).round
System.print("Up to %(maxPeri): %(total) triples, %(prim) primitives, %(secs) seconds")
maxPeri = 10 * maxPeri
}