Listas equidigitales
Una lista de números naturales es equidigital si todos sus elementos tienen el mismo número de dígitos.
Definir la función
1 |
equidigital :: [Int] -> Bool |
tal que (equidigital xs) se verifica si xs es una lista equidigital. Por ejemplo,
1 2 |
equidigital [343,225,777,943] == True equidigital [343,225,777,94,3] == False |
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 37 38 39 40 |
-- 1ª definición -- ============= equidigital :: [Int] -> Bool equidigital xs = todosIguales (numerosDeDigitos xs) -- (numerosDeDigitos xs) es la lista de los números de dígitos de -- los elementos de xs. Por ejemplo, -- numerosDeDigitos [343,225,777,943] == [3,3,3,3] -- numerosDeDigitos [343,225,777,94,3] == [3,3,3,2,1] numerosDeDigitos :: [Int] -> [Int] numerosDeDigitos xs = [numeroDeDigitos x | x <- xs] -- (numeroDeDigitos x) es el número de dígitos de x. Por ejemplo, -- numeroDeDigitos 475 == 3 numeroDeDigitos :: Int -> Int numeroDeDigitos x = length (show x) -- (todosIguales xs) se verifica si todos los elementos de xs son -- iguales. Por ejemplo, -- todosIguales [3,3,3,3] == True -- todosIguales [3,3,3,2,1] == False todosIguales (x:y:zs) = x == y && todosIguales (y:zs) todosIguales _ = True -- 2ª definición -- ============= equidigital2 :: [Int] -> Bool equidigital2 [] = True equidigital2 (x:xs) = and [numeroDeDigitos y == n | y <- xs] where n = numeroDeDigitos x -- 3ª definición -- ============= equidigital3 :: [Int] -> Bool equidigital3 (x:y:zs) = numeroDeDigitos x == numeroDeDigitos y && equidigital3 (y:zs) equidigital3 _ = True |
Pensamiento
Se miente más de la cuenta
por falta de fantasía:
también la verdad se inventa.Antonio Machado