S. Частная собственность

Ребята приносят игрушки в детский сад и играют все вместе.
Сегодня они решили выяснить, игрушки какого типа принадлежат только одному из детей. Напишите программу, которая по списку детей и их игрушек определит «частную собственность».

Формат ввода

В первой строке задается количество детей в группе (N).
В каждой из следующих N строк записано имя ребенка и его игрушки в формате:
Имя: игрушка1, игрушка2, ….

Формат вывода:

Список игрушек, которые есть только у одного из детей в алфавитном порядке.

Пример

Ввод

3
Аня: кукла, машинка, кукла, домик
Боря: машинка, зайчик
Вова: кубики, машинка

Вывод

домик
зайчик
кубики
кукла

Решение

Задача не представляет особой сложности и может быть решена разными способами. Например, через списки и множества или через словари.

Для начала рассмотрим решение с использованием списков и множеств.

Считываем строку, разбивая ее на две части – имя и игрушки, после чего разбиваем игрушки на отдельные слова, получая таким образом список всех игрушек, которые есть у ребенка. Так как имя ребенкау нас не спрашивают его можно игнорировать и кроме того, все игрушки добавлять в один общий список. Поэтому полученные игрушки добавляем в список всех игрушек, предварительно превратив его в множество. Множество нам нужно для того, чтобы избавиться от дублей игрушек у одного ребенка.
По окончании этой нехитрой процедуры мы получили список, в котором будут представлены игрушки всех детей по одной на каждого ребенка.

Остается найти игрушки встречающиеся лишь единожды и задача решена.
Например, это можно сделать с помощью метода count(). Но это решение настолько очевидно, что я не буду его здесь приводить, а покажу другой метод нахождения уникальных элементов.

Мы проходим по списку, постоянно извлекая из него первый элемент (с помощью pop(0)), после чего проверяем есть ли такой элемент в списке и если нет, то добавляем его в список уникальных обектов. После сравнения возвращаем элемент в конец списка.

Остается отсортировать список уникальных игрушек и вывести его.

Решение с использованием словарей.

Накапливаем игрушки тем же способом, что и в первом случае.
Сортируем список после того как занесли туда все игрушки.
Составляем частотный словарь игрушек.
Выводим те игрушки, которые оказались в словаре в единичном экземпляре.

Посмотреть код

Решение

Python
# Списки и множества

toys = []
unique = []

for _ in range(int(input())):
    name, str = input().split(': ')
    toys.extend(set(str.split(', ')))  

for i in range(len(toys)):
    toy = toys.pop(0)
    if toy not in toys:
        unique.append(toy)
    toys.append(toy)

print('\n'.join(sorted(unique)))

Решение

Python
# Словарь

toys = []
unique = {}

for _ in range(int(input())):
    name, str = input().split(': ')
    toys.extend(set(str.split(', ')))  # убрать set для поиска действительно уникальных игрушек  # nopep8 # noqa

for toy in sorted(toys):
    unique[toy] = unique.get(toy, 0) + 1

for toy in unique:
    if unique[toy] == 1:
        print(toy)
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии