{"id":3450,"date":"2017-11-28T06:00:11","date_gmt":"2017-11-28T04:00:11","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3450"},"modified":"2017-12-08T08:36:38","modified_gmt":"2017-12-08T06:36:38","slug":"menor-x-tal-que-los-x-multiplos-de-n-contienen-todos-los-digitos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/menor-x-tal-que-los-x-multiplos-de-n-contienen-todos-los-digitos\/","title":{"rendered":"Menor x tal que los x m\u00faltiplos de n contienen todos los d\u00edgitos"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   menorX :: Integer -> Integer\n<\/pre>\n<p>tal que (menorX n) es el menor x tal que entre los x primeros m\u00faltiplos de n (es decir, entre n, 2\u00d7n, 3\u00d7n, &#8230; y x\u00d7n) contienen todos los d\u00edgitos al menos una vez. Por ejemplo, (menorX 92)  es 6 ya que<\/p>\n<pre lang=\"text\">\n   92                                    contiene  [2,9]\n   92 y 92\u00d72                             contienen [1,2,4,8,9]\n   92,  92\u00d72 y 92\u00d73                      contienen [1,2,4,6,7,8,9]\n   92,  92\u00d72,  92\u00d73 y 92\u00d74               contienen [1,2,3,4,6,7,8,9]\n   92,  92\u00d72,  92\u00d73,  92\u00d74 y 92\u00d75        contienen [0,1,2,3,4,6,7,8,9]\n   92,  92\u00d72,  92\u00d73,  92\u00d74,  92\u00d75 y 92\u00d76 contienen [0,1,2,3,4,5,6,7,8,9]\n<\/pre>\n<p>Otros ejemplos<\/p>\n<pre lang=\"text\">\n   menorX 92          ==  6\n   menorX 2967        ==  3\n   menorX 266         ==  4\n   menorX 18          ==  5\n   menorX 2           ==  45\n   menorX 125         ==  72\n   menorX 1234567890  ==  1\n   maximum [menorX n | n <- [1..3000]]  ==  72\n   minimum [menorX n | n <- [1..3000]]  ==  3\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List ((\\\\))\n\n-- 1\u00aa definici\u00f3n\n-- =============\n\nmenorX :: Integer -> Integer\nmenorX n =\n  head [x | x <- [1..]\n          , [0..9] `contenido` digitosMultiplos n x]\n\ncontenido :: Eq a => [a] -> [a] -> Bool\ncontenido xs ys =\n  all (`elem` ys) xs\n\ndigitosMultiplos :: Integer -> Integer -> [Integer]\ndigitosMultiplos n x =\n  concatMap digitos [n,2*n..x*n]\n\ndigitos :: Integer -> [Integer]\ndigitos n =\n  [read [c] | c <- show n]\n\n-- 2\u00aa definici\u00f3n\n-- =============\n\nmenorX2 :: Integer -> Integer\nmenorX2 n = aux [] 0\n  where aux xs x\n          | [0..9] `contenido` xs = x\n          | otherwise             = aux (digitos (n*(x+1)) ++ xs) (x+1)\n\n-- 3\u00aa definici\u00f3n\n-- =============\n\nmenorX3 :: Integer -> Integer\nmenorX3 n = aux ['0'..'9'] 0\n  where aux xs x\n          | null xs   = x\n          | otherwise = aux (xs \\\\ show (n*(x+1))) (x+1)\n\n-- 4\u00aa definici\u00f3n\n-- =============\n\nmenorX4 :: Integer -> Integer\nmenorX4 n = aux \"0123456789\" 1 n\n  where aux xs x nx | null ys   = x\n                    | otherwise = aux ys (1+x) (nx+n)\n          where ys = xs \\\\ show nx\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n--    \u03bb> maximum [menorX n | n <- [1..6000]]\n--    72\n--    (2.04 secs, 3,737,579,888 bytes)\n--    \u03bb> maximum [menorX2 n | n <- [1..6000]]\n--    72\n--    (0.52 secs, 818,602,736 bytes)\n--    \u03bb> maximum [menorX3 n | n <- [1..6000]]\n--    72\n--    (0.10 secs, 67,090,800 bytes)\n--    \u03bb> maximum [menorX3 n | n <- [1..6000]]\n--    72\n--    (0.08 secs, 67,090,800 bytes)\n--    \n--    \u03bb> maximum [menorX3 n | n <- [1..10^5]]\n--    72\n--    (0.81 secs, 1,044,781,216 bytes)\n--    \u03bb> maximum [menorX4 n | n <- [1..10^5]]\n--    72\n--    (0.71 secs, 1,009,113,304 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n menorX :: Integer -> Integer tal que (menorX n) es el menor x tal que entre los x primeros m\u00faltiplos de n (es decir, entre n, 2\u00d7n, 3\u00d7n, &#8230; y x\u00d7n) contienen todos los d\u00edgitos al menos una vez. Por ejemplo, (menorX 92) es 6 ya que 92 contiene [2,9] 92 y&#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":[41,8,58,26,71,141,11,95,6,33],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3450"}],"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=3450"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3450\/revisions"}],"predecessor-version":[{"id":3506,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3450\/revisions\/3506"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}