edit comments

This commit is contained in:
TimoSci
2019-12-08 13:31:33 +01:00
parent 1f6cf7d460
commit ff7ae962c1

View File

@@ -6,17 +6,16 @@ class Graph < Hash
def search(name) def search(name)
search_queue = [] search_queue = []
search_queue += self[name] search_queue += self[name]
# This array is how you keep track of which people you've searched before. # The "searched" Hash is how you keep track of which people you've searched before. We use a hash because hash lookups are fast!
searched = {} searched = {}
until search_queue.empty? until search_queue.empty?
pp searched
person = search_queue.shift person = search_queue.shift
# Only search this person if you haven't already searched them. # Only search this person if you haven't already searched them.
next if searched[person] next if searched[person]
return person if yield person return person if yield person
search_queue += self[person] search_queue += self[person]
# Marks this person as searched # Marks this person as searched
searched[person] = true searched[person] = true
end end
@@ -36,4 +35,5 @@ graph["peggy"] = []
graph["thom"] = [] graph["thom"] = []
graph["jonny"] = [] graph["jonny"] = []
graph.search("you"){|person| person_is_seller?(person) }.tap{|person| puts "#{person} is a mango seller!" if person} # we begin the search from vertex "you" and pass the match criterion in the block, then we tap the search result
graph.search("you"){|person| person_is_seller?(person)}.tap{|person| puts "#{person} is a mango seller!" if person}