Ejercicio expresiones for
Deseo generar las tripletas x,y,z tales que \(z^2 = x^2 + y^2\) que esten en el rango 1 y 1000, tambien quiero esta \(z^3 = x^3 + y^3\), tambien \(\sqrt{z} = \sqrt{x} + \sqrt{y}\) hacerlo con expresiones for
scala> for {
x <- 1 to m
y <- 1 to m
z <- 1 to m
if x*x + y*y == z*z
}
yield (x,y,z)
val res28: IndexedSeq[(Int, Int, Int)] = Vector((3,4,5), (4,3,5), (5,12,13), (6,8,10), (7,24,25), (8,6,10), (8,15,17), (9,12,15), (9,40,41), (10,24,26), (11,60,61), (12,5,13), (12,9,15), (12,16,20), (12,35,37), (13,84,85), (14,48,50), (15,8,17), (15,20,25), (15,36,39), (16,12,20), (16,30,34), (16,63,65), (18,24,30), (18,80,82), (20,15,25), (20,21,29), (20,48,52), (21,20,29), (21,28,35), (21,72,75), (24,7,25), (24,10,26), (24,18,30), (24,32,40), (24,45,51), (24,70,74), (25,60,65), (27,36,45), (28,21,35), (28,45,53), (28,96,100), (30,16,34), (30,40,50), (30,72,78), (32,24,40), (32,60,68), (33,44,55), (33,56,65), (35,12,37), (35,84,91), (36,15,39), (36,27,45), (36,48,60), (36,77,85), (39,52,65), (39,80,89), (40,9,41), (40,30,50), (40,42,58), (40,75,85), (42,40,58)...
Ahora con los cubos
scala> val m = 1000
val m: Int = 1000
scala> for {
x <- 1 to m
y <- 1 to m
z <- 1 to m
if x*x*x + y*y*y == z*z*z
}
yield (x,y,z)
val res30: IndexedSeq[(Int, Int, Int)] = Vector()
Ahora con las raices
scala> for {
x <- 1 to m
y <- 1 to m
z <- 1 to m
if Math.sqrt(x) + Math.sqrt(y) == Math.sqrt(z)
}
yield (x,y,z)
val res31: IndexedSeq[(Int, Int, Int)] = Vector((1,1,4), (1,4,9), (1,9,16), (1,16,25), (1,25,36), (1,36,49), (1,49,64), (1,64,81), (1,81,100), (1,100,121), (1,121,144), (1,144,169), (1,169,196), (1,196,225), (1,225,256), (1,256,289), (1,289,324), (1,324,361), (1,361,400), (1,400,441), (1,441,484), (1,484,529), (1,529,576), (1,576,625), (1,625,676), (1,676,729), (1,729,784), (1,784,841), (1,841,900), (1,900,961), (2,2,8), (2,32,50), (2,72,98), (2,98,128), (2,162,200), (2,242,288), (2,288,338), (2,338,392), (2,392,450), (2,450,512), (2,578,648), (2,648,722), (2,722,800), (2,882,968), (3,3,12), (3,12,27), (3,27,48), (3,75,108), (3,108,147), (3,147,192), (3,243,300), (3,363,432), (3,507,588), (3,588,675), (3,768,867), (3,867,972), (4,1,9), (4,4,16), (4,9,25), (4,16...
A diferencia del flatMap las expresiones for no generan todos los elementos si no unicamente aquellos que cumplen la condición, esto hace mejor manejo de memoria.