Rotaciones de un número
Definir la función
1 |
rotacionesNumero :: Integer -> [Integer] |
(rotacionesNumero n) es la lista de las rotaciones obtenidas desplazando el primer dígito de n al final. Por ejemplo,
1 |
rotacionesNumero 325 == [325,253,532] |
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 |
-- 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 Comentarios