Menu Close

Listas equidigitales

Enunciado

-- 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

3 soluciones de “Listas equidigitales

  1. Julián Galindo
    equidigital :: [Int] -> Bool
    equidigital xs = and [x == y | (x,y) <- zip n (tail n)]
        where n = digitos xs
     
    digitos [] = []
    digitos (x:xs) = length (show x): digitos xs
  2. Jesús Camacho Moro
    equidigital :: [Int] -> Bool
    equidigital xs = 
        and [length (digitos x) == length (digitos y) | x <- xs, y <- reverse xs]
     
    digitos n = if n < 10 then [n]
                else [rem n 10] ++ digitos (div n 10)
  3. Jesús Navas Orozco
    equidigital :: [Int] -> Bool
    equidigital []     = False
    equidigital (x:xs) = and [digitos x == digitos y| y <- xs]
     
    digitos x = length (show x)

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.