{"id":2433,"date":"2016-05-11T06:00:14","date_gmt":"2016-05-11T04:00:14","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=2433"},"modified":"2016-05-18T06:50:09","modified_gmt":"2016-05-18T04:50:09","slug":"densidad-de-numeros-no-monotonos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/densidad-de-numeros-no-monotonos\/","title":{"rendered":"Densidad de n\u00fameros no mon\u00f3tonos"},"content":{"rendered":"<p>Un n\u00famero entero positivo se dice que es<\/p>\n<ul>\n<li><strong>creciente<\/strong> si cada uno de sus d\u00edgitos es menor o igual que el que est\u00e1 a su derecha; por ejemplo, 134479. <\/li>\n<li><strong>decreciente<\/strong> si cada uno de sus d\u00edgitos es menor o igual que el que est\u00e1 a su derecha; por ejemplo, 664210.<\/li>\n<li><strong>no mon\u00f3tono<\/strong> si no es creciente ni decreciente; por ejemplo, 155369. <\/li>\n<\/ul>\n<p>Para cada entero positivo n, la densidad n\u00fameros no mon\u00f3tonos hasta n es el cociente entre la cantidad de n n\u00fameros no mon\u00f3tonos entre menores o iguales que n y el n\u00famero n. Por ejemplo, hasta 150 hay 19 n\u00fameros no mon\u00f3tonos (101, 102, 103, 104, 105, 106, 107, 108, 109, 120, 121, 130, 131, 132, 140, 141, 142, 143 y 150); por tanto, la densidad hasta 150 es 19\/150 = 0.12666667<\/p>\n<p>Definir las siguientes funciones<\/p>\n<pre lang=\"text\">\n   densidad              :: Integer -> Float\n   menorConDensidadMayor :: Float -> Integer \n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(densidad n) es la densidad de n\u00fameros no mon\u00f3tonos hasta n. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     densidad 100  ==  0.0\n     densidad 200  ==  0.265\n     densidad 400  ==  0.4375\n     densidad 800  ==  0.53375\n<\/pre>\n<ul>\n<li>(menorConDensidadMayor x) es el menor n\u00famero n tal que la densidad de n\u00fameros no mon\u00f3tonos hasta n es mayor o igual que x. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     menorConDensidadMayor 0.5   ==  538\n     densidad 537                ==  0.49906892\n     densidad 538                ==  0.5\n     menorConDensidadMayor 0.9   ==  21780\n     densidad 21779              ==  0.8999954\n     densidad 21780              ==  0.9\n     menorConDensidadMayor 0.99  ==  1586996\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength, sort)\n\n-- 1\u00aa definici\u00f3n\n-- =============\n\ndensidad :: Integer -> Float\ndensidad n = \n    genericLength [x | x <- [1..n], esNoMonotono x] \/ fromIntegral n\n\nesNoMonotono :: Integer -> Bool\nesNoMonotono x = not (esCreciente x) && not (esDecreciente x)\n\nesCreciente :: Integer -> Bool\nesCreciente x = show x == sort (show x)\n\nesDecreciente :: Integer -> Bool\nesDecreciente x = reverse (show x) == sort (show x)\n\nmenorConDensidadMayor :: Float -> Integer \nmenorConDensidadMayor x  = \n    buscaProporcion x (filter esNoMonotono [1..])\n    where buscaProporcion x = \n              snd . head . filter condicion . zip [1..]\n              where condicion (a,b) = a >= x * fromIntegral b\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Un n\u00famero entero positivo se dice que es creciente si cada uno de sus d\u00edgitos es menor o igual que el que est\u00e1 a su derecha; por ejemplo, 134479. decreciente si cada uno de sus d\u00edgitos es menor o igual que el que est\u00e1 a su derecha; por ejemplo, 664210. no mon\u00f3tono si no es&#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":[8,38,183,258,71,181,11,32,33,16,14,9],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2433"}],"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=2433"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2433\/revisions"}],"predecessor-version":[{"id":2459,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2433\/revisions\/2459"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=2433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=2433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=2433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}