Помогите, пожалуйста, решить одну задачку на Python 3. Название: Грибники

Помогите с задачей, надо использовать множества. Если можно, не импортируйте никакие модули, пожалуйста. Заранее Спасибо!

ТЕКСТ ЗАДАЧИ:

Лето в этом году было очень дождливым. Зато грибов — завались! Компания друзей решила порадовать себя тихой охотой и отправилась в лес. Грибов каждый собрал много, а потом они решили узнать, у кого получилась самая разнообразная корзинка — у кого больше всех видов грибов.

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

Целое число — количество друзей (не меньше 2). Затем для каждого из них вводится имя, а потом перечисляются все собранные грибы, пока не будет введено слово ВСЕ.

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

Нужно вывести имена двух грибников, у которых в корзинке оказалось больше всего различных грибов. Если таких несколько, то вывести имена с наименьшими значениями в порядке возрастания (по алфавиту). Затем сравнить виды грибов в корзинках. Если количество видов одинаково, но они не совпадают, или различное количество видов, вывести РАЗНЫЕ, если и количество одинаково, и виды одни и те же, вывести ОДИНАКОВЫЕ.

Пример 1:

Ввод:

3

Василий

сыроежка

сыроежка

белый гриб

лисичка

ВСЕ

Павел

волнушка

сыроежка

мухомор

ВСЕ

Иннокентий

белый гриб

подосиновик

подберезовик

сыроежка

ВСЕ

Вывод:

Иннокентий

Василий

РАЗНЫЕ

Пример 2:

**Ввод:**

2

Татьяна

мухомор

мухомор

поганка

ВСЕ

Алина

мухомор

поганка

поганка

мухомор

мухомор

поганка

мухомор

ВСЕ

Вывод:

Алина

Татьяна

ОДИНАКОВЫЕ

Я сначала Решил попробовать разобраться без множеств, и, от части, мой код даже работал, но проблема состоит в том, что он перестаёт нормально функционировать, если длина получившихся вложенных списков вот такая: [5, 4, 4, 3] или такая: [6, 4, 4, 4]. Надо отдельно всё сортировать по условию задачи, я не знаю, как это реализовать.

Вот код:

a = []
c = []
e = []
u = []
h = []
g = []
for i in range(int(input())):
    d = []
    b = input()
    a.append(b)
    while b != 'ВСЕ':
        b = input()
        if b != 'ВСЕ':
            d.append(b)
    c.append(d)
for i in c:
    f = []
    for j in i:
        if i.count(j) > 1 and j not in f:
            f.append(j)
        elif i.count(j) == 1:
            f.append(j)
    u.append(f)
for i in range(len(u) - 1):
    for j in range(len(u) - i - 1):
        if len(u[j]) < len(u[j + 1]):
            u[j], u[j + 1] = u[j + 1], u[j]
            a[j], a[j + 1] = a[j + 1], a[j]
for i in u:
    e.append(len(i))
if e.count(max(e)) > 2:
    for i in range(len(u) - 1):
        for j in range(len(u) - i - 1):
            if a[j] > a[j + 1]:
                a[j], a[j + 1] = a[j + 1], a[j]
                u[j], u[j + 1] = u[j + 1], u[j]
    a = a[:2]
    u = u[:2]
    for i in u:
        i.sort()
        h.append(i)
    if h[0] == h[1]:
        for i in a:
            print(i)
        print('ОДИНАКОВЫЕ')
    elif h[0] != h[1] and len(h[0]) == len(h[1]):
        a.sort()
        for i in a:
            print(i)
        print('РАЗНЫЕ')
    else:
        for i in a:
            print(i)
        print('РАЗНЫЕ')
else:
    a = a[:2]
    u = u[:2]
    for i in range(len(u) - 1):
        for j in range(len(u) - i - 1):
            if len(u[j]) < len(u[j + 1]):
                u[j], u[j + 1] = u[j + 1], u[j]
                a[j], a[j + 1] = a[j + 1], a[j]
    for i in u:
        i.sort()
        h.append(i)
    if h[0] == h[1]:
        a.sort()
        for i in a:
            print(i)
        print('ОДИНАКОВЫЕ')
    elif h[0] != h[1] and len(h[0]) == len(h[1]):
        a.sort()
        for i in a:
            print(i)
        print('РАЗНЫЕ')
    else:
        for i in a:
            print(i)
        print('РАЗНЫЕ')

Ответы (1 шт):

Автор решения: MiniMax

Сперва замечания по вашему коду:

  1. Нечитаемый - однобуквенные имена переменных.
  2. Не разделяете код на функции.

Моё решение

Так как из текста задачи не вполне понятно, как требуется выводить имена грибников, делал так, чтобы сошлось с примерами вывода.

def fill_friend_basket(baskets, stop_word):
    friend = input()
    baskets[friend] = {}
    while True:
        mushroom = input()
        if mushroom == stop_word:
            break

        if mushroom not in baskets[friend]:
            baskets[friend][mushroom] = 0

        baskets[friend][mushroom] += 1

def ordered_friends(baskets):
    species_num_friends = {}
    for friend, basket in baskets.items():
        num = len(set(basket.keys()))

        if num not in species_num_friends:
            species_num_friends[num] = []
        species_num_friends[num].append(friend)

    return [
            friend
            for num in sorted(species_num_friends.keys(), reverse=True)
            for friend in sorted(species_num_friends[num])
        ]

def unique_baskets(baskets):
    return set(frozenset(basket) for basket in baskets.values())

def solve():
    stop_word = "ВСЕ"
    baskets = {}
    friends_num_print = 2
    friends_num = int(input())

    for _ in range(friends_num):
        fill_friend_basket(baskets, stop_word)

    for friend in ordered_friends(baskets)[:friends_num_print]:
        print(friend)

    if len(unique_baskets(baskets)) > 1:
        print("РАЗНЫЕ") 
    else:
        print("ОДИНАКОВЫЕ") 

solve()

Input 1

3
Василий
сыроежка
сыроежка
белый гриб
лисичка
ВСЕ
Павел
волнушка
сыроежка
мухомор
ВСЕ
Иннокентий
белый гриб
подосиновик
подберезовик
сыроежка
ВСЕ

Output 1

Иннокентий
Василий
РАЗНЫЕ

Input 2

2
Татьяна
мухомор
мухомор
поганка
ВСЕ
Алина
мухомор
поганка
поганка
мухомор
мухомор
поганка
мухомор
ВСЕ

Output 2

Алина
Татьяна
ОДИНАКОВЫЕ
→ Ссылка