Задача "Анаграммы"

Дана строка со словами через пробел (кириллица). Среди слов найти все пары анаграмм. Пары анаграмм вывести в алфавитном порядке, среди пар сортировка тоже по алфавиту. Каждая пара выводится в новой строке в нижнем регистре.

Ввод:

Кот нос ток сон клад рама вход книга вдох

Вывод:

вдох вход
кот ток
нос сон

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

Автор решения: Michael Tetelev

Поскольку вы не предоставили ваши исходники на питоне, а Здесь предлагать выполнить работу за вас и наоборот — моветон., то вот вам псевдокод, на питон перевести - ваша часть.

строка = считать_строку()
строка = привести_к_нижнему_регистру(строка)
список_слов = разбить_по_пробелу(строка)
список_слов = множество(список_слов)

все_анаграммы = пустой_словарь
пока слово в список_слов:
    если анаграмма в список_слов:
        буквы = слово.сортировать()
        если буквы в все_анаграммы.все_ключи:
            все_анаграммы[буквы].добавить(слово)
        иначе:
            все_анаграммы[буквы] = список(слово, )

слова_анаграммы = пустой_список
пока слова в все_анаграммы.значения:
    если слова.длина > 1:
        слова.сортировать()
        слова_анаграммы.добавить(слова)

слова_анаграммы.сортировать(лямбда(слова) {вернуть слова[0]})
строка_с_анаграммами = пустая_строка
пока слова в слова_анаграммы:
    строка_слов = слова.соединить(через=' ')
    строка_с_анаграммами.добавить(' ' + слова)
вывести(строка_с_анаграммами)
→ Ссылка
Автор решения: Alex

Решение нашёл. Что оно значит, не знаю, но тесты проходит.

text = sorted(input().lower().split(" "))
outtext = []
while len(text) > 0:
    s = 1
    iss_all = True
    while s < len(text):
        t = sum([ord(x) for x in text[0]])
        t1 = sum([ord(x) for x in text[s]])
        if t == t1 and text[0] != text[s]:
            outtext.append([text[0], text[s]])
            while outtext[-1][0] in text:
                text.remove(outtext[-1][0])
            while outtext[-1][1] in text:
                text.remove(outtext[-1][1])
            iss_all = False
            break
        else:
            s += 1
    if iss_all:
        text.remove(text[0])
for i in outtext:
    print(*i)
→ Ссылка