Reto: Anagramas
Dada una palabra, si reordenamos sus letras obtendremos un anagrama de ella. Por ejemplo, Roma es un anagrama de Amor y viceversa. Otros ejemplos de anagramas son:
- saco -cosa
- frase - fresa
- Eva - ave
- Marta - trama - matar
- amor - ramo - Roma - mora
- valora - Álvaro
- riesgo - Sergio
- poder - Pedro
- delira - lidera
- raza -azar
- alma - mala - lama
- rica - cría
- aire - reía
- gato - gota - toga
- Ernesto - eternos - estreno - enteros
Método 1
['r', 'o', 'm', 'a']
sort()
. De esta forma, haciendo este proceso en las dos palabras, si coinciden las listas ordenadas quiere decir que contienen los mismos caracteres. Esto nos permite asegurar que las palabras son anagramas la una de la otra.def anagrama(cadena1,cadena2):
cadena1lista=list(cadena1.lower()) #lo pasamos a minúsculas y lo convertimos en una lista de caracteres
cadena2lista=list(cadena2.lower())
cadena1lista.sort() #lo ordenamos
cadena2lista.sort()
return cadena1lista==cadena2lista #comparamos las listas de caracteres ordenadas, si son iguales dará True
palabra1='Roma'
palabra2='amor'
print("¿Son anagramas {} y {}?: ".format(palabra1,palabra2),anagrama(palabra1,palabra2))
Método 2
True
. Se basa en el uso de la función replace
.def normalizar(s):
parejas = (
("á", "a"),
("é", "e"),
("í", "i"),
("ó", "o"),
("ú", "u"),
)
for a, b in parejas:
s = s.replace(a, b).replace(a.upper(), b.upper())
return s
def anagrama(cadena1,cadena2):
cadena1=normalizar(cadena1)
cadena2=normalizar(cadena2)
cadena1lista=list(cadena1.lower())
cadena2lista=list(cadena2.lower())
cadena1lista.sort()
cadena2lista.sort()
return cadena1lista==cadena2lista
palabra1='Álvaro'
palabra2='valora'
print("¿Son anagramas {} y {}?: ".format(palabra1,palabra2),anagrama(palabra1,palabra2))