Files
grokking_algorithms/06_breadth-first_search/es6/01_breadth-first_search.js
2017-10-13 08:38:23 -07:00

33 lines
790 B
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 = [];
const isSeller = name => name[name.length - 1] === 'm';
const search = (name, graph) => {
const iter = (waited, visited) => {
if (waited.length === 0) {
return false;
}
const [current, ...rest] = waited;
if (visited.has(current)) {
return iter(rest, visited);
}
if (isSeller(current)) {
console.log(`${current} is a mango seller!`);
return true;
}
visited.add(current);
const personFriends = graph[current];
return iter([...rest, ...personFriends], visited);
};
return iter(graph[name], new Set());
};
search('you');