Сделал 17 задание

This commit is contained in:
parent 9f865c522d
commit cbdf8dd04a

77
lesson.17.py Normal file
View file

@ -0,0 +1,77 @@
''' ****** Задание 17 из 20 *********
* Теория шести рукопожатий гласит, что любые два человека на планете могут быть связаны друг с другом через максимум шесть знакомых.
Но мы не будем идти так далеко — давайте ограничимся двумя уровнями знакомства.
Напишите программу, которая по списку пар друзей для каждого человека определяет список его друзей второго уровня — то есть друзей его друзей, исключая его самого и его непосредственных друзей.
Формат ввода
В каждой строке записывается два имени.
Окончанием ввода служит пустая строка.
Формат вывода
Выведите список всех людей и их «друзей 2-го уровня» в формате «Человек: Друг1, Друг2, ...».
Список людей и друзей в каждой строке требуется вывести в алфавитном порядке без повторений.
Подсказка
Сформируйте словарь в котором каждому человеку будет соответствовать множество его друзей.
Пройдите по ключам словаря в алфавитном порядке.
Для каждого человека сформируйте новое множество как объединение всех множеств друзей друзей.
Исключите из полученного множества обрабатываемого человека и список его непосредственных друзей.
Пример 1
Ввод
Иванов Петров
Иванов Сергеев
Васильев Петров
Сергеев Яковлев
Петров Кириллов
Петров Яковлев
Вывод
Васильев: Иванов, Кириллов, Яковлев
Иванов: Васильев, Кириллов, Яковлев
Кириллов: Васильев, Иванов, Яковлев
Петров: Сергеев
Сергеев: Петров
Яковлев: Васильев, Иванов, Кириллов
'''
if __name__ == "__main__":
friends = {}
while x := input().split():
if x[0] not in friends:
friends[x[0]] = {x[1]}
else:
friends[x[0]].add(x[1])
if x[1] not in friends:
friends[x[1]] = {x[0]}
else:
friends[x[1]].add(x[0])
friends_2 = dict.fromkeys(friends, set())
for friend in friends:
for n in friends[friend]:
friends_2[friend] = friends_2[friend].union(friends[n])
friends_2[friend].discard(friend)
for z in friends[friend]:
friends_2[friend].discard(z)
data = []
for friend in friends_2:
data.append(f'{friend}: {", ".join(sorted(friends_2[friend]))}')
data.sort()
for string in data:
print(string)