Menu Close

Intercambio de la primera y última columna de una matriz

Las matrices se pueden representar mediante listas de listas. Por ejemplo, la matriz

   8 9 7 6
   4 7 6 5
   3 2 1 8

se puede representar por la lista

   [[8,9,7,6],[4,7,6,5],[3,2,1,8]]

Definir la función

   intercambia :: [[a]] -> [[a]]

tal que (intercambia xss) es la matriz obtenida intercambiando la primera y la última columna de xss. Por ejemplo,

   λ> intercambia [[8,9,7,6],[4,7,6,5],[3,2,1,8]]
   [[6,9,7,8],[5,7,6,4],[8,2,1,3]]

Soluciones

intercambia :: [[a]] -> [[a]]
intercambia = map intercambiaL
 
-- (intercambiaL xs) es la lista obtenida intercambiando el primero y el
-- último elemento de xs. Por ejemplo,
--    intercambiaL [8,9,7,6]  ==  [6,9,7,8]
intercambiaL :: [a] -> [a]
intercambiaL xs =
  last xs : tail (init xs) ++ [head xs]

Pensamiento

“¡Que difícil es,
cuando todo baja
no bajar también!”

Antonio Machado

7 soluciones de “Intercambio de la primera y última columna de una matriz

  1. adogargon
    intercambia :: [[a]] -> [[a]]
    intercambia xss = map atras xss
     
    atras :: [a] -> [a]
    atras (x:xs) = [last xs] ++ init xs ++ [x]
  2. luipromor
    intercambia :: [[a]] -> [[a]]
    intercambia =
      map (xs -> last xs : reverse (head xs : (reverse . tail . init) xs))
  3. frahidzam
    intercambia :: [[a]] -> [[a]]
    intercambia xss = [cambiaHyL xs | xs <- xss]
     
    cambiaHyL :: [a] -> [a]
    cambiaHyL (x:xs) = [last xs] ++ init xs ++ [x]
  4. ireprirod
    intercambia :: [[a]] -> [[a]]
    intercambia xss = map f xss
      where f (x:xs) = last xs: init xs ++ [x]
  5. alebarmor1
    intercambia :: [[a]] -> [[a]]
    intercambia xss = map f xss
      where f xs = [last xs] ++ tail (init xs) ++ [head xs]
  6. sermurgar
    intercambia :: [[a]] -> [[a]]
    intercambia xss = map intercambiaUno xss
     
    intercambiaUno :: [a] -> [a]
    intercambiaUno xs =
      [last xs] ++
      (reverse . tail . reverse . tail) xs ++
      [head xs]
  7. javmarcha1
    import Data.Matrix (switchCols, toLists, fromLists)
     
    -- 1º DEFINICIÓN
    intercambia :: [[a]] -> [[a]]
    intercambia []           = []
    intercambia ((x:xs):xss) = [last xs : init xs ++ [x]] ++ intercambia xss
     
    -- 2º DEFINICIÓN 
    intercambia2 :: [[a]] -> [[a]]
    intercambia2 xss =
      toLists (switchCols (ncolumnas xss) 1 (fromLists xss))
      where ncolumnas xss = length (head xss)

Escribe tu solución

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