0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 31

Анаграммы

11.05.2020, 10:32. Показов 7408. Ответов 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,696
Записей в блоге: 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,696
Записей в блоге: 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,696
Записей в блоге: 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,696
Записей в блоге: 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,696
Записей в блоге: 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,696
Записей в блоге: 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,696
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru