Сделал 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