Sucesión duplicadora
Para cada entero positivo n, existe una única sucesión que empieza en 1, termina en n y en la que cada uno de sus elementos es el doble de su anterior o el doble más uno. Dicha sucesión se llama la sucesión duplicadora de n. Por ejemplo, la sucesión duplicadora de 13 es [1, 3, 6, 13], ya que
1 2 3 |
3 = 2*1 +1 6 = 2*3 13 = 2*6 +1 |
Definir la función
1 |
duplicadora :: Integer -> [Integer] |
tal que (duplicadora n) es la sucesión duplicadora de n. Por ejemplo,
1 2 3 |
duplicadora 13 == [1,3,6,13] duplicadora 17 == [1,2,4,8,17] length (duplicadora (10^40000)) == 132878 |
Soluciones
1 2 3 4 5 6 7 8 9 |
-- 1ª definición duplicadora :: Integer -> [Integer] duplicadora x = reverse (takeWhile (>=1) (iterate (`div` 2) x)) -- 2ª definición duplicadora2 :: Integer -> [Integer] duplicadora2 = reverse . takeWhile (>=1) . iterate (`div` 2) |
5 Comentarios