Un anagrama es una frase o palabra cuyas letras, al acomodarse de otra manera, forman otra palabra válida. Eso sí, ninguna letra debe faltar o sobrar.
Por mencionar un ejemplo de anagrama es la palabra Enfriamiento, que es anagrama de Refinamiento; ya que ambas tienen las mismas palabras y al ordenarlas de distinta manera se forma otra.
Pues bien, hoy veremos cómo comprobar si una palabra es anagrama de otra en Ruby. Esto funcionará tanto como cadenas que representen palabras hasta con cadenas que representen oraciones largas.
Hay que eliminar los signos de puntuación y espacios de la cadena, además de convertirla a minúscula (bueno, ambas deben estar en mayúsculas o en minúsculas, no mezcladas) y más tarde, ordenarla alfabéticamente (primero la a, luego la b y así).
Por ejemplo, al aplicar todo ello a la cadena Enfriamiento se obtiene aeefiimnnort. Después se hace lo mismo con la segunda palabra, y si al ordenarlas son iguales, entonces son anagramas. Ya que Refinamiento, al hacerle lo mismo, se convierte en aeefiimnnort.
Si no me crees, mira esto:
El código lo explicaré más abajo, lo que quiero que se vea es que ambas cadenas son lo mismo.
Aquí está el código fuente junto con algunas cosas para probarlo:
=begin
Función que comprueba si una palabra es anagrama de otra,
sin importar espacios, mayúsculas, minúsculas puntos ni comas
@author parzibyte
=end
def anagrama(palabra, palabra2)
# Eliminar espacios, comas y puntos. Convertir a minúsculas
# Luego, ordenar los caracteres y unirlos de nuevo a una cadena
# Finalmente se comparan y se regresa el resultado de la comparación (true o false)
palabra.delete(" " "," ".").downcase.chars.sort.join ===
palabra2.delete(" " "," ".").downcase.chars.sort.join
end
#Probar función... Algunos ejemplos fueron obtenidos de https://www.ejemplos.co/50-ejemplos-de-anagramas/
palabras = [
["Quieren", "Enrique"],
["Poder", "Pedro"],
["Luis", "Luis"],
["Otra", "Cosa"],
["Enfriamiento", "Refinamiento"],
["Tom Marvolo Riddle", "I Am Lord Voldemort"],
["Esto no", "Es un anagrama"],
["123", "321"],
["Visita", "parzibyte.me"]
]
palabras.each{|grupo|
puts "¿'#{grupo[0]}' es anagrama de '#{grupo[1]}'? #{anagrama(grupo[0], grupo[1])}"
}
# O hacer que el usuario pruebe por sí mismo
puts "Escribe una palabra"
palabra = gets.chomp
puts "Escribe otra palabra y te diré si es anagrama de la anterior"
palabra2 = gets.chomp
if anagrama(palabra, palabra2)
puts "Sí es anagrama"
else
puts "No es anagrama"
end
La función es simple, recibe dos cadenas y devuelve un booleano. El proceso que sigue es:
delete
downcase
chars
sort
join
(se unen)Se hace lo mismo para ambas cadenas y se devuelve el resultado de la comparación.
Eres libre de descargar el código fuente. Recuerda primero instalar Ruby, más tarde abre la terminal, navega hasta donde tengas el archivo y ejecuta:
ruby main.rb
O como sea que hayas llamado a tu archivo.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.