48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
const graph = {};
|
|
graph["you"] = ["alice", "bob", "claire"];
|
|
graph["bob"] = ["anuj", "peggy"];
|
|
graph["alice"] = ["peggy"];
|
|
graph["claire"] = ["thom", "jonny"];
|
|
graph["anuj"] = [];
|
|
graph["peggy"] = [];
|
|
graph["thom"] = [];
|
|
graph["jonny"] = [];
|
|
|
|
/**
|
|
* Determine whether a person is a seller
|
|
* @param {string} name Friend's name
|
|
* @returns {boolean} Result of checking
|
|
*/
|
|
function personIsSeller(name) {
|
|
return name[name.length - 1] === "m";
|
|
}
|
|
|
|
/**
|
|
* Find a mango seller
|
|
* @param {string} name Friend's name
|
|
* @returns {boolean} Search results
|
|
*/
|
|
function search(name) {
|
|
let search_queue = [];
|
|
search_queue = search_queue.concat(graph[name]);
|
|
// This array is how you keep track of which people you've searched before.
|
|
const searched = [];
|
|
while (search_queue.length) {
|
|
let person = search_queue.shift();
|
|
// Only search this person if you haven't already searched them
|
|
if (searched.indexOf(person) === -1) {
|
|
if (personIsSeller(person)) {
|
|
console.log(person + " is a mango seller!");
|
|
return true;
|
|
}
|
|
|
|
search_queue = search_queue.concat(graph[person]);
|
|
// Marks this person as searched
|
|
searched.push(person);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
search("you"); // thom is a mango seller!
|