{"id":6274,"date":"2021-04-14T06:00:46","date_gmt":"2021-04-14T04:00:46","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=6274"},"modified":"2021-04-21T07:35:42","modified_gmt":"2021-04-21T05:35:42","slug":"raices-digitales-de-sucesiones-de-raices-digitales","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/raices-digitales-de-sucesiones-de-raices-digitales\/","title":{"rendered":"Ra\u00edces digitales de sucesiones de ra\u00edces digitales"},"content":{"rendered":"<p>La ra\u00edz digital de un n\u00famero entero positivo n es el d\u00edgito que resulta al sumar sus d\u00edgitos, volviendo a sumar reiteradamente los resultados de esa suma y de las siguientes hasta que la suma sea un n\u00famero de un d\u00edgito, al que se llama la ra\u00edz digital del n\u00famero n y se representa pod D(n). Por ejemplo, la ra\u00edz digital del n\u00famero 2345 es 6, porque 2+3+4+5+1 = 15 y sumando los d\u00edgitos del 15 resulta 6.<\/p>\n<p>La sucesi\u00f3n de las raices digitales definida por un n\u00famero a es la sucesi\u00f3n a(n) tal que a(0) = a y a(n+1) es la suma de a(n) y la ra\u00edz d\u00edgital de a(n). Por ejemplo, los primeros t\u00e9rminos de la sucesi\u00f3n de las ra\u00edces digitales definida por 1 son<\/p>\n<pre lang=\"text\">\n   1,2,4,8,16,23,28,29,31,35,43,50,55,56,58,62,70,77,82,83,85,89,...\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   raicesDigitalesSucesionRaicesDigitales :: Integer -> [Integer]\n<\/pre>\n<p>tal que (raicesDigitalesSucesionRaicesDigitales a) es la lista de las ra\u00edces digitales de los elementos de la sucesi\u00f3n de ra\u00edces digitales definidas por a. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 1)\n   [1,2,4,8,7,5,1,2,4,8,7,5,1,2,4,8,7,5,1,2]\n   \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 2021)\n   [5,1,2,4,8,7,5,1,2,4,8,7,5,1,2,4,8,7,5,1]\n   \u03bb> raicesDigitalesSucesionRaicesDigitales (9^100) !! (10^9)\n   9\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (cycle)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nraicesDigitalesSucesionRaicesDigitales :: Integer -> [Integer]\nraicesDigitalesSucesionRaicesDigitales a =\n  map raizDigital (sucesionRaicesDigitales a)\n\n-- (sucesionRaicesDigitales a) es la sucesi\u00f3n de las ra\u00edces digitales\n-- definida por un n\u00famero a. Por ejemplo,\n--    \u03bb> take 22 (sucesionRaicesDigitales 1)\n--    [1,2,4,8,16,23,28,29,31,35,43,50,55,56,58,62,70,77,82,83,85,89]\n--    \u03bb> take 22 (sucesionRaicesDigitales 3)\n--    [3,6,12,15,21,24,30,33,39,42,48,51,57,60,66,69,75,78,84,87,93,96]\n--    \u03bb> take 22 (sucesionRaicesDigitales 5)\n--    [5,10,11,13,17,25,32,37,38,40,44,52,59,64,65,67,71,79,86,91,92,94]\n--    \u03bb> take 22 (sucesionRaicesDigitales 7)\n--    [7,14,19,20,22,26,34,41,46,47,49,53,61,68,73,74,76,80,88,95,100,101]\n--    \u03bb> take 22 (sucesionRaicesDigitales 9)\n--    [9,18,27,36,45,54,63,72,81,90,99,108,117,126,135,144,153,162,171,180,189,198]\nsucesionRaicesDigitales :: Integer -> [Integer]\nsucesionRaicesDigitales a =\n  iterate siguienteRaizDigital a\n\n-- (siguienteRaizDigital a) es el siguiente de a en la sucesi\u00f3n de raices\n-- digitales. Por ejemplo,\n--    siguienteRaizDigital 23 == 28\nsiguienteRaizDigital :: Integer -> Integer\nsiguienteRaizDigital a =\n  a + raizDigital a\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-- (noPertenece x ys) se verifica si x no pertenece a la lista infinita\n-- ordenada creciente ys. Por ejemplo,\n--    noPertenece 2 [1,3..] == True\n--    noPertenece 5 [1,3..] == False\nnoPertenece :: Integer -> [Integer] -> Bool\nnoPertenece x ys =\n  not (x `pertenece` ys)\n\n-- (Pertenece x ys) se verifica si x pertenece a la lista infinita\n-- ordenada creciente ys. Por ejemplo,\n--    pertenece 5 [1,3..] == True\n--    pertenece 2 [1,3..] == False\npertenece :: Integer -> [Integer] -> Bool\npertenece x ys =\n  x == head (dropWhile (<x) ys)\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\n-- En el ejercicio aterior vimos que s\u00f3lo hay 5 sucesiones de r\u00edace\n-- digitales: las generadas por 1, 3, 5, 7 y 9. Las ra\u00edces digitales de\n-- dichas sucesiones son\n--    \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 1)\n--    [1,2,4,8,7,5,1,2,4,8,7,5,1,2,4,8,7,5,1,2]\n--    \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 3)\n--    [3,6,3,6,3,6,3,6,3,6,3,6,3,6,3,6,3,6,3,6]\n--    \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 5)\n--    [5,1,2,4,8,7,5,1,2,4,8,7,5,1,2,4,8,7,5,1]\n--    \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 7)\n--    [7,5,1,2,4,8,7,5,1,2,4,8,7,5,1,2,4,8,7,5]\n--    \u03bb> take 20 (raicesDigitalesSucesionRaicesDigitales 9)\n--    [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]\n-- Se observa que todas son peri\u00f3dicas.\n\nraicesDigitalesSucesionRaicesDigitales2 :: Integer -> [Integer]\nraicesDigitalesSucesionRaicesDigitales2 a =\n  cycle (d : takeWhile (\/= d) (tail (raicesDigitalesSucesionRaicesDigitales a)))\n  where d = raizDigital a\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nraicesDigitalesSucesionRaicesDigitales3 :: Integer -> [Integer]\nraicesDigitalesSucesionRaicesDigitales3 a =\n  case (raizDigital a) of\n    1 -> cycle [1,2,4,8,7,5]\n    2 -> cycle [2,4,8,7,5,1]\n    3 -> cycle [3,6]\n    4 -> cycle [4,8,7,5,1,2]\n    5 -> cycle [5,1,2,4,8,7]\n    6 -> cycle [6,3]\n    7 -> cycle [7,5,1,2,4,8]\n    8 -> cycle [8,7,5,1,2,4]\n    9 -> cycle [9]\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> raicesDigitalesSucesionRaicesDigitales (9^100) !! (3*10^6)\n--    9\n--    (4.23 secs, 2,160,860,128 bytes)\n--    \u03bb> raicesDigitalesSucesionRaicesDigitales2 (9^100) !! (3*10^6)\n--    9\n--    (0.02 secs, 103,768 bytes)\n--    \u03bb> raicesDigitalesSucesionRaicesDigitales3 (9^100) !! (3*10^6)\n--    9\n--    (0.02 secs, 103,056 bytes)\n--\n--    \u03bb> raicesDigitalesSucesionRaicesDigitales2 (9^100) !! (10^9)\n--    9\n--    (2.09 secs, 103,608 bytes)\n--    \u03bb> raicesDigitalesSucesionRaicesDigitales3 (9^100) !! (10^9)\n--    9\n--    (2.25 secs, 102,952 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 ra\u00edz digital de un n\u00famero entero positivo n es el d\u00edgito que resulta al sumar sus d\u00edgitos, volviendo a sumar reiteradamente los resultados de esa suma y de las siguientes hasta que la suma sea un n\u00famero de un d\u00edgito, al que se llama la ra\u00edz digital del n\u00famero n y se representa pod&#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\/6274"}],"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=6274"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6274\/revisions"}],"predecessor-version":[{"id":6319,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6274\/revisions\/6319"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=6274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=6274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=6274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}