{"id":3095,"date":"2017-03-15T06:00:33","date_gmt":"2017-03-15T04:00:33","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3095"},"modified":"2020-01-21T17:09:45","modified_gmt":"2020-01-21T15:09:45","slug":"numeros-cubifinitos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-cubifinitos\/","title":{"rendered":"N\u00fameros cubifinitos"},"content":{"rendered":"<p>El enunciado del problema <a href=\"http:\/\/bit.ly\/2nCiMxz\">N\u00fameros cubifinitos<\/a> de <a href=\"https:\/\/www.aceptaelreto.com\">\u00a1Acepta el reto!<\/a> es el siguiente<\/p>\n<blockquote><p>\n  Se dice que un n\u00famero es cubifinito cuando al elevar todos sus d\u00edgitos al cubo y sumarlos el resultado o bien es 1 o bien es un n\u00famero cubifinito.<\/p>\n<p>  Por ejemplo, el n\u00famero 1243 es cubifinito, pues al elevar todos sus d\u00edgitos al cubo obtenemos 100 que es cubifinito.<\/p>\n<p>  Por su parte, el 513 no es cubifinito, pues al elevar al cubo sus d\u00edgitos conseguimos el 153 que nunca podr\u00e1 ser cubifinito, pues la suma de los cubos de sus d\u00edgitos vuelve a dar 153.\n<\/p><\/blockquote>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   esCubifinito :: Int -> Bool\n   grafica :: Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(esCubifinito n) se verifica si n es un n\u00famero cubifinito. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     esCubifinito 1      ==  True\n     esCubifinito 10     ==  True\n     esCubifinito 1243   ==  True\n     esCubifinito 87418  ==  True\n     esCubifinito 513    ==  False\n<\/pre>\n<ul>\n<li>(grafica n) dibuja la gr\u00e1fica de la sucesi\u00f3n de los primeros n n\u00fameros cubifinitos. Por ejemplo, al evaluar (grafica 50) se dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/03\/Numeros_cubifinitos.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/03\/Numeros_cubifinitos.png?resize=640%2C480\" alt=\"Numeros_cubifinitos\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3096\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/03\/Numeros_cubifinitos.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/03\/Numeros_cubifinitos.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/03\/Numeros_cubifinitos.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/03\/Numeros_cubifinitos.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 soluci\u00f3n\n-- ===========\n\nesCubifinito :: Int -> Bool\nesCubifinito n = aux [n]\n  where aux (n:ns) | n == 1      = True\n                   | n `elem` ns = False\n                   | otherwise   = aux (sumaCubosDigitos n : n : ns)\n\n-- (sumaCubosDigitos b) es la suma de los cubos de los d\u00edgitos de n. Por\n-- ejemplo, \n--    sumaCubosDigitos 513  ==  153\nsumaCubosDigitos :: Int -> Int\nsumaCubosDigitos = sum . map (^3) . digitos\n\n-- (digitos n) es la lista de los d\u00edgitos de n. Por ejemplo,\n--    digitos 513  ==  [5,1,3]\ndigitos :: Int -> [Int]\ndigitos n = [read [c] | c <- show n]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nesCubifinito2 :: Int -> Bool\nesCubifinito2 n = primerRepetido (orbita n) == 1\n\n-- (orbita n) es la lista cuyo primer elemento es n y los siguientes se\n-- obtienen sumando los cubos de los digitos del elemento anterior. Por\n-- ejemplo,  \n--    take 9 (orbita 2)  ==  [2,8,512,134,92,737,713,371,371]\norbita :: Int -> [Int]\norbita n = iterate sumaCubosDigitos n\n\n-- (primerRepetido xs) es el primer elemento repetido de la lista\n--  xs. Por ejemplo, \n--    primerRepetido [3,7,5,7,2]  ==  7\nprimerRepetido :: Eq a => [a] -> a\nprimerRepetido xs = aux xs []\n  where\n    aux (x:xs') ys | x `elem` ys = x\n                   | otherwise   = aux xs' (x:ys) \n\ngrafica :: Int -> IO ()\ngrafica n = \n    plotList [Key Nothing, PNG \"Numeros_cubifinitos.png\"]\n             (zip [1..n] [x | x <- [1..], esCubifinito x])\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El enunciado del problema N\u00fameros cubifinitos de \u00a1Acepta el reto! es el siguiente Se dice que un n\u00famero es cubifinito cuando al elevar todos sus d\u00edgitos al cubo y sumarlos el resultado o bien es 1 o bien es un n\u00famero cubifinito. Por ejemplo, el n\u00famero 1243 es cubifinito, pues al elevar todos sus d\u00edgitos&#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":[269,8,59,26,38,71,89,11,309,6,9],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3095"}],"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=3095"}],"version-history":[{"count":6,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3095\/revisions"}],"predecessor-version":[{"id":5425,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3095\/revisions\/5425"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}