Números con cuadrados con dígitos pares
Definir la lista
1 |
numerosConCuadradosConDigitosPares :: [Integer] |
cuyos elementos son los números cuyos cuadrados tienen todos sus dígitos pares. Por ejemplo,
1 2 |
λ> take 20 numerosConCuadradosConDigitosPares [0,2,8,20,22,68,78,80,92,162,168,200,202,220,262,298,478,492,498,668] |
Comprobar con QuickCheck que numerosConCuadradosConDigitosPares es infinita; es decir, para cualquier n posee algún elemento mayor que n.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import Test.QuickCheck numerosConCuadradosConDigitosPares :: [Integer] numerosConCuadradosConDigitosPares = filter tieneCuadradoConDigitosPares [0..] -- (tieneCuadradoConDigitosPares n) se verifica si todos los dígitos de -- n^2 son pares. Por ejemplo, -- tieneCuadradoConDigitosPares 78 == True -- tieneCuadradoConDigitosPares 76 == False tieneCuadradoConDigitosPares :: Integer -> Bool tieneCuadradoConDigitosPares n = tieneDigitosPares (n^2) -- (tieneDigitosPares n) se verifica si todos los dígitos de n son -- pares. Por ejemplo, -- tieneDigitosPares 426 == True -- tieneDigitosPares 436 == False tieneDigitosPares :: Integer -> Bool tieneDigitosPares n = all even (digitos n) -- (digitos n) es la lista de los dígitos de n. Por ejemplo, -- digitos 325 == [3,2,5] digitos :: Integer -> [Int] digitos n = [read [c] | c <- show n] -- La propiedad es prop_infinito :: Integer -> Bool prop_infinito n = not (null (dropWhile (<= n) numerosConCuadradosConDigitosPares)) -- La comprobación es -- λ> quickCheck prop_infinito -- +++ OK, passed 100 tests. |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
6 Comentarios