Dígitos iniciales
Definir las funciones
1 2 |
digitosIniciales :: [Int] graficaDigitosIniciales :: Int -> IO () |
tales que
- digitosIniciales es la lista de los dígitos iniciales de los números naturales. Por ejemplo,
1 2 3 4 5 |
λ> take 100 digitosIniciales [0,1,2,3,4,5,6,7,8,9,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9] |
- (graficaDigitosIniciales n) dibuja la gráfica de los primeros n términos de la sucesión digitosIniciales. Por ejemplo, (graficaDigitosIniciales 100) dibuja
y (graficaDigitosIniciales 1000) dibuja
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import Graphics.Gnuplot.Simple -- 1ª definición -- ============= digitosIniciales :: [Int] digitosIniciales = map digitoInicial [0..] digitoInicial :: Integer -> Int digitoInicial n = read [head (show n)] -- 2ª definición -- ============= digitosIniciales2 :: [Int] digitosIniciales2 = map (read . return . head . show) [0..] -- 3ª definición -- ============= digitosIniciales3 :: [Int] digitosIniciales3 = map digitoInicial3 [0..] digitoInicial3 :: Integer -> Int digitoInicial3 = fromInteger . until (< 10) (`div` 10) -- 4ª definición -- ============= digitosIniciales4 :: [Int] digitosIniciales4 = map (fromInteger . until (< 10) (`div` 10)) [0..] -- 5ª definición -- ============= digitosIniciales5 :: [Int] digitosIniciales5 = 0 : concat [replicate k x | k <- [10^n | n <- [0..]] , x <- [1..9]] -- Comparación de eficiencia -- ========================= -- λ> digitosIniciales !! (2*10^6) -- 2 -- (0.46 secs, 320,145,984 bytes) -- λ> digitosIniciales2 !! (2*10^6) -- 2 -- (0.46 secs, 320,143,288 bytes) -- λ> digitosIniciales3 !! (2*10^6) -- 2 -- (0.17 secs, 320,139,216 bytes) -- λ> digitosIniciales4 !! (2*10^6) -- 2 -- (0.55 secs, 320,139,248 bytes) -- λ> digitosIniciales5 !! (2*10^6) -- 2 -- (0.12 secs, 224,158,992 bytes) graficaDigitosIniciales :: Int -> IO () graficaDigitosIniciales n = plotList [ Key Nothing , Title ("graficaDigitosIniciales " ++ show n) , PNG ("Digitos_iniciales_" ++ show n ++ ".png" ) ] (take n digitosIniciales) |
6 Comentarios