Skip to content

Latest commit

 

History

History
70 lines (48 loc) · 2.26 KB

18.md

File metadata and controls

70 lines (48 loc) · 2.26 KB

⬅️ Regresar

Reto #18: 📇 La agenda mágica de Santa

Instrucciones

Santa Claus tiene una agenda mágica 📇 donde guarda las direcciones de los niños para entregar los regalos. El problema: la información de la agenda está mezclada y malformateada. Las líneas contienen un número de teléfono mágico, el nombre de un niño y su dirección, pero todo está rodeado de caracteres extraños.

Santa necesita tu ayuda para encontrar información específica de la agenda. Escribe una función que, dado el contenido de la agenda y un número de teléfono, devuelva el nombre del niño y su dirección.

Ten en cuenta que en la agenda:

  • Los números de teléfono están formateados como +X-YYY-YYY-YYY (donde X es uno o dos dígitos, e Y es un dígito).
  • El nombre de cada niño está siempre entre < y >

La idea es que escribas una funcióna que, pasándole el teléfono completo o una parte, devuelva el nombre y dirección del niño. Si no encuentra nada o hay más de un resultado, debes devolver null.

const agenda = `+34-600-123-456 Calle Gran Via 12 <Juan Perez>
Plaza Mayor 45 Madrid 28013 <Maria Gomez> +34-600-987-654
<Carlos Ruiz> +1-800-555-0199 Fifth Ave New York`

findInAgenda(agenda, '34-600-123-456')
// { name: "Juan Perez", address: "Calle Gran Via 12" }

findInAgenda(agenda, '600-987')
// { name: "Maria Gomez", address: "Plaza Mayor 45 Madrid 28013" }

findInAgenda(agenda, '111')
// null
// Explicación: No hay resultados

findInAgenda(agenda, '1')
// null
// Explicación: Demasiados resultados

Solución

function findInAgenda (agenda, phone) {
	const entries = agenda.split("\n").map(agen => {
		const name = agen.slice(agen.indexOf("<"), agen.indexOf(">") + 1)
		const phone = agen.slice(agen.indexOf("+"), agen.indexOf("+") + 15)
		return {
			name: name.replace("<", "").replace(">", ""),
			address: agen.replace(name, "").replace(phone, "").trim(),
			phone: phone
		}
	}).filter(agen => agen.phone.includes(phone))

	return entries.length === 1 ? { name: entries[0].name, address: entries[0].address } : null
}

Puntaje: 🌟🌟🌟🌟🌟

2245 ops/s

Complejidad cognitiva: 4


⬅️ Regresar