Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 10.12.2020
Сообщений: 5

Вывод списка анаграмм

10.12.2020, 21:37. Показов 2236. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, необходимо написать функцию, используя Data.list, выводящую список анаграмм.
anagram :: [String] -> [[String]]
Пример:
anagram ["abc", "hehe", "foo", "cba", "eheh", "hhee", "oof", "ofo"]

[["eheh","hehe","hhee"],["foo","ofo","oof"]]

Я додумался только до nub.permutations, но это принимает на вход только одну строку и выводит список ее анаграмм
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2020, 21:37
Ответы с готовыми решениями:

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

Вывод списка на экран с возможностью раскрытия одного из пунктов списка
По разному пытался сформулировать вопрос, но гугл так и не дал мне даже близко чего-то подходящего. Суть такова, что на экран...

Однонаправленный список. Вывод элементов, списка. Удаление списка.
Создать однонаправленный список натуральных чисел. Найти и вывести элементы списка, кратные 3. Удалить из списка все эти элементы и вывести...

12
Модератор
 Аватар для Curry
5158 / 3487 / 536
Регистрация: 01.06.2013
Сообщений: 7,564
Записей в блоге: 9
10.12.2020, 22:16
Ну, если только их Data.List
Haskell
1
2
3
4
5
6
7
import Data.List 
 
anagram :: [String] -> [[String]]
anagram = map (nub. map snd) . groupBy (\(l,_) (r,_) -> l == r) . sortOn fst .  map (\s -> (sort s,s))
 
main::IO()
main = print $ anagram ["abc", "hehe", "foo", "cba", "eheh", "hhee", "oof", "ofo"]
0
0 / 0 / 0
Регистрация: 10.12.2020
Сообщений: 5
10.12.2020, 22:20  [ТС]
Спасибо, но я видимо забыл уточнить, надо выводить не все анаграммы, а только те, которых больше, как в примере
0
Модератор
 Аватар для Curry
5158 / 3487 / 536
Регистрация: 01.06.2013
Сообщений: 7,564
Записей в блоге: 9
10.12.2020, 22:34
Цитата Сообщение от IvanArtt Посмотреть сообщение
Спасибо, но я видимо забыл уточнить, надо выводить не все анаграммы, а только те, которых больше, как в примере
Вы вообще "забыли" сформулировать задание. Привести пример, это ни разу не формулировка, а только дополнение к ней.
Попытайтесь снова.
1
0 / 0 / 0
Регистрация: 10.12.2020
Сообщений: 5
10.12.2020, 22:37  [ТС]
Прошу прощения, надо найти все множества анаграмм, которые содержат в себе наибольшее количество слов.

Функция должна иметь следующий тип:

anagram :: [String] -> [[String]]

Пример:

anagram ["abc", "hehe", "foo", "cba", "eheh", "hhee", "oof", "ofo"]

[["eheh","hehe","hhee"],["foo","ofo","oof"]]

То есть в вывод идут только самые длинные списки, в данном случае состоящие из 3 слов
0
Модератор
 Аватар для Curry
5158 / 3487 / 536
Регистрация: 01.06.2013
Сообщений: 7,564
Записей в блоге: 9
10.12.2020, 22:53
Цитата Сообщение от IvanArtt Посмотреть сообщение
надо найти все множества анаграмм, которые содержат в себе наибольшее количество слов.
Формулировать задание вы не умеете.
Я понял так
Haskell
1
2
3
4
anagram :: [String] -> [[String]]
anagram lst =  let t = map (nub. map snd) $ groupBy (\(l,_) (r,_) -> l == r) $ sortOn fst $  map (\s -> (sort s,s)) lst
                   cmax = maximum $ map length t
               in  filter (\l -> cmax == length l) t
2
0 / 0 / 0
Регистрация: 10.12.2020
Сообщений: 5
10.12.2020, 22:57  [ТС]
Но весь код надо уместить в одну строку
0
Модератор
 Аватар для Curry
5158 / 3487 / 536
Регистрация: 01.06.2013
Сообщений: 7,564
Записей в блоге: 9
10.12.2020, 23:04
Лучший ответ Сообщение было отмечено IvanArtt как решение

Решение

Haskell
1
anagram lst =  let {t = map (nub. map snd) $ groupBy (\(l,_) (r,_) -> l == r) $ sortOn fst $  map (\s -> (sort s,s)) lst;  cmax = maximum $ map length t} in  filter (\l -> cmax == length l) t
2
0 / 0 / 0
Регистрация: 10.12.2020
Сообщений: 5
11.12.2020, 06:46  [ТС]
Решение работает, но есть ли вариант уместить весь код в строку длинной не больше 104 символов, данный вариант я смог укоротить только до 146 символов, я думаю порядок слов не важен
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
11.12.2020, 14:40
IvanArtt, нда... Что за формулировка!.. "в вывод идут только самые длинные списки, в данном случае состоящие из 3 слов". Строка "abc" породит список из шести слов. Почему ее нет в выводе? И можно ли использовать функции Data.List?

Мне кажется, результат должен быть другим... Вот (по образу и подобию варианта Curry):

Haskell
1
2
3
4
5
6
import Data.List
 
f ss = let {t = nub $ map (\x -> sort $ nub $ permutations x) ss; cmax = maximum $ map length t} in filter (\z -> cmax == length z) t
 
main = print $ f ["abc", "hehe", "foo", "cba", "eheh", "hhee", "oof", "ofo"]
[["abc","acb","bac","bca","cab","cba"],["eehh","eheh","ehhe","heeh","hehe","hhee"]]
1
Модератор
 Аватар для Curry
5158 / 3487 / 536
Регистрация: 01.06.2013
Сообщений: 7,564
Записей в блоге: 9
11.12.2020, 14:56
Catstail, из примера я решил что формулировка что-то вроде. "Дан список строк. Разобрать его на подсписки в каждом из которых все анаграммы одного и того же слова из исходного списка. Вывести список подсписков-анаграмм максимальной длины."
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
11.12.2020, 14:58
Curry, а... Я его не понял.
1
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 1
12.12.2020, 22:10
Надо найти все множества анаграмм, которые содержат в себе наибольшее количество слов.

Функция должна иметь следующий тип:

Haskell
1
anagram :: [String] -> [[String]]

Пример:

Haskell
1
2
GHCi> anagram ["abc", "hehe", "foo", "cba", "eheh", "hhee", "oof", "ofo"]
[["eheh","hehe","hhee"],["foo","ofo","oof"]]

То есть в вывод идут только самые длинные списки, в данном случае состоящие из 3 слов Код в одну строку и символов не более 100

Это было само задание, такой код получился:

Haskell
1
anagram lst =  let {t = map (nub. map snd) $ groupBy (\(l,_) (r,_) -> l == r) $ sortOn fst $  map (\s -> (sort s,s)) lst;  cmax = maximum $ map length t} in  filter (\l -> cmax == length l) t
Он не проходит по длине, (если что `import Data.List` прописывать не нужно), заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2020, 22:10
Помогаю со студенческими работами здесь

Поиск элемента обычного списка данных и вывод отдельной части списка по соответствию этому элементы
Нужна срочно помощь. Сдавать после завтра нужно. Задание: Найти клиентов по заданным номерам заказов и способов оплаты через...

Заполнение списка и вывод отсортированного списка на экран
нужно Создать список,значения которого равны значениям массива.Создать список,равный отсортированному первому списку. ...

Удаление элемента списка/вывод нового списка
В общем, в 3м массиве у меня по идее должен был собраться новый список но выводится он чего-то не хочет по нормальному. А во 2м пытаюсь...

Access 2003 - вывод списка 2 от выделеного в списка 1
В форме два списка - первый li формируется из таблицы Изделия Private Sub Form_load() Dim listt As String listt = "SELECT...

Списки, вывод списка, заполнение списка
Здравствуйте, может кто-то рассказать и показать как правильно заполнять, выводить список который основан на структуре с 5 элементами...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru