-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReto#18.js
70 lines (53 loc) · 2.64 KB
/
Reto#18.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Reto #18: 📇 La agenda mágica de Santa
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
*/
/**
* @param {string} agenda
* @param {string} phone
* @returns {{ name: string, address: string } | null}
*/
function findInAgenda(agenda, phone) {
let n = agenda.indexOf(phone)
let res = null
if (n > 0 && agenda.lastIndexOf(phone) - n == 0) {
let i = agenda.split("\n").find(e => e.includes(phone))
let ph = i.substr(i.indexOf("+"), 15).trim()
let name = i.slice(i.indexOf("<") + 1, i.indexOf(">"))
let addr = i.replace(ph, "").replace(name, "").replace("<>", "").trim()
res = Object.fromEntries([["name", name], ["address", addr]])
}
return res
}
// Tests
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`
console.log(findInAgenda(agenda, '34-600-123-456'))
// { name: "Juan Perez", address: "Calle Gran Via 12" }
console.log(findInAgenda(agenda, '600-987'))
// { name: "Maria Gomez", address: "Plaza Mayor 45 Madrid 28013" }
console.log(findInAgenda(agenda, '111'))
// null
// Explicación: No hay resultados
console.log(findInAgenda(agenda, '1'))
// null
// Explicación: Demasiados resultados