Ir al contenido principal

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

equidigital :: [Int] -> Bool

tal que (equidigital xs) se verifica si xs es una lista equidigital. Por ejemplo,

equidigital [343,225,777,943]   ==  True
equidigital [343,225,777,94,3]  ==  False

Soluciones

-- 1ª definición (por comprensión)
equidigital :: [Int] -> Bool
equidigital []     = True
equidigital (x:xs) = and [nCifras y == n | y <- xs]
    where n = nCifras x

-- (nCifras x) es el número de cifras de x. Por ejemplo,
--    nCifras 475  ==  3
nCifras :: Int -> Int
nCifras x = length (show x)

-- 2ª definición (por recursión)
equidigital2 :: [Int] -> Bool
equidigital2 (x:y:zs) = nCifras x == nCifras y && equidigital (y:zs)
equidigital2 _        = True