{"id":3417,"date":"2017-11-17T06:00:59","date_gmt":"2017-11-17T04:00:59","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3417"},"modified":"2017-11-25T13:37:04","modified_gmt":"2017-11-25T11:37:04","slug":"cadenas-de-sumas-de-factoriales-de-los-digitos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/cadenas-de-sumas-de-factoriales-de-los-digitos\/","title":{"rendered":"Cadenas de sumas de factoriales de los d\u00edgitos"},"content":{"rendered":"<p>Dado un n\u00famero n se considera la sucesi\u00f3n cuyo primer t\u00e9rmino es n y los restantes se obtienen sumando los factoriales de los d\u00edgitos del anterior. Por ejemplo, la sucesi\u00f3n que empieza en 69 es<\/p>\n<pre lang=\"text\">\n         69\n     363600  (porque 6! + 9! = 363600)  \n       1454  (porque 3! + 6! + 3! + 6! + 0! + 0! = 1454)\n        169  (porque 1! + 4! + 5! + 4! = 169)\n     363601  (porque 1! + 6! + 9! = 363601)\n       1454  (porque 3! + 6! + 3! + 6! + 0! + 1! = 1454)\n     ......\n<\/pre>\n<p>La cadena correspondiente a un n\u00famero n son los t\u00e9rminos de la sucesi\u00f3n que empieza en n hasta la primera repetici\u00f3n de un elemento en la sucesi\u00f3n. Por ejemplo, la cadena de 69 es<\/p>\n<pre lang=\"text\">\n   [69,363600,1454,169,363601,1454]\n<\/pre>\n<p>Consta de una parte no peri\u00f3dica ([69,363600]) y de una peri\u00f3dica ([1454,169,363601]).<\/p>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   cadena  :: Integer -> [Integer]\n   periodo :: Integer -> [Integer]\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(cadena n es la cadena correspondiente al n\u00famero n. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n      cadena 69    ==  [69,363600,1454,169,363601,1454]\n      cadena 145   ==  [145,145]\n      cadena 78    ==  [78,45360,871,45361,871]\n      cadena 569   ==  [569,363720,5775,10320,11,2,2]\n      cadena 3888  ==  [3888,120966,364324,782,45362,872,45362]\n      maximum [length (cadena n) | n <- [1..5000]]  ==  61\n      length (cadena 1479)                          ==  61\n<\/pre>\n<ul>\n<li>(periodo n) es la parte peri\u00f3dica de la cadena de n. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n      periodo 69    ==  [169,363601,1454]\n      periodo 145   ==  [145]\n      periodo 78    ==  [45361,871]\n      periodo 569   ==  [2]\n      periodo 3888  ==  [872,45362]\n      maximum [length (periodo n) | n <- [1..5000]]  ==  3\n      length (periodo 1479)                          ==  3\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- Definici\u00f3n de cadena\n-- ====================\n\ncadena :: Integer -> [Integer]\ncadena n = reverse (extension [n])\n\nextension :: [Integer] -> [Integer]\nextension (n:ns)\n  | m `elem` (n:ns) = m : n : ns\n  | otherwise       = extension (m : n : ns)\n  where m = siguiente n\n\nsiguiente :: Integer -> Integer\nsiguiente n =\n  sum [factorial d | d <- digitos n]\n\nfactorial :: Integer -> Integer\nfactorial n =\n  product [1..n]\n\ndigitos :: Integer -> [Integer]\ndigitos n =\n  [read [c] | c <- show n]\n\n-- Definici\u00f3n de periodo\n-- =====================\n\nperiodo :: Integer -> [Integer]\nperiodo n =\n  reverse (x : takeWhile (\/= x) xs)\n  where (x:xs) = reverse (cadena n)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Dado un n\u00famero n se considera la sucesi\u00f3n cuyo primer t\u00e9rmino es n y los restantes se obtienen sumando los factoriales de los d\u00edgitos del anterior. Por ejemplo, la sucesi\u00f3n que empieza en 69 es 69 363600 (porque 6! + 9! = 363600) 1454 (porque 3! + 6! + 3! + 6! + 0! +&#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":[4],"tags":[26,11,157,95,6,32,33,40,34],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3417"}],"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=3417"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3417\/revisions"}],"predecessor-version":[{"id":3447,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3417\/revisions\/3447"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}