project_python.3.2/lesson.17.py

78 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

''' ****** Задание 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)