{"id":1317,"date":"2015-04-13T07:30:45","date_gmt":"2015-04-13T05:30:45","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=1317"},"modified":"2021-04-25T16:17:54","modified_gmt":"2021-04-25T14:17:54","slug":"las-torres-de-hanoi-2015","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/las-torres-de-hanoi-2015\/","title":{"rendered":"Las torres de Han\u00f3i"},"content":{"rendered":"<p>En la clase de la semana pasada coment\u00e9 la posibilidad de que los alumnos me enviaran propuestas de ejercicios para publicarlos en Exercitium. La primera que he recibido es la de Javier Linares sobre el problema de las torres de Hanoi que constituye el ejercicio de hoy.<\/p>\n<p>Las <a href=\"http:\/\/bit.ly\/1NwyvcA\">torres de Hanoi<\/a> es un rompecabeza que consta de tres postes que llamaremos A, B y C. Hay N discos de distintos tama\u00f1os en el poste A, de forma que no hay un disco situado sobre otro de menor tama\u00f1o. Los postes B y C est\u00e1n vac\u00edos.  S\u00f3lo puede moverse un disco a la vez y todos los discos deben de estar ensartados en alg\u00fan poste. Ning\u00fan disco puede situarse sobre otro de menor tama\u00f1o. El problema consiste en colocar los N discos en el  poste C.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   hanoi :: Int -> [String]\n<\/pre>\n<p>tal que (hanoi n) es la lista de los movimientos para resolver el problema de las torres de hanoi con n discos. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   ghci> hanoi 1\n   [\"Mueve el disco 1 de A a C\"]\n   ghci> hanoi 2\n   [\"Mueve el disco 1 de A a B\",\"Mueve el disco 2 de A a C\",\"Mueve el disco 1 de B a C\"]\n   ghci> mapM_ putStrLn (hanoi 2)\n   Mueve el disco 1 de A a B\n   Mueve el disco 2 de A a C\n   Mueve el disco 1 de B a C\n   ghci> mapM_ putStrLn (hanoi 3)\n   Mueve el disco 1 de A a C\n   Mueve el disco 2 de A a B\n   Mueve el disco 1 de C a B\n   Mueve el disco 3 de A a C\n   Mueve el disco 1 de B a A\n   Mueve el disco 2 de B a C\n   Mueve el disco 1 de A a C\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nhanoi :: Int -> [String]\nhanoi n = aux n \"A\" \"B\" \"C\" where  \n    aux n a b c\n        | n == 1 = [\"Mueve el disco 1 de \" ++ a ++ \" a \" ++ c]\n        | otherwise = \n            aux (n-1) a c b ++ \n            [\"Mueve el disco \"++ show n ++ \" de \" ++ a ++ \" a \" ++ c] ++\n            aux (n-1) b a c\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de la semana pasada coment\u00e9 la posibilidad de que los alumnos me enviaran propuestas de ejercicios para publicarlos en Exercitium. La primera que he recibido es la de Javier Linares sobre el problema de las torres de Hanoi que constituye el ejercicio de hoy. Las torres de Hanoi es un rompecabeza que&#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":[6],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1317"}],"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=1317"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1317\/revisions"}],"predecessor-version":[{"id":1345,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1317\/revisions\/1345"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=1317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=1317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=1317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}