Menu Close

Rotaciones de un número

Definir la función

   rotacionesNumero :: Integer -> [Integer]

(rotacionesNumero n) es la lista de las rotaciones obtenidas desplazando el primer dígito de n al final. Por ejemplo,

   rotacionesNumero 325  ==  [325,253,532]

Soluciones

-- 1ª definición (por comprensión)
-- ===============================
 
rotacionesNumero1 :: Integer -> [Integer]
rotacionesNumero1 n = [read xs | xs <- rotaciones (show n)]
 
-- (rotaciones xs) es la lista de las rotaciones obtenidas desplazando
-- el primer elemento xs al final. Por ejemplo,
--    rotaciones [2,3,5]  ==  [[2,3,5],[3,5,2],[5,2,3]]
rotaciones :: [a] -> [[a]]
rotaciones xs = take (length xs) (iterate rota xs)
 
-- (rota xs) es la lista añadiendo el primer elemento de xs al
-- final. Por ejemplo, 
--    rota [3,2,5,7]  ==  [2,5,7,3]
rota :: [a] -> [a]
rota (x:xs) = xs ++ [x]
 
-- 2ª definición (con map)
-- =======================
 
rotacionesNumero2 :: Integer -> [Integer]
rotacionesNumero2 n = map read (rotaciones (show n))
 
-- 3ª definición (sin argumentos)
-- ==============================
 
rotacionesNumero3 :: Integer -> [Integer]
rotacionesNumero3 = map read . rotaciones . show

2 soluciones de “Rotaciones de un número

  1. M Miranda
     
    rotacionesNumero :: Integer -> [Integer]
    rotacionesNumero n = [read ((drop x xs)++(take x xs))|let xs = show n, x<-[0..length xs -1]]
  2. Chema Cortés
    rotacionesNumero :: Integer -> [Integer]
    rotacionesNumero n = take (length ns) $ map read $ iterate rotl ns
        where ns = show n
              rotl (x : xs) = xs ++ [x]

Escribe tu solución

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