Сделал 17 задание
This commit is contained in:
parent
9f865c522d
commit
cbdf8dd04a
77
lesson.17.py
Normal file
77
lesson.17.py
Normal 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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in a new issue