Menu Close

Listas de igual longitud

Definir la función

   mismaLongitud :: [[a]] -> Bool

tal que (mismaLongitud xss) se verifica si todas las listas de la lista de listas xss tienen la misma longitud. Por ejemplo,

   mismaLongitud [[1,2],[6,4],[0,0],[7,4]] == True
   mismaLongitud [[1,2],[6,4,5],[0,0]]     == False

Soluciones

import Data.List (nub)    
 
-- 1ª solución:
mismaLongitud1 :: [[a]] -> Bool
mismaLongitud1 []       = True
mismaLongitud1 (xs:xss) = and [length ys == n | ys <- xss]
    where n = length xs
 
-- 2ª solución:
mismaLongitud2 :: [[a]] -> Bool
mismaLongitud2 xss = 
    and [length xs == length ys | (xs,ys) <- zip xss (tail xss)]
 
-- 3ª solución:
mismaLongitud3 :: [[a]] -> Bool
mismaLongitud3 (xs:ys:xss) = 
    length xs == length ys && mismaLongitud3 (ys:xss)
mismaLongitud3 _ = True           
 
-- 4ª solución
mismaLongitud4 :: [[a]] -> Bool
mismaLongitud4 [] = True
mismaLongitud4 (xs:xss) =
    all (\ys -> length ys == n) xss
    where n = length xs 
 
-- 5ª solución
mismaLongitud5 :: [[a]] -> Bool
mismaLongitud5 xss = length (nub [length xs | xs <- xss]) == 1
 
-- 6ª solución
mismaLongitud6 :: [[a]] -> Bool
mismaLongitud6 = null . drop 1 . nub . map length
 
-- Comparación de eficiencia
--    λ> mismaLongitud1 (replicate 20000 (replicate 20000 5))
--    True
--    (5.05 secs, 0 bytes)
--    λ> mismaLongitud2 (replicate 20000 (replicate 20000 5))
--    True
--    (9.98 secs, 0 bytes)
--    λ> mismaLongitud3 (replicate 20000 (replicate 20000 5))
--    True
--    (10.17 secs, 0 bytes)
--    λ> mismaLongitud4 (replicate 20000 (replicate 20000 5))
--    True
--    (5.18 secs, 0 bytes)
--    λ> mismaLongitud5 (replicate 20000 (replicate 20000 5))
--    True
--    (4.30 secs, 0 bytes)
--    λ> mismaLongitud6 (replicate 20000 (replicate 20000 5))
--    True
--    (4.19 secs, 0 bytes)

7 soluciones de “Listas de igual longitud

  1. manvermor
    import Data.List (nub)
     
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud xss = length (nub [length xs | xs <- xss]) == 1
  2. Chema Cortés
    import Data.List (nubBy)
    import Data.Function (on)
     
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud = (==1) . length . nubBy ((==) `on` length)
  3. josejuan
    import Data.List (nub)
     
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud = null . drop 1 . nub . map length
  4. abrdelrod
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud xss = and [length xs == length ys | (xs,ys) <- zip xss (tail xss)]
  5. manpende
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud [x]    = True
    mismaLongitud (x:xs) = length x == length (head xs) && mismaLongitud xs
  6. enrvalmor
     
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud xss = and [ length xs == length ys | xs <- xss, ys <- xss ]
  7. alvalvdom1
    mismaLongitud :: [[a]] -> Bool
    mismaLongitud xss = all (== head l) l
        where l = [length xs | xs <- xss]

Escribe tu solución

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