{"id":3683,"date":"2018-02-02T06:00:11","date_gmt":"2018-02-02T04:00:11","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3683"},"modified":"2018-02-19T07:59:26","modified_gmt":"2018-02-19T05:59:26","slug":"digitos-iniciales","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/digitos-iniciales\/","title":{"rendered":"D\u00edgitos iniciales"},"content":{"rendered":"<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   digitosIniciales        :: [Int]\n   graficaDigitosIniciales :: Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>digitosIniciales es la lista de los d\u00edgitos iniciales de los n\u00fameros naturales. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> take 100 digitosIniciales\n     [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,\n      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,\n      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,\n      9,9,9,9,9,9,9,9,9,9]\n<\/pre>\n<ul>\n<li>(graficaDigitosIniciales n) dibuja la gr\u00e1fica de los primeros n t\u00e9rminos de la sucesi\u00f3n digitosIniciales. Por ejemplo, (graficaDigitosIniciales 100) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_100.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_100.png?resize=640%2C480\" alt=\"Digitos_iniciales_100\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3686\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_100.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_100.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_100.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_100.png?resize=150%2C112&amp;ssl=1 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><br \/>\ny (graficaDigitosIniciales 1000) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_1000.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_1000.png?resize=640%2C480\" alt=\"Digitos_iniciales_1000\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3687\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_1000.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_1000.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_1000.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/02\/Digitos_iniciales_1000.png?resize=150%2C112&amp;ssl=1 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/li>\n<\/ul>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Graphics.Gnuplot.Simple\n\n-- 1\u00aa definici\u00f3n\n-- =============\n\ndigitosIniciales :: [Int]\ndigitosIniciales = map digitoInicial [0..]\n\ndigitoInicial :: Integer -> Int\ndigitoInicial n = read [head (show n)]\n\n-- 2\u00aa definici\u00f3n\n-- =============\n\ndigitosIniciales2 :: [Int]\ndigitosIniciales2 = map (read . return . head . show) [0..]\n\n-- 3\u00aa definici\u00f3n\n-- =============\n\ndigitosIniciales3 :: [Int]\ndigitosIniciales3 = map digitoInicial3 [0..]\n\ndigitoInicial3 :: Integer -> Int\ndigitoInicial3 = fromInteger . until (< 10) (`div` 10)\n\n-- 4\u00aa definici\u00f3n\n-- =============\n\ndigitosIniciales4 :: [Int]\ndigitosIniciales4 = map (fromInteger . until (< 10) (`div` 10)) [0..]\n\n-- 5\u00aa definici\u00f3n\n-- =============\n\ndigitosIniciales5 :: [Int]\ndigitosIniciales5 =\n  0 : concat [replicate k x | k <- [10^n | n <- [0..]]\n                            , x <- [1..9]]\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n--    \u03bb> digitosIniciales !! (2*10^6)\n--    2\n--    (0.46 secs, 320,145,984 bytes)\n--    \u03bb> digitosIniciales2 !! (2*10^6)\n--    2\n--    (0.46 secs, 320,143,288 bytes)\n--    \u03bb> digitosIniciales3 !! (2*10^6)\n--    2\n--    (0.17 secs, 320,139,216 bytes)\n--    \u03bb> digitosIniciales4 !! (2*10^6)\n--    2\n--    (0.55 secs, 320,139,248 bytes)\n--    \u03bb> digitosIniciales5 !! (2*10^6)\n--    2\n--    (0.12 secs, 224,158,992 bytes)\n\ngraficaDigitosIniciales :: Int -> IO ()\ngraficaDigitosIniciales n =\n  plotList [ Key Nothing\n           , Title (\"graficaDigitosIniciales \" ++ show n)\n           , PNG (\"Digitos_iniciales_\" ++ show n ++ \".png\" )\n           ]\n           (take n digitosIniciales)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Definir las funciones digitosIniciales :: [Int] graficaDigitosIniciales :: Int -> IO () tales que digitosIniciales es la lista de los d\u00edgitos iniciales de los n\u00fameros naturales. Por ejemplo, \u03bb> 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\u00e1fica de los primeros n t\u00e9rminos de la sucesi\u00f3n digitosIniciales. Por ejemplo, (graficaDigitosIniciales 100) dibuja&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[5],"tags":[8,12,30,368,376,71,10,11,309,95,19,371,33,47,367],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3683"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=3683"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3683\/revisions"}],"predecessor-version":[{"id":3773,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3683\/revisions\/3773"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}