Задача "Анаграммы"
Дана строка со словами через пробел (кириллица). Среди слов найти все пары анаграмм. Пары анаграмм вывести в алфавитном порядке, среди пар сортировка тоже по алфавиту. Каждая пара выводится в новой строке в нижнем регистре.
Ввод:
Кот нос ток сон клад рама вход книга вдох
Вывод:
вдох вход
кот ток
нос сон
Ответы (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)