From cbdf8dd04ab8e6007d7ab724691e78ce0565ffcc Mon Sep 17 00:00:00 2001 From: Zver Date: Tue, 16 Dec 2025 11:35:30 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=2017=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson.17.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 lesson.17.py diff --git a/lesson.17.py b/lesson.17.py new file mode 100644 index 0000000..8711012 --- /dev/null +++ b/lesson.17.py @@ -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) + + + + + +