.
Este desafío tiene un grado más alto de dificultad, combinando todo lo anteriormente aprendido en un solo ejercicio. Tómalo como un jefe final de la primer semana el cuál podrás resolver de multiples maneras y si logras pasarlo significa que tienes muy bien aprendidos los fundamentos de bucles, arrays, funciones, objetos y demás. ¿Y si no? ¡No pasa nada! puedes seguir adelante aprendiendo y cuando te sientes preparado o preparada puedes volver a este ejercicio y tratar de pasar este primer checkpoint ¡No te estanques! puedes comentar la parte que se te complicó y en comunidad te ayudaremos a resolverlo 💚
.
Dicho todo esto, a continuación tendrás un gif randóm y JUSTO DESPUÉS LA EXPLICACIÓN CON EL CÓDIGO DE LA SOLUCIÓN por lo que haz scroll una vez sientas que necesites una explicación más a fondo acerca de la solución proporcionada.
.
Momento random del día
!dancing bird
.
Explicación
exportfunctionfindLargestPalindrome(words){// Primero definimos que la palabra más larga es null// Debido a que no se tiene un valor let largest =null;// Después iteramos por cada una de las palabrasfor(const word of words){// con split("") creamos un array donde cada elemento es una letra// Ejemplo "hola" => ["h","o","l","a"]// con reverse() "volteamos" el array// Ejemplo ["h","o","l","a"] => ["a"","l","o","h"]// y con .join("") volvemos a convertirlo en un string// Ejemplo ["a"","l","o","h"] => "aloh"const reversedWord = word.split("").reverse().join("");// La primer validación que hacemos es para ver si efectivamente es un arrayif(reversedWord === word){// Si si lo es, primero verificamos que se reemplace la variable largest// por el primer palindromo si es que no existe uno aúnif(largest ==null|| word.length> largest.length){// En caso de existir, se compara su longitud con el palindromo existente largest = word;}}}// Al final siempre retornamos la variable largest// Ya que si no existe ni uno solo en el array, su valor se mantiene como nullreturn largest;}
.
¿Que te pareció este primer checkpoint?¿Más difícil o más fácil de lo esperado?
.
Preparate porque aumentaremos la dificultad para el siguiente checkpoint 🔥
Jajajaj me acabo de dar cuenta viendo el ejeplo de que mi estrategia para detectar palíndromos es , cuando menosm """larga""" xDDDDD
Otro reto puede ser este mismo ejercicio sin usar split, reverse y join para que uno mismo se cuestione si realmente estoy entendiendo que hacen esas tres instrucciones juntas o dicho de otra forma si no existieran esas funciones como las construyo por mi cuenta o en este caso particular como puedo comprobar si una palabra es palíndromo porque si encontramos una palabra con tilde seguro ese método no va a funcionar o por si queremos analizar no una palabra sino toda una frase.
Anita laba la tina
Dábale arroz a la zorra el abad
PD. AL buscar ejemplos de frases que son palíndromos encontré una referencia al palíondromo más largo en español del venozolano Darío Lancini que tiene un poema de 74 palabras titulado Amor azul.
_
'Amor azul'
Ramera, de todo te di.
Mariposa colosal, sí,
yo de todo te di.
Poda la rosa, Venus.
El átomo como tal
es un evasor alado.
Pide, todo te doy: isla,
sol, ocaso, pirámide.
Todo te daré: mar, luz, aroma._
Por último una forma que implementé para ver si una palabra es palíndromo
// La función compara la primera letra (i) con la última (j)// luego la segunda (i+1) con la penúltima (j-1) luego i+3 con j-3, etcfunctionpalindromo(word){// i para la primera letra y j para la última letralet j = word.length-1;for(let i=0; i<=j; i++){if(word[i]!= word[j]){returnfalse;// si encuentra una letra que no se igual sale inmediatamente y regresa false} j--;}returntrue;}
Anti-Spoiler:
Solución:
/**
* @param{string[]}words * @returns{string} null or the largest palindrome in the array.
*/functionfindLargestPalindrome(words){return words.reduce((prevWord, word)=>(word && word.toLowerCase()=== word.toLowerCase().split('').reverse().join('')&& word.length> prevWord.length)? word : prevWord,'')||null}
Lo importante para que una palabra sea palíndroma es que se lea igual de izquierda a derecha que de derecha a izquierda, independientemente de si contiene letras mayúsculas o minúsculas.
La solución más eficiente que he visto
este es mi solucion cheque que faltaba convertir las palabras en mayusculas o en minusculas
functionfirstLargestPalindrome(words){let largest =null; words.map(word=>{let wordReverse = word.split("").reverse().join("").toLowerCase()if(word.toLowerCase()=== wordReverse){if(largest ==null|| word.length> largest.length){ largest = word;}}});return largest;}console.log(firstLargestPalindrome(["Ana","Oso","html","css"]))
Buen detalle el lower
function findLargestPalindrome(words) {
let maxLengt = null;
let reverse = [];
words.map((word, index) => {
reverse.push(word.split("").reverse().join("").toLowerCase());
if (word.toLowerCase() === reverse[index]) {
if (maxLengt == null || word.length > reverse[index - 1].length) {
maxLengt = word;
}
}
});
return maxLengt;
}
let result =null;let maxLength =0; words.forEach(item=>{// we reverse each stringlet reverseString = item.split("").reverse().join("");// we compare the current string with their reverse also// we verify if the item length is grater than the current max lengthif(item === reverseString && item.length> maxLength){ maxLength = item.length; result = item;}});return result;
functionfindLargestPalindrome(words){var largest =null;for(let i =0; i < words.length; i++){ palin = words[i];var newWord =""for(var j = palin.length-1; j >=0;j--){ newWord += palin[j]}if(palin === newWord && palin.length> largest.length){ largest = palin;}}return largest;}
Quisiera saber por qué toma el código como malo?
var mayor=0, pos=0;for(i=0; i<words.length; i++){var re =/[\W_]/g;var lowRegStr = words[i].toLowerCase().replace(re,'');var reverseStr = lowRegStr.split('').reverse().join(''); reverseStr === lowRegStr;if(reverseStr === lowRegStr){if(words[i].length> mayor){ mayor = words[i].length; pos = i;}}}if(mayor !=0){return words[pos];}else{returnnull;}
me sale esto como error
Should return racecar
i is not defined
Should return null
i is not defined
Should return madam
i is not defined
Should return repaper
i is not defined
Algo salió mal, revisa tu código e intentalo de nuevo.
¡Hola @mayrelbisfajardo!
Recuerda que en los bucles es necesario que declares e inicialices la variable con la cual se va a iterar, solo debes agregar la keyword let y debería funcionar sin problema alguno 🙌
Cambiar esto
for(i=0; i<words.length; i++)
a esto
for(let i=0; i<words.length; i++)
Espero mi comentario te sea de ayuda :D
¡Hola @mayrelbisfajardo!
Recuerda que en los bucles es necesario que declares e inicialices la variable con la cual se va a iterar, solo debes agregar la keyword let y debería funcionar sin problema alguno 🙌
Cambiar esto
for(i=0; i<words.length; i++)
a esto
for(let i=0; i<words.length; i++)
Espero mi comentario te sea de ayuda :D
Por qué Me toma el siguiente código como malo si está bueno?
var mayor=0 , pos=0;
for(i=0 ; i<words.length ; i++)
{
var re = /[\W_]/g;
var lowRegStr = words[i].toLowerCase().replace(re, '');
var reverseStr = lowRegStr.split('').reverse().join('');
reverseStr === lowRegStr;
if(reverseStr === lowRegStr)
{
if(words[i].length > mayor)
{
mayor = words[i].length;
pos = i;
}
}
}
if(mayor != 0){
return words[pos];
}else{
return null ;
}
My solution 👇
functionfindLargestPalindrome(words){const palindromesFound = words.filter(word=>{const invertedWord = word.split("").reverse().join("");return word === invertedWord;});if(palindromesFound.length===0){returnnull;}const largestPalindrome = palindromesFound.reduce((acc, val)=> val.length> acc.length? val : acc,"");return largestPalindrome;}