Listas de igual longitud
Definir la función
1 |
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,
1 2 |
mismaLongitud [[1,2],[6,4],[0,0],[7,4]] == True mismaLongitud [[1,2],[6,4,5],[0,0]] == 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 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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) |