{"id":3101,"date":"2017-03-16T06:00:41","date_gmt":"2017-03-16T04:00:41","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3101"},"modified":"2019-01-20T19:21:24","modified_gmt":"2019-01-20T17:21:24","slug":"por-3-o-mas-5","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/por-3-o-mas-5\/","title":{"rendered":"Por 3 o m\u00e1s 5"},"content":{"rendered":"<p>El enunciado del problema <a href=\"http:\/\/bit.ly\/2nHdYY3\">Por 3 o m\u00e1s 5<\/a> de <a href=\"https:\/\/www.aceptaelreto.com\">\u00a1Acepta el reto!<\/a> es el siguiente<\/p>\n<blockquote><p>\n  Cuenta la leyenda que un famoso matem\u00e1tico, tras aprender a sumar y multiplicar a la tierna edad de 3 a\u00f1os en apenas 5 d\u00edas, se dio cuenta de que, empezando por 1, pod\u00eda generar un mont\u00f3n de n\u00fameros sin m\u00e1s que multiplicar por 3 o sumar 5 a alguno de los que ya hubiera generado antes.<\/p>\n<p>  Por ejemplo, el 23 (edad a la que se casar\u00eda) lo obtuvo as\u00ed: ((1 + 5) \u00d7 3) + 5<br \/>\n  Por su parte el 77 (edad a la que tendr\u00eda su primer bisnieto) lo consigui\u00f3: (((1 \u00d7 3 + 5) \u00d7 3) \u00d7 3) + 5<\/p>\n<p>  Por mucho que lo intent\u00f3, algunos n\u00fameros, sin embargo, resultaron ser imposibles de obtener, como por ejemplo el 5, el 7 o el 15.\n<\/p><\/blockquote>\n<p>Se dice que un n\u00famero es <strong>generable<\/strong> si se puede escribir como una sucesi\u00f3n (quiz\u00e1 vac\u00eda) de multiplicaciones por 3 y sumas de 5 al n\u00famero 1.<\/p>\n<p>Definir las siguientes funciones<\/p>\n<pre lang=\"text\">\n   generables     :: [Integer]\n   generable      :: Integer -> Bool\n   arbolGenerable :: Integer -> Tree Integer\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>generables es la sucesi\u00f3n de los n\u00fameros generables. Por ejemplo,  <\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> take 20 generables\n     [1,3,6,8,9,11,13,14,16,18,19,21,23,24,26,27,28,29,31,32]\n     \u03bb> generables !! (10^6)\n     1250008\n<\/pre>\n<ul>\n<li>(generable x) se verifica si x es generable. Por ejemplo,   <\/li>\n<\/ul>\n<pre lang=\"text\">\n     generable 23       ==  True\n     generable 77       ==  True\n     generable 15       ==  False\n     generable 1250008  ==  True\n     generable 1250010  ==  False\n<\/pre>\n<ul>\n<li>(arbolGenerable x) es el \u00e1rbol de los n\u00fameros generables menores o iguales a x. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> putStrLn (drawTree (fmap show (arbolGenerable 11)))\n     1\n     |\n     +- 3\n     |  |\n     |  +- 9\n     |  |\n     |  `- 8\n     |\n     `- 6\n        |\n        `- 11\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Graphics.Gnuplot.Simple\n\ngenerables :: [Integer]\ngenerables = 1 : mezcla [3 * x | x <- generables]\n                        [5 + x | x <- generables]\n\n-- (mezcla xs ys) es la lista ordenada obtenida mezclando las dos listas\n-- ordenadas xs e ys, suponiendo que ambas son infinitas. Por ejemplo,\n--    take 10 (mezcla [2,12..] [5,15..])  ==  [2,5,12,15,22,25,32,35,42,45]\n--    take 10 (mezcla [2,22..] [5,15..])  ==  [2,5,15,22,25,35,42,45,55,62]\nmezcla :: Ord a => [a] -> [a] -> [a]\nmezcla us@(x:xs) vs@(y:ys)\n  | x < y     = x : mezcla xs vs\n  | x == y    = x : mezcla xs ys\n  | otherwise = y : mezcla us ys\n\ngenerable :: Integer -> Bool\ngenerable x =\n  x == head (dropWhile (<x) generables)\n\n-- 2\u00aa definici\u00f3n\ngenerable2 :: Integer -> Bool\ngenerable2 1 = True\ngenerable2 x =    (x `mod` 3 == 0 && generable2 (x `div` 3))\n               || (x > 5 && generable2 (x - 5))\n\ngenerables2 :: [Integer] \ngenerables2 = filter generable2 [1..]\n\narbolGenerable :: Integer -> Tree Integer\narbolGenerable n = aux 1\n  where aux x\n          | 3*x <= n &#038;&#038; 5+x <= n = Node x [aux (3*x), aux (5+x)] \n          | 3*x <= n             = Node x [aux (3*x)]\n          | 5+x <= n             = Node x [aux (5+x)]\n          | otherwise            = Node x [] \n\n-- 3\u00aa definici\u00f3n\ngenerable3 :: Integer -> Bool\ngenerable3 x =\n  x `elem` arbolGenerable x\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El enunciado del problema Por 3 o m\u00e1s 5 de \u00a1Acepta el reto! es el siguiente Cuenta la leyenda que un famoso matem\u00e1tico, tras aprender a sumar y multiplicar a la tierna edad de 3 a\u00f1os en apenas 5 d\u00edas, se dio cuenta de que, empezando por 1, pod\u00eda generar un mont\u00f3n de n\u00fameros sin&#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,6],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3101"}],"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=3101"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3101\/revisions"}],"predecessor-version":[{"id":3134,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3101\/revisions\/3134"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}