0votos

Camisetas de futbol (con recursividad en cualquier lenguaje) en Haskell

por josejuan hace 4 años

.

Dos amigos juegan en el mismo equipo de fútbol americano. Cada uno de ellos tiene su propio número dorsal en su camiseta. Un día, su entrenador observa el sorprendente hecho de que el cuadrado de la suma de sus respectivos números es, precisamente, el número de 4 cifras que se ve cuando esta uno junto al otro. Por ejemplo: estos números no pueden ser 17+23=40 y 40^2 es diferente de 1723. ¿Cuales pueden ser sus números dorsales?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- Con 9801 tests 
[(a, b) | a <- [1..99], b <- [1..99], (a + b)^2 == 100 * a + b] 
 
-- Con 99 tests 
[(a, d) | a <- [1..99] 
        , let z = (2 * a - 100)^2 - 4 * a * (a - 1) 
              s = round $ sqrt $ fromIntegral z 
        , (d, r) <- (\w -> (100 - 2 * a + w) `divMod` 2) <$> [s,-s] 
        , s^2 == z, r == 0, d > 0] 
 
 
 
-- En ambos casos: 
[(20,25),(30,25),(98,1)] 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.