Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31

Анаграммы

11.05.2020, 10:32. Показов 7321. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Анагра́мма (от греч. ανα- — «пере» и γράμμα — «буква») — литературный приём, состоящий в перестановке букв или звуков определённого слова (или словосочетания), что в результате даёт другое слово или словосочетание (Википедия).

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

Формат ввода
В первой строке идёт целое число n (1 ≤ n ≤ 100 000), количество исходных слов.

Далее следует n слов, по одному слову в строке, слова могут идти в разном регистре!

Формат вывода
В одной строке должны идти слова, которые являются анаграммами друг для друга, в нижнем регистре, через пробел. Порядок слов — лексикографический (как в словаре). Порядок строк так же лексикографический.

Пример
Ввод Вывод
11
окорок
петлей
Плетей
рококо
теплей
Тишь
ТОМНО
тонко
тонок
тоном
шить
окорок рококо
петлей плетей теплей
тишь шить
томно тоном
тонко тонок

Python
1
2
3
4
5
6
7
8
a, c = [input().lower() for _ in range(int(input()))], []
for i in a:
    b = [j for j in a if sorted(i) == sorted(j)]
    if len(b) > 1:
        c.append(b)
        for p in range(len([j for j in a if sorted(i) == sorted(j) and i != j])):
            del a[p]
print(*sorted([' '.join(sorted(i)) for i in c]), sep='\n')
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2020, 10:32
Ответы с готовыми решениями:

Анаграммы
Есть такая несложная задача. Выписать все слова, которые являются анаграммами друг для друга, например «замок» и «мазок». Проверка...

Анаграммы
Задается словарь (список слов). Найти в нем все анаграммы (слова, составленные из одних и тех же букв).

Анаграммы
number_of_words = int(input()) if number_of_words > 100000: exit(0) words = anagrammbl = for i in...

56
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 16:31
Студворк — интернет-сервис помощи студентам
tuizk, ты уже мне должен, но вот еще варик
Python
1
2
3
4
5
6
7
8
9
from collections import defaultdict
 
comb = defaultdict(list)
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    comb[str(set(word))].append(word)
for a_list in comb.values():
    print(' '.join(sorted(a_list)))
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
11.05.2020, 16:36  [ТС]
Welemir1, ответ неправильный)

Добавлено через 2 минуты
Welemir1,только не понял я прикола. Как получился непраильный вывод?
Ввод
11
окорок
петлей
Плетей
рококо
теплей
Тишь
ТОМНО
тонко
тонок
тоном
шить
Ожидаемый результат
окорок рококо
петлей плетей теплей
тишь шить
томно тоном
тонко тонок
Вывод
окорок рококо
петлей плетей теплей
тишь
томно тоном
тонко тонок
шить
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 16:41
tuizk, я сам все ввел, верно выводит
Python
1
2
3
4
5
6
7
8
9
10
11
from collections import defaultdict
 
comb = defaultdict(list)
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    comb[str(set(word))].append(word)
for a_list in comb.values():
    if len(a_list) == 1:
        continue
    print(' '.join(sorted(a_list)))
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
11.05.2020, 16:47  [ТС]
Welemir1, на 2 тесте ломается. Неправильный ответ
Ввод
100000
и
в
не
на
с
что
как
я
к
он
по
а
его
из
это
от
все
за
у
же
то
В
но
о
И
А
было
для
так
Я
бы
только
был
ее
она
Но
или
меня
их
еще
мне
мы
до
уже
Он
они
когда
ни
ему
чтобы
быть
ты
время
при
есть
были
была
даже
вы
если
сказал
очень
ли
Это
может
во
себя
Не
него
под
нас
со
того
На
чем
будет
этого
где
без
этом
нет
себе
раз
вот
том
Да
можно
них
которые
да
всех
С
более
тем
там
человек
Как
теперь
этот
который
после
Что
жизни
Ну
ничего
потому
лет
один
Вот
надо
года
Она
своей
всего
тоже
Так
через
тут
потом
им
этой
У
ним
больше
нам
Мы
1
здесь
вас
тогда
эти
Все
об
между
несколько
кто
са

File is too long to be displayed fully
Ожидаемый результат
0,1 1,0
0,15 10,5
0,2 2,0
0,3 3,0
0,6 6,0
01 10
02 20
03 30
04 40
05 50
06 60
07 70
08 80
09 90
095 950
1,2 2,1
1,3 3,1
1.000 10.00
1.2 2.1
1.3 3.1
1.4 4.1
1.5 5.1
1001 1100
101 110
102 120 201 210
103 130 301 310
104 140 410
105 150
106 160
107 170
108 180
109 190
112 121 211
113 131 311
114 141
115 151
116 161
117 171
118 181
119 191
12 21
12.00 21.00
1200 2001 2010
122 212 221
123 132 213 231 312 321
124 142 214 241 412
125 152 215 251
126 162 216 261
127 172 217 271
128 182 218 281 812
129 192 219 291
13 31
133 313 331
134 143 314
135 153 315
136 163 316
137 173 317 371
138 183 318 381
139 193 319
14 41
145 154 451
146 164
147 174
148 184
149 194
15 51
156 165
157 175
158 185
159 195
16 61
167 176
168 186
169 196
17 71
1703 1730
1704 1740
1705 1750
1706 1760
1709 1790 1907 1970
1717 1771
1718 1817 1871
1719 1791 1917 1971
1758 1857 1875
1769 1796 1967 1976
178 187
1780 1807 1870
1783 1837 1873
1787 1877
1789 1798 1879 1897 1978 1987
179 197
1792 1927 1972
1793 1937 1973
1794 1947 1974
1797 1977
1799 1979

File is too long to be displayed fully
Вывод
и и
в в вв вв
не не не нее
ан ан ан анн анна на на на нана
с с сс сс
что что что
ак ак ак ка ка ка как как как
я я
к к
но но но он он он оно оно оон
оп оп оп по по по поп поп
а а аа
его его его
зи из из из
это это это этот этот
от от от ото отто то то то тоо тот тот
вес вес весе все все все сев сев
за за за
у у
еж еже же же
о о ооо
было было
для для для
акт акт акта атак атака атака ката катка так так так такт такта
колоть кольт только только только
был был лбы
е е ее ее ее
нонна она она она
ил ил ил или или или илии ли ли ли лил лили лили лилии
меня меня меня меняя
их их их хи хи
еще �

File is too long to be displayed fully
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 16:52
tuizk, тут уже двумя флянами Джека Дениелса пахнет
Python
1
2
3
4
5
6
7
8
9
10
11
from collections import defaultdict
 
comb = defaultdict(list)
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    comb[tuple(sorted(word))].append(word)
all_ = tuple(comb.values())
del comb
for a_list in all_:
    print(' '.join(sorted(a_list)))
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
11.05.2020, 16:52
Понял, почему так увеличилась память. Не знал, что sorted от строки возвращает список букв. Если этот вопрос поправить, то программа из #15 будет выглядеть так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
a = [input().lower() for _ in range(int(input()))]
a.sort()
i = len(a)-1
while i > 0:
    if a[i] == a[i-1]:
        del a[i]
    i -= 1
b = [''.join(sorted(w)) for w in a]
i = 0
while i < len(a) - 1:
    s = [a[i]]
    j = i + 1
    while j < len(a):
        if b[j] == b[i]:
            s.append(a[j])
            del a[j]
            del b[j]
            j -= 1
        j += 1
    if len(s) > 1:
        print(*s, sep=" ")
    i += 1
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
11.05.2020, 16:55  [ТС]
Welemir1, Время / Память
498ms / 67.8 MB. ААААААААААААААААААААААААААА
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 16:59
tuizk,
Python
1
2
3
4
5
6
7
8
9
10
from collections import defaultdict
 
comb = defaultdict(list)
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    comb[tuple(sorted(word))].append(word)
all_ = tuple(comb.values())
del comb
[print(' '.join(sorted(a_list))) for a_list in all_]
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
11.05.2020, 17:07  [ТС]
Welemir1, 588ms / 79.2 MB
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 17:12
tuizk, ну ты сам уже должен методом тыка пробовать
Python
1
2
3
4
5
6
7
8
from collections import defaultdict
 
comb = defaultdict(list)
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    comb[tuple(sorted(word))].append(word)
[print(' '.join(sorted(a_list))) for a_list in comb.values()]
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
11.05.2020, 17:14
tuizk, если делать с помощью словаря, как советовал ваш друг, то
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n = int(input())
d = {}
print(n)
for i in range(n):
    w = input().lower()
    s = ''.join(sorted(w))
    wl = d.get(s)
    if wl:
        wl.append(w)
    else:
       d[s] = [w]
for k in d.keys():
    if len(d[k]) > 1:
        d[k].sort()
        print(*d[k])
Но здесь с порядком вывода я не очень понял как надо.
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
11.05.2020, 17:22  [ТС]
Welemir1, 498ms / 68.4 MB

Добавлено через 2 минуты
palva, с выводом ошибка
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 17:37
tuizk, чисто уже по приколу
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
comb = []
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    for a_list in comb:
        if set(a_list[0]) == set(word):
            a_list.append(word)
            a_list.sort()
            word = None
            break
    if word:
        comb.append([word])
comb.sort(key=lambda x: x[0])
[print(' '.join(a_l)) for a_l in comb]
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
11.05.2020, 17:41  [ТС]
Welemir1, 4063ms / 3.83 MB. ПрЕкол не сработал
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
11.05.2020, 17:43
Цитата Сообщение от tuizk Посмотреть сообщение
palva, с выводом ошибка
Значит, недосортировал
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
n = int(input())
d = {}
print(n)
for i in range(n):
    w = input().lower()
    s = ''.join(sorted(w))
    wl = d.get(s)
    if wl:
        wl.append(w)
    else:
       d[s] = [w]
out =[]
for k in d.keys():
    if len(d[k]) > 1:
        d[k].sort()
        out.append(' '.join(d[k]))
out.sort()
print(*out, sep="\n")
Добавлено через 16 секунд
tuizk, а #46 пробовали?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2020, 17:48
Цитата Сообщение от tuizk Посмотреть сообщение
ПрЕкол не сработал
а вот так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
comb = []
words_count = int(input())
for _ in range(words_count):
    word = input().lower()
    for a_list in comb:
        if set(a_list[0]) == set(word):
            a_list.append(word)
            word = None
            break
    if word:
        comb.append([word])
[a_l.sort() for a_l in comb]
comb.sort(key=lambda x: x[0])
[print(' '.join(a_l)) for a_l in comb]
0
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31
12.05.2020, 11:03  [ТС]
Welemir1, 4063ms / 3.83 MB Извините за задержку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2020, 11:03
Помогаю со студенческими работами здесь

Игра Анаграммы
Хочу сделать так чтобы во время просьбы о подсказке при нажатии &quot;нет&quot; выходило из игры, пробовал сам - не вышло Помогите оптимизировать...

Ох уж эти анаграммы
Задача Анагра́мма (от греч. ανα- — «пере» и γράμμα — «буква») — литературный приём, состоящий в перестановке букв или звуков...

Ох уж эти анаграммы
number_of_words = int(input()) # количество слов if number_of_words &gt; 100000: exit(0) words = set() # слова, без повторений. ...

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

Игра анаграммы. Майкл Доусон "Программируем на Python". Глава 4
Добрый день! Задача: доработать игру &quot;Анаграммы&quot; из указанного учебника так, чтобы к каждому слову полагалась подсказка. Игрок должен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru