Menu Close

Anagramas

Una palabra es una anagrama de otra si se puede obtener permutando sus letras. Por ejemplo, mora y roma son anagramas de amor.

Enunciado

-- Definir la función
--    anagramas :: String -> [String] -> [String]
-- tal que (anagramas x ys) es la lista de los elementos de ys que son
-- anagramas de x. Por ejemplo,
--    anagramas "amor" ["Roma","mola","loma","moRa"] ==  ["Roma","moRa"]

Soluciones

import Data.List
import Data.Char
 
-- 1ª definición (por recursión):
anagramas :: String -> [String] -> [String]
anagramas x [] = []
anagramas x (y:ys) | sonAnagramas x y = y : anagramas x ys
                   | otherwise        = anagramas x ys
 
-- (sonAnagramas xs ys) se verifica si xs e ys son anagramas. Por
-- ejemplo,
--    sonAnagramas "amor" "Roma"  ==  True
--    sonAnagramas "amor" "mola"  ==  False
sonAnagramas :: String -> String -> Bool
sonAnagramas xs ys = 
    sort (map toLower xs) == sort (map toLower ys) 
 
-- 2ª definición de sonAnagramas
sonAnagramas2 :: String -> String -> Bool
sonAnagramas2 xs ys = 
    (sort . map toLower) xs == (sort . map toLower) ys 
 
-- 2ª definición (por comprensión)
anagramas2 :: String -> [String] -> [String]
anagramas2 x ys = [y | y <- ys, sonAnagramas x y]
 
-- 3ª definición (con filter y sin el 2ª argumento)
anagramas3 :: String -> [String] -> [String]
anagramas3 x = filter (`sonAnagramas` x)

Una solución de “Anagramas

  1. Laura Prieto
    import Data.Char 
    import Data.List 
     
    anagramas :: String -> [String] -> [String]
    anagramas x ys = [a | a <- ys, conjuntosIguales x a]
     
    conjuntosIguales xs ys = 
        sort (map toLower xs) == sort (map toLower ys)

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.