Subnúmeros pares
Los subnúmeros de un número x son los números que se pueden formar con dígitos de x en posiciones consecutivas. Por ejemplo, el número 254 tiene 6 subnúmeros: 2, 5, 4, 25, 54 y 254.
Definir las funciones
1 2 |
subnumeros :: Integer -> [Integer] nSubnumerosPares :: Integer -> Integer |
tales que
- (subnumerosPares x) es la lista de los subnúmeros pares de x. Por ejemplo,
1 2 3 |
subnumerosPares 254 == [2,254,54,4] subnumerosPares 154 == [154,54,4] subnumerosPares 15 == [] |
- (nSubnumerosPares x) es la cantidad de subnúmeros pares de x. Por ejemplo,
1 2 |
nSubnumerosPares 254 == 4 nSubnumerosPares2 (4^(10^6)) == 90625258498 |
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import Data.List ( genericLength , inits , tails ) subnumerosPares :: Integer -> [Integer] subnumerosPares n = filter even (subnumeros n) -- (subnumeros n) es la lista de los subnúmeros de n. Por ejemplo, -- subnumeros 254 == [2,25,5,254,54,4] subnumeros :: Integer -> [Integer] subnumeros n = [read x | x <- sublistas (show n)] -- (sublistas xs) es la lista de las sublistas de xs. Por ejemplo, -- sublistas "abc" == ["a","ab","b","abc","bc","c"] sublistas :: [a] -> [[a]] sublistas xs = concat [init (tails ys) | ys <- tail (inits xs)] -- 1ª definición -- ============= nSubnumerosPares :: Integer -> Integer nSubnumerosPares = genericLength . subnumerosPares -- 2ª definición -- ============= nSubnumerosPares2 :: Integer -> Integer nSubnumerosPares2 = sum . posicionesDigitosPares -- (posicionesDigitosPares x) es la lista de las posiciones de los -- dígitos pares de x. Por ejemplo, -- posicionesDigitosPares 254 == [1,3] posicionesDigitosPares :: Integer -> [Integer] posicionesDigitosPares x = [n | (n,y) <- zip [1..] (show x) , y `elem` "02468"] -- Comparación de eficiencia -- λ> nSubnumerosPares (2^(10^3)) -- 22934 -- (2.83 secs, 3,413,414,872 bytes) -- λ> nSubnumerosPares2 (2^(10^3)) -- 22934 -- (0.01 secs, 0 bytes) |
5 Comentarios