Menu Close

Listas engarzadas

Una lista de listas es engarzada si el último elemento de cada lista coincide con el primero de la siguiente.

Definir la función

   engarzada :: Eq a => [[a]] -> Bool

tal que (engarzada xss) se verifica si xss es una lista engarzada. Por ejemplo,

   engarzada [[1,2,3], [3,5], [5,9,0]] == True
   engarzada [[1,4,5], [5,0], [1,0]]   == False
   engarzada [[1,4,5], [], [1,0]]      == False
   engarzada [[2]]                     == True

Soluciones

-- 1ª solución:
engarzada :: Eq a => [[a]] -> Bool
engarzada (xs:ys:xss) =
     not (null xs) && not (null ys) && last xs == head ys
  && engarzada (ys:xss)
engarzada _ = True
 
-- 2ª solución:
engarzada2 :: Eq a => [[a]] -> Bool
engarzada2 (xs:ys:xss) =
  and [ not (null xs)
      , not (null ys)
      , last xs == head ys
      , engarzada2 (ys:xss) ]
engarzada2 _ = True
 
-- 3ª solución:
engarzada3 :: Eq a => [[a]] -> Bool
engarzada3 xss =
  and [ not (null xs) && not (null ys) && last xs == head ys
      | (xs,ys) <- zip xss (tail xss)]
 
-- 4ª solución:
engarzada4 :: Eq a => [[a]] -> Bool
engarzada4 xss =
  all engarzados (zip xss (tail xss))
  where engarzados (xs,ys) =
          not (null xs) && not (null ys) && last xs == head ys
 
-- 5ª solución:
engarzada5 :: Eq a => [[a]] -> Bool
engarzada5 xss =
  all engarzados (zip xss (tail xss))
  where engarzados ([],_)   = False
        engarzados (_,[])   = False
        engarzados (xs,y:_) = last xs == y
 
-- 6ª solución:
engarzada6 :: Eq a => [[a]] -> Bool
engarzada6 xss =
  and (zipWith engarzados xss (tail xss))
  where engarzados [] _     = False
        engarzados _  []    = False
        engarzados xs (y:_) = last xs == y

3 soluciones de “Listas engarzadas

  1. Chema Cortés
    engarzada :: Eq a => [[a]] -> Bool
    engarzada xss = and $ zipWith cadena xss (tail xss)
      where cadena [] _  = False
            cadena _ []  = False
            cadena xs ys = last xs == head ys
  2. enrnarbej
    engarzada :: Eq a => [[a]] -> Bool
    engarzada (x:y:xs) = not (null x) &&
                         not (null y) &&
                         last x == head y &&
                         engarzada (y:xs) 
    engarzada _ = True
  3. Juanjo Ortega (juaorture)
    engarzada :: Eq a => [[a]] -> Bool
    engarzada []              = True
    engarzada [_]             = True
    engarzada (xs:(y:ys):xss)
      | any (==True) (map null (xs:(y:ys):xss)) = False
      | otherwise = last xs == y && engarzada (ys:xss)
    engarzada _               = False

Escribe tu solución

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