{"id":6267,"date":"2021-04-12T06:00:36","date_gmt":"2021-04-12T04:00:36","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=6267"},"modified":"2021-04-19T10:15:13","modified_gmt":"2021-04-19T08:15:13","slug":"raices-digitales-de-los-numeros-de-fibonacci","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/raices-digitales-de-los-numeros-de-fibonacci\/","title":{"rendered":"Ra\u00edces digitales de los n\u00fameros de Fibonacci"},"content":{"rendered":"<p>La <a href=\"https:\/\/bit.ly\/39PK9yZ\">sucesi\u00f3n Fibonacci<\/a> es la siguiente sucesi\u00f3n infinita de n\u00fameros naturales:<\/p>\n<pre lang=\"text\">\n   1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...\n<\/pre>\n<p>La sucesi\u00f3n comienza con los n\u00fameros 1 y 1 y, a partir de estos, cada t\u00e9rmino es la suma de los dos anteriores.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   raizDigitalFibonacci :: Integer -> Integer\n<\/pre>\n<p>tal que (raizDigitalFibonacci n) es la ra\u00edz digital del n-\u00e9simo n\u00famero de Fibonacci. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   raizDigitalFibonacci 6         ==  4\n   raizDigitalFibonacci 7         ==  3\n   raizDigitalFibonacci (3*10^7)  ==  1\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericIndex, cycle)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nraizDigitalFibonacci :: Integer -> Integer\nraizDigitalFibonacci =\n  raizDigital . fibonacci\n\n-- (fibonacci k) es el k-\u00e9simo n\u00famero de Fibonacci. Por ejemplo,\nfibonacci :: Integer -> Integer\nfibonacci 0 = 1\nfibonacci 1 = 1\nfibonacci n = fibonacci (n-1) + fibonacci (n-2)\n\n-- (raizDigital n) es la ra\u00edz digital de n. Por ejemplo,\n--    raizDigital 23451  ==  6\nraizDigital :: Integer -> Integer\nraizDigital n = 1 + (n-1) `mod` 9\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nraizDigitalFibonacci2 :: Integer -> Integer\nraizDigitalFibonacci2 n =\n  raizDigital (fibs `genericIndex` n)\n\n-- fibs es la la sucesi\u00f3n de los n\u00fameros de Fibonacci. Por ejemplo,\n--    take 14 fibs  == [1,1,2,3,5,8,13,21,34,55,89,144,233,377]\nfibs :: [Integer]\nfibs = 1 : scanl (+) 1 fibs\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\n-- En el c\u00e1lculo\n---   \u03bb> map raizDigitalFibonacci2 [0..47]\n---   [1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9,\n--     1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9]\n-- se observa que la lista es peri\u00f3dica con per\u00edodo\n--    1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9,\n\nraizDigitalFibonacci3 :: Integer -> Integer\nraizDigitalFibonacci3 n =\n  raicesDigitalesFibonacci `genericIndex` n\n\n-- raicesDigitalesFibonacci es la suceci\u00f3n de las ra\u00edces digitales de\n-- los n\u00fameros de Fibonacci. Por ejemplo,\n---   \u03bb> take 24 raicesDigitalesFibonacci\n---   [1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9]\nraicesDigitalesFibonacci :: [Integer]\nraicesDigitalesFibonacci =\n  concat (repeat [1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9])\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\nraizDigitalFibonacci4 :: Integer -> Integer\nraizDigitalFibonacci4 n =\n  raicesDigitalesFibonacci2 `genericIndex` n\n\n-- raicesDigitalesFibonacci2 es la suceci\u00f3n de las ra\u00edces digitales de\n-- los n\u00fameros de Fibonacci. Por ejemplo,\n---   \u03bb> take 24 raicesDigitalesFibonacci2\n---   [1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9]\nraicesDigitalesFibonacci2 :: [Integer]\nraicesDigitalesFibonacci2 =\n  cycle [1,1,2,3,5,8,4,3,7,1,8,9,8,8,7,6,4,1,5,6,2,8,1,9]\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> raizDigitalFibonacci 34\n--    8\n--    (7.88 secs, 3,560,871,624 bytes)\n--    \u03bb> raizDigitalFibonacci2 34\n--    8\n--    (0.01 secs, 106,896 bytes)\n--    \u03bb> raizDigitalFibonacci3 34\n--    8\n--    (0.01 secs, 106,568 bytes)\n--    \u03bb> raizDigitalFibonacci4 34\n--    8\n--    (0.01 secs, 107,512 bytes)\n--\n--    \u03bb> raizDigitalFibonacci2 (4*10^5)\n--    4\n--    (3.19 secs, 7,146,227,192 bytes)\n--    \u03bb> raizDigitalFibonacci3 (4*10^5)\n--    4\n--    (0.05 secs, 80,635,064 bytes)\n--    \u03bb> raizDigitalFibonacci4 (4*10^5)\n--    4\n--    (0.05 secs, 57,701,392 bytes)\n--\n--    \u03bb> raizDigitalFibonacci3 (10^7)\n--    4\n--    (1.34 secs, 2,013,435,912 bytes)\n--    \u03bb> raizDigitalFibonacci4 (10^7)\n--    4\n--    (0.66 secs, 1,440,100,712 bytes)\n--\n--    \u03bb> raizDigitalFibonacci4 (3*10^7)\n--    1\n--    (1.92 secs, 4,320,102,368 bytes)\n<\/pre>\n<h4>Nuevas soluciones<\/h4>\n<ul>\n<li>En los comentarios se pueden escribir nuevas soluciones.\n<li>El c\u00f3digo se debe escribir entre una l\u00ednea con &#60;pre lang=&quot;haskell&quot;&#62; y otra con &#60;\/pre&#62;\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>La sucesi\u00f3n Fibonacci es la siguiente sucesi\u00f3n infinita de n\u00fameros naturales: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, &#8230; La sucesi\u00f3n comienza con los n\u00fameros 1 y 1 y, a partir de estos, cada t\u00e9rmino es la suma de los dos anteriores. Definir la funci\u00f3n raizDigitalFibonacci :: Integer&#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":[2],"tags":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6267"}],"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=6267"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6267\/revisions"}],"predecessor-version":[{"id":6308,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6267\/revisions\/6308"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=6267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=6267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=6267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}