Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for What Is Wrong With This Family? by Oleg_Domokeev
def is_family(tree):
family = set()
len_before = len(tree)
suns = [name[1] for name in tree]
if len(suns) > len(set(suns)):
return False
for i in range(len_before):
if len(family) == 0 or len(set(tree[len_before - i - 1]) & family) == 1:
family.update(set(tree.pop(len_before - i - 1)))
len_after = len(tree)
while len_before > len_after > 0:
for i in range(len_after):
if family == {} or len(set(tree[len_after - i - 1]) & family) == 1:
family.update(set(tree.pop(len_after - i - 1)))
len_before, len_after = len_after, len(tree)
if len(tree) == 0:
return True
return False
if __name__ == "__main__":
#These "asserts" using only for self-checking and not necessary for auto-testing
assert is_family([
['Logan', 'Mike']
]) == True, 'One father, one son'
assert is_family([
['Logan', 'Mike'],
['Logan', 'Jack']
]) == True, 'Two sons'
assert is_family([
['Logan', 'Mike'],
['Logan', 'Jack'],
['Mike', 'Alexander']
]) == True, 'Grandfather'
assert is_family([
['Logan', 'Mike'],
['Logan', 'Jack'],
['Mike', 'Logan']
]) == False, 'Can you be a father for your father?'
assert is_family([
['Logan', 'Mike'],
['Logan', 'Jack'],
['Mike', 'Jack']
]) == False, 'Can you be a father for your brather?'
assert is_family([
['Logan', 'William'],
['Logan', 'Jack'],
['Mike', 'Alexander']
]) == False, 'Looks like Mike is stranger in Logan\'s family'
print("Looks like you know everything. It is time for 'Check'!")
July 6, 2018