DEV Community

Cristian Fernando
Cristian Fernando

Posted on

Advent.js🎅🏼| #3: El Grinch quiere fastidiar la navidad

El Grinch quiere fastidiar la navidad

El Grinch está abriendo las cartas que iban a Santa Claus y las está dejando hechas un lío. 😱

Las cartas son una cadena de texto que incluyen regalos y paréntesis ().

Para saber si una carta es válida ✅, debes comprobar que los paréntesis cierran correctamente y que, además, no vayan vacíos.

¡Pero ojo! Porque el Grinch ha dejado llaves { y corchetes [ dentro de los paréntesis que hacen que no sean válidas. Por suerte sólo los ha dejado en medio de los paréntesis...

Ejemplos:

"bici coche (balón) bici coche peluche" // -> ✅
"(muñeca) consola bici" // ✅

"bici coche (balón bici coche" // -> ❌
"peluche (bici [coche) bici coche balón" // -> ❌
"(peluche {) bici" // -> ❌
"() bici" // ❌
Enter fullscreen mode Exit fullscreen mode

Crea una función que pasándole el texto de la carta, devuelva true si es válida y false si no lo es. ¡Y acaba con la travesura del Grinch!

Completa el reto!


Mi solución:


Puedes seguir a @midudev y estar pendiente de los retos de Advent.js

Discussion (7)

Collapse
marquimark profile image
Marquimark

Casi no llego, tarde pero aqui esta mi respuesta, me he sacado el aire, pero creanme, trabajo honesto.

const cadenas = 'bici coche (balón bici coche';

function validaCartas(carta) {
if ((/(\D*^[([)]])/g).test(carta)) {
return true;
} else if ((/({2,}/g) || (/){2,}/g) || (/(\s*)/g) || (/(\D+/g) || (/\D+)/g)(/\s[/) || (/\D*[/) || (/\s{\s*)/) || (/\D*{\s*)/).test(carta))
{
return false;
};
}
console.log( validaCartas(cadenas));

Collapse
duxtech profile image
Cristian Fernando Author

Ouuuch esa regex se ve que te hizo humear el cerebro 🤯😬

Collapse
marquimark profile image
Marquimark

gracias, si la verdad, pero quise poner otras mas a las que dieron en el ejemplo, si van dos parentesis a la apertura, al cierre, si los parentesis no son solo vacios con nada de espacio () sino vacios con muchos ( ).

Thread Thread
duxtech profile image
Cristian Fernando Author

personalmente solo uso regex cuando no se complican tanto xd
siempre trato de que sea la última opción a usar en un problema

Collapse
carlpy profile image
Darknight8020

hay alguna otra manera de hacerlo sin usar regex?

Collapse
duxtech profile image
Cristian Fernando Author

usar regex es complicado para muchos,claro que hay otras maneras de resolverlo pero yo opte por solucionarlo con una regex

Collapse
armanyfelix profile image
Armany

Utilize un .test en vez del .exec, asi queda mas simple la condicion.
const result = /(([^)]+))/.test(letter);
return (result) ? false : true;