Palindromia en clase

Solucion al problema del Palindromo
Dentro del curso que estoy desarrollando en el Proyecto MILMA ofrezco la solucion a este problema de clase
Requerimientos
Se requiere una funcion que compruebe si una frase es simetrica, o palindroma, sin contar espacios y contando con que las vocales acentuadas no lo llevan. Decir que nuestra profesora no fue capaz de dar una solucion satisfactoria al problema que ella misma propuso. Eso es nivel.
La funcion devuelve True si efectivamente se trata de un palindromo y false si no lo es.
La Solucion (una de ellas)
Para llevar a cabo lo que se nos pide seguiremos los siguientes pasos:
- Convertiremos la frase a minusculas.
- Sustituiremos las vocales con acento por sus versiones sin acento.
- Eliminaremos los espacios en blanco.
- Guardaremos una copia para su posterior comparacion
- Invertiremos una de las cadenas
- Realizaremos la comparacion.
El codigo, que pongo aqui, es para ser ejecutado por nodejs, pero la funcion puede ser insertada en un script y ejecutada como se desee.
function isPalindromo(phrase) {
// Para poder realizar la comprobacion necesitamos hacer algunas cosas antes
// Convertimos la frase a minusculas
phrase = phrase.toLowerCase();
// Sustituimos vocales acentuadas por no acentuadas
[{ from: 'ü', to: 'u'} , {from: 'é', to: 'e'}, { from: 'á', to: 'a'}, {from: 'í', to: 'i'}, {from: 'ó', to: 'o'} ,{from: 'ú', to: 'u'}].map(x => {
phrase = phrase.replace(x.from, x.to);
});
// Eliminamos los espacios en blanco...
phrase = phrase.split(" ").join("");
// Y obtenemos una copia "del derecho"
var original_phrase = phrase;
// Invertimos la frase
phrase = phrase.split("").reverse().join("");
// Por ultimo comparamos
return ((phrase == original_phrase)? true:false);
}
var p1 = "Dábale arroz a la zorra el abad";
var p2 = "No es palindromica";
var p3 = "No subas abusón";
var p4 = "Logra Casillas allí sacar gol";
var p5 = "Proyecto MILMA Será lodo o dólares";
isPalindromo(p1)?console.log("p1 cierta"):console.log("p1 no lo es");
isPalindromo(p2)?console.log("p2 cierta"):console.log("p2 no lo es");
isPalindromo(p3)?console.log("p3 cierta"):console.log("p3 no lo es");
isPalindromo(p4)?console.log("p4 cierta"):console.log("p4 no lo es");
isPalindromo(p5)?console.log("p5 cierta"):console.log("p5 no lo es");
La salida deberia ser
p1 cierta
p2 no lo es
p3 cierta
p4 cierta
p5 no lo es
Podeis descargaros el proyecto completo via GIT en https://github.com/juanan-martin-lpz/js-palindromos
Un saludo y espero que os sea util.