{"id":518,"date":"2014-07-25T07:00:19","date_gmt":"2014-07-25T05:00:19","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=518"},"modified":"2022-03-25T20:12:15","modified_gmt":"2022-03-25T18:12:15","slug":"laberinto-numerico","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/laberinto-numerico\/","title":{"rendered":"Laberinto num\u00e9rico"},"content":{"rendered":"<h4>Enunciado<\/h4>\n<pre lang=\"text\">\n-- El problema del laberinto num\u00e9rico consiste en, dados un par de\n-- n\u00fameros, encontrar la longitud del camino m\u00e1s corto entre ellos\n-- usando s\u00f3lo las siguientes operaciones:  \n--    * multiplicar por 2,\n--    * dividir por 2 (s\u00f3lo para los pares) y\n--    * sumar 2.\n-- Por ejemplo, un camino m\u00ednimo \n--    * de  3 a 12 es [3,6,12], \n--    * de 12 a  3 es [12,6,3], \n--    * de  9 a  2 es [9,18,20,10,12,6,8,4,2] y \n--    * de  2 a  9 es [2,4,8,16,18,9].\n-- \n-- Definir la funci\u00f3n\n--    longitudCaminoMinimo :: Int -> Int -> Int\n-- tal que (longitudCaminoMinimo x y) es la longitud del camino m\u00ednimo\n-- desde x hasta y en el laberinto num\u00e9rico. \n--    longitudCaminoMinimo 3 12  ==  2\n--    longitudCaminoMinimo 12 3  ==  2\n--    longitudCaminoMinimo 9 2   ==  8\n--    longitudCaminoMinimo 2 9   ==  5\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nlongitudCaminoMinimo :: Int -> Int -> Int\nlongitudCaminoMinimo x y = \n    head [n | n <- [1..], y `elem` orbita n [x]] \n\n-- (orbita n xs) es el conjunto de n\u00fameros que se pueden obtener aplicando \n-- como m\u00e1ximo n veces las operaciones a los elementos de xs. Por ejemplo, \n--    orbita 0 [12]  ==  [12]\n--    orbita 1 [12]  ==  [6,12,14,24]\n--    orbita 2 [12]  ==  [3,6,7,8,12,14,16,24,26,28,48]\norbita :: Int -> [Int] -> [Int]\norbita 0 xs = sort xs\norbita n xs = sort (nub (ys ++ concat [sucesores x | x <- ys]))\n    where ys = orbita (n-1) xs\n          sucesores x | odd x     = [2*x, x+2]\n                      | otherwise = [2*x, x `div` 2, x+2]\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Enunciado &#8212; El problema del laberinto num\u00e9rico consiste en, dados un par de &#8212; n\u00fameros, encontrar la longitud del camino m\u00e1s corto entre ellos &#8212; usando s\u00f3lo las siguientes operaciones: &#8212; * multiplicar por 2, &#8212; * dividir por 2 (s\u00f3lo para los pares) y &#8212; * sumar 2. &#8212; Por ejemplo, un camino m\u00ednimo&#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":[7],"tags":[8,12,30,26,71,415,24,92,6,14],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/518"}],"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=518"}],"version-history":[{"count":6,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":753,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/518\/revisions\/753"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}