{"id":6208,"date":"2021-03-26T06:00:54","date_gmt":"2021-03-26T04:00:54","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=6208"},"modified":"2021-04-02T08:58:57","modified_gmt":"2021-04-02T06:58:57","slug":"sucesiones-de-sumas-digitales","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/sucesiones-de-sumas-digitales\/","title":{"rendered":"Sucesiones de sumas digitales"},"content":{"rendered":"<p>La sucesi\u00f3n de las sumas digitales definida por un n\u00famero a es  sucesi\u00f3n a(n) tal que a(0) = a y a(n+1) es la suma de a(n) y los d\u00edgitos de a(n). Por ejemplo, los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 1 son<\/p>\n<pre lang=\"text\">\n   1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107,...\n<\/pre>\n<p>Se observa que el menor n\u00famero que no pertenece a la sucesi\u00f3n anterior es 3. Los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 3 son<\/p>\n<pre lang=\"text\">\n   3,6,12,15,21,24,30,33,39,51,57,69,84,96,111,114,...\n<\/pre>\n<p>Se observa que el menor n\u00famero que no pertenece a las 2  anteriores es 5. Los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 5 son<\/p>\n<pre lang=\"text\">\n   5,10,11,13,17,25,32,37,47,58,71,79,95,109,119,130,...\n<\/pre>\n<p>Se observa que el menor n\u00famero que no pertenece a las 3 sucesiones anteriores es 7. Los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 7 son<\/p>\n<pre lang=\"text\">\n   7,14,19,29,40,44,52,59,73,83,94,107,115,122,127,137,...\n<\/pre>\n<p>Se observa que el menor n\u00famero que no pertenece a las 4  anteriores es 9. Los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 9 son<\/p>\n<pre lang=\"text\">\n   9,18,27,36,45,54,63,72,81,90,99,117,126,135,144,153,...\n<\/pre>\n<p>Se observa que el menor n\u00famero que no pertenece a las 5 sucesiones anteriores es 20. Los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 20 son<\/p>\n<pre lang=\"text\">\n   20,22,26,34,41,46,56,67,80,88,104,109,119,130,134,142,...\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   sucesionSucesionesSumasDigitales :: [[Integer]]\n<\/pre>\n<p>tal que sus elementos son las sucesiones de sumas parciales tal que el primer elemento de cada sucesi\u00f3n es el menor elemento que no pertenece a las sucesiones anteriores. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   \u03bb> map (take 4) (take 8 sucesionSucesionesSumasDigitales)\n   [[1,2,4,8],[3,6,12,15],[5,10,11,13],[7,14,19,29],\n    [9,18,27,36],[20,22,26,34],[31,35,43,50],[42,48,60,66]]\n   \u03bb> take 10 (sucesionSucesionesSumasDigitales3 !! 1000)\n   [10199,10219,10232,10240,10247,10261,10271,10282,10295,10312]\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nsucesionSucesionesSumasDigitales :: [[Integer]]\nsucesionSucesionesSumasDigitales =\n  map aux [1..]\n  where aux 1 = sucesionSumasDigitales 1\n        aux n = sucesionSumasDigitales m\n          where m = head [a | a <- [1..],\n                              all (a `noPertenece`)\n                                  [aux k | k <- [1..n-1]]]\n\n-- (sucesionSumasDigitales a) es la sucesi\u00f3n de las sumas digitales\n-- definida por un n\u00famero a. Por ejemplo,\n--    \u03bb> take 16 (sucesionSumasDigitales 1)\n--    [1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107]\n--    \u03bb> take 16 (sucesionSumasDigitales 3)\n--    [3,6,12,15,21,24,30,33,39,51,57,69,84,96,111,114]\n--    \u03bb> take 16 (sucesionSumasDigitales 5)\n--    [5,10,11,13,17,25,32,37,47,58,71,79,95,109,119,130]\n--    \u03bb> take 16 (sucesionSumasDigitales 7)\n--    [7,14,19,29,40,44,52,59,73,83,94,107,115,122,127,137]\n--    \u03bb> take 16 (sucesionSumasDigitales 9)\n--    [9,18,27,36,45,54,63,72,81,90,99,117,126,135,144,153]\n--    \u03bb> take 16 (sucesionSumasDigitales 20)\n--    [20,22,26,34,41,46,56,67,80,88,104,109,119,130,134,142]\nsucesionSumasDigitales :: Integer -> [Integer]\nsucesionSumasDigitales a =\n  iterate siguienteSumaDigital a\n\n-- (siguienteSumaDigital a) es el siguiente de a en la sucesi\u00f3n de sumas\n-- digitales. Por ejemplo,\n--    siguienteSumaDigital 23 == 28\nsiguienteSumaDigital :: Integer -> Integer\nsiguienteSumaDigital a =\n  a + sum (digitos a)\n\n-- (digitos n) es la lista de los d\u00edgitos de n. Por ejemplo,\n--    digitos 325 == [3,2,5]\ndigitos :: Integer -> [Integer]\ndigitos a = [read [c] | c <-show a]\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  x < head (dropWhile (<x) ys)\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nsucesionSucesionesSumasDigitales2 :: [[Integer]]\nsucesionSucesionesSumasDigitales2 =\n  map sucesionSumasDigitales autonumeros\n\n-- (autonumero n) se verifica si n es un auton\u00famero; es decir, n\u00fameros\n-- que no se pueden escribir como la suma de un n\u00famero k y los d\u00edgitos\n-- de k. Por ejemplo,\n--    autonumero 5  == True\n--    autonumero 21 == False\nautonumero :: Integer -> Bool\nautonumero n =\n  all (\/=n) [k + sum (digitos k) | k <- [1..n]]\n\n-- autonumeros es la lista de los auton\u00fameros. Por ejemplo,\n--    \u03bb> take 20 autonumeros\n--    [1,3,5,7,9,20,31,42,53,64,75,86,97,108,110,121,132,143,154,165]\nautonumeros :: [Integer]\nautonumeros = filter autonumero [1..]\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nsucesionSucesionesSumasDigitales3 :: [[Integer]]\nsucesionSucesionesSumasDigitales3 = aux [1..]\n  where aux xs = sucesion xs : aux (diferencia xs (sucesion xs))\n        sucesion xs = sucesionSumasDigitales (head xs)\n\n-- (diferencia xs ys) es la diferencia las listas infinitas ordenadas\n-- crecientes xs e ys. Por ejemplo,\n--    \u03bb> take 8 (diferencia [1..] [2,4..])\n--    [1,3,5,7,9,11,13,15]\ndiferencia :: [Integer] -> [Integer] -> [Integer]\ndiferencia (x:xs) (y:ys)\n  | x == y    = diferencia xs ys\n  | otherwise = x : diferencia xs (y:ys)\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 de las sumas digitales definida por un n\u00famero a es sucesi\u00f3n a(n) tal que a(0) = a y a(n+1) es la suma de a(n) y los d\u00edgitos de a(n). Por ejemplo, los primeros t\u00e9rminos de la sucesi\u00f3n de las sumas digitales definida por 1 son 1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107,&#8230; Se observa que el menor n\u00famero que&#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\/6208"}],"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=6208"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6208\/revisions"}],"predecessor-version":[{"id":6258,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/6208\/revisions\/6258"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=6208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=6208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=6208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}