{"id":2872,"date":"2017-01-30T06:00:23","date_gmt":"2017-01-30T04:00:23","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=2872"},"modified":"2022-03-26T12:11:36","modified_gmt":"2022-03-26T10:11:36","slug":"maximo-producto-de-pares-en-la-lista","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/maximo-producto-de-pares-en-la-lista\/","title":{"rendered":"M\u00e1ximo producto de pares en la lista"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n  maximoProducto :: [Int] -> Maybe Int\n<\/pre>\n<p>tal que (maximoProducto xs) es el mayor elemento de xs que se puede escribir<br \/>\ncomo producto de dos elementos distintos de xs o Nothing, en el caso de que<br \/>\nning\u00fan elemento de xs se pueda escribir como producto de dos elementos<br \/>\ndistintos de xs, donde xs es una lista de n\u00fameros mayores que 0. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   maximoProducto [10, 3, 5, 30, 35]       ==  Just 30\n   maximoProducto [10, 2, 2, 4, 30, 35]    ==  Just 4\n   maximoProducto [17, 2, 1, 35, 30]       ==  Just 35\n   maximoProducto [2,4]                    ==  Nothing\n   maximoProducto [2, 5, 7, 8]             ==  Nothing\n   maximoProducto [10, 2, 4, 30, 35]       ==  Nothing\n   maximoProducto [1+2^n | n <- [1..10^6]] ==  Just 4611686018427387905\n<\/pre>\n<p>En el primer ejemplo, 30 es el producto de 10 y 3; en el segundo, 4 es el producto de 2 y 2 y en el tercero, 35 es el producto de 1 y 35.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (delete, nub, sort)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nmaximoProducto1 :: [Int] -> Maybe Int\nmaximoProducto1 xs\n  | null zs   = Nothing\n  | otherwise = Just (head zs)\n  where\n    ys = reverse (sort xs)\n    zs = [y | y <- ys, y `elem` productos xs]\n\n-- (productos xs) es la lista de los n\u00fameros que son productos de dos\n-- elementos de xs. Por ejemplo, \n--   productos [4,3,5,2]  ==  [12,20,8,15,6,10]\nproductos :: [Int] -> [Int]\nproductos xs =\n  nub [y * z | y <- xs, z <- delete y xs]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nmaximoProducto2 :: [Int] -> Maybe Int\nmaximoProducto2 xs = aux (reverse (sort xs))\n  where aux []     = Nothing\n        aux (y:ys) | esProducto y xs = Just y\n                   | otherwise       = aux ys\n\nesProducto :: Int -> [Int] -> Bool\nesProducto y []     = False\nesProducto y (x:xs) = \n  (m == 0 && d `elem` xs) || esProducto y xs\n  where (d,m) = divMod y x  \n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n--    \u03bb> maximoProducto1 [1..10^4]\n--    Just 10000\n--    (2.60 secs, 0 bytes)\n--    \u03bb> maximoProducto2 [1..10^4]\n--    Just 10000\n--    (0.01 secs, 0 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n maximoProducto :: [Int] -> Maybe Int tal que (maximoProducto xs) es el mayor elemento de xs que se puede escribir como producto de dos elementos distintos de xs o Nothing, en el caso de que ning\u00fan elemento de xs se pueda escribir como producto de dos elementos distintos de xs, donde xs&#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,500,25,328,26,71,24,32,14],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2872"}],"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=2872"}],"version-history":[{"count":8,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2872\/revisions"}],"predecessor-version":[{"id":2908,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2872\/revisions\/2908"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=2872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=2872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=2872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}