Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Second solution in Clear category for How to Find Friends by Anrock
class DroneNet:
def __init__(self, network):
self.drones = dict()
for connection in network:
drone_names = connection.split('-')
self.get_drone(drone_names[0]).connect(self.get_drone(drone_names[1]))
def get_drone(self, name):
return self.drones.setdefault(name, Drone(name))
def is_connected(self, first, second):
current_drone = self.get_drone(first)
visited = {current_drone}
to_check = current_drone.connections
while(len(to_check) > 0):
current_drone = to_check.pop()
if (current_drone in visited):
continue
if (current_drone.name == second):
return True
else:
visited.add(current_drone)
to_check.update(current_drone.connections)
return False
class Drone:
def __init__(self, name):
self.name = name
self.connections = set()
def connect(self, drone):
self.connections.add(drone)
drone.connections.add(self)
def check_connection(network, first, second):
return DroneNet(network).is_connected(first, second)
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert check_connection(
("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
"scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"),
"scout2", "scout3") == True, "Scout Brotherhood"
assert check_connection(
("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
"scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"),
"super", "scout2") == True, "Super Scout"
assert check_connection(
("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
"scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"),
"dr101", "sscout") == False, "I don't know any scouts."
July 20, 2015
Comments: