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
3 = 2*1 +1
6 = 2*3
13 = 2*6 +1 |
3 = 2*1 +1
6 = 2*3
13 = 2*6 +1
Definir la función
duplicadora :: Integer -> [Integer] |
duplicadora :: Integer -> [Integer]
tal que (duplicadora n) es la sucesión duplicadora de n. Por ejemplo,
duplicadora 13 == [1,3,6,13]
duplicadora 17 == [1,2,4,8,17]
length (duplicadora (10^40000)) == 132878 |
duplicadora 13 == [1,3,6,13]
duplicadora 17 == [1,2,4,8,17]
length (duplicadora (10^40000)) == 132878
Soluciones
-- 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) |
-- 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)
Se puede imprimir o compartir con
5 soluciones de “Sucesión duplicadora”