{"id":3534,"date":"2017-12-18T06:00:31","date_gmt":"2017-12-18T04:00:31","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3534"},"modified":"2017-12-25T09:12:37","modified_gmt":"2017-12-25T07:12:37","slug":"cadenas-opuestas","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/cadenas-opuestas\/","title":{"rendered":"Cadenas opuestas"},"content":{"rendered":"<p>La opuesta de una cadena de letras es la cadena obtenida cambiando las min\u00fasculas por may\u00fasculas y las min\u00fasculas por may\u00fasculas. Por ejemplo, la opuesta de \u00abSeViLLa\u00bb es \u00absEvIllA\u00bb.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   esOpuesta :: String -> String -> Bool\n<\/pre>\n<p>tal que (esOpuesta s1 s2) se verifica si las cadenas de letras s1 y s2 son opuestas. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   esOpuesta \"ab\" \"AB\"      `== True\n   esOpuesta \"aB\" \"Ab\"      `== True\n   esOpuesta \"aBcd\" \"AbCD\"  `== True\n   esOpuesta \"aBcde\" \"AbCD\" `== False\n   esOpuesta \"AB\" \"Ab\"      `== False\n   esOpuesta \"\" \"\"          `== True\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Char (isLower, isUpper, ord, toLower, toUpper)\n\n-- 1\u00aa soluci\u00f3n (por comprensi\u00f3n)\n-- =============================\n\nesOpuesta1 :: String -> String -> Bool\nesOpuesta1 s1 s2 = [opuesto c | c <- s1] == s2\n\nopuesto :: Char -> Char\nopuesto c\n  | isLower c = toUpper c\n  | otherwise = toLower c\n\n-- 2\u00aa soluci\u00f3n (con map)\n-- =====================\n\nesOpuesta2 :: String -> String -> Bool\nesOpuesta2 s1 s2 = map opuesto s1 == s2\n\n-- 3\u00aa soluci\u00f3n (por recursi\u00f3n)\n-- ===========================\n\nesOpuesta3 :: String -> String -> Bool\nesOpuesta3 \"\" \"\"           = True\nesOpuesta3 (c1:s1) (c2:s2) = esOpuesto c1 c2 && esOpuesta3 s1 s2\nesOpuesta3 _ _             = False\n\nesOpuesto :: Char -> Char -> Bool\nesOpuesto c1 c2 = abs (ord c1 - ord c2) == 32\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La opuesta de una cadena de letras es la cadena obtenida cambiando las min\u00fasculas por may\u00fasculas y las min\u00fasculas por may\u00fasculas. Por ejemplo, la opuesta de \u00abSeViLLa\u00bb es \u00absEvIllA\u00bb. Definir la funci\u00f3n esOpuesta :: String -> String -> Bool tal que (esOpuesta s1 s2) se verifica si las cadenas de letras s1 y s2 son&#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":[5],"tags":[130,8,413,10,341,11,6,37,137],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3534"}],"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=3534"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3534\/revisions"}],"predecessor-version":[{"id":3554,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3534\/revisions\/3554"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}