Skip to content

Latest commit

 

History

History
86 lines (66 loc) · 2.17 KB

File metadata and controls

86 lines (66 loc) · 2.17 KB

⬅️ Regresar

Reto #4: 😵‍💫 Dale la vuelta a los paréntesis

En el taller de Santa 🎅, algunos mensajes navideños han sido escritos de manera peculiar: las letras dentro de los paréntesis deben ser leídas al revés

Santa necesita que estos mensajes estén correctamente formateados. Tu tarea es escribir una función que tome una cadena de texto y revierta los caracteres dentro de cada par de paréntesis, eliminando los paréntesis en el mensaje final.

Eso sí, ten en cuenta que pueden existir paréntesis anidados, por lo que debes invertir los caracteres en el orden correcto.

const a = decode('hola (odnum)')
console.log(a) // hola mundo

const b = decode('(olleh) (dlrow)!')
console.log(b) // hello world!

const c = decode('sa(u(cla)atn)s')
console.log(c) // santaclaus

// Paso a paso:
// 1. Invertimos el anidado -> sa(ualcatn)s
// 2. Invertimos el que queda -> santaclaus

Notas:

  • Las cadenas de entrada siempre estarán bien formadas con paréntesis que coinciden correctamente, no necesitas validarlos.
  • En el mensaje final no deben quedar paréntesis.
  • El nivel máximo de anidamiento es 2.


Soluciones

function decode(message) {
	let code = [""]
	for (const char of message) {
		if (char === "(") code.push("")
		else if (char === ")") {
			code = [...code.slice(0, -2), code.at(-2) +
       code.at(-1).split("").reverse().join("")]
		}
		else code[code.length - 1] += char
	}

	return code[0]
}
function decode(message) {
	return message.split("").reduce((acc, char) => {
		if (char === "(") return [...acc, ""]
		if (char === ")") {
			acc[acc.length - 2] += acc.at(-1).split("").reverse().join("")
			return acc.slice(0, -1)
		}
		return [...acc.slice(0, -1), acc[acc.length - 1] += char]
	}, [""]).join()
}
function decode(message) {
  let code = [""]
	message.split("").forEach(char => {
		if (char === "(") return code.push("")
		if (char === ")") {
			code[code.length - 2] += code.at(-1).split("").reverse().join("")
			return code.pop()
		}
		code[code.length - 1] += char
	})
  return code[0]
}

Puntaje: 270


⬅️ Regresar