LINUX.ORG.RU

Можно ли при помощи bash узнать, является ли одно слово анаграммой для второго?


0

1

Анаграмма - ето когда кол-во буквы просто переставлены, но количество каждой из них неизменно. Например, «лес» и «сел», «апельсин» и «спаниель» и пр. Как-то можно при помощи bash, возможно, в regexp проверить, являются ли два слова анаграммами друг другу?

import Data.List (group, sort)

isAnagram :: String -> String -> Bool
a `isAnagram` b = chrs a == chrs b where chrs = group . sort

На баш сам переведешь.

anonymous
()
Ответ на: комментарий от anonymous

Что-то я затупил. Можно ведь и без group :)

В общем алгоритм такой - сортируешь символы в строках и сравниваешь результаты.

anonymous
()
Ответ на: комментарий от abr_linux

Пожалуйста. Вот так, например, можно формировать «слова» для сравнения:

#!/bin/bash
function mkword(){
   echo -n "$1"|sed 's/\([[:alpha:]]\)/\1\n/g'|sort| tr "\n" "."
}
word1=$(mkword $1)
word2=$(mkword $2)
[ "$word1" = "$word2" ] && echo "анаграмма" || echo "не анаграмма"

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Можно ведь и без group :)

Мало того, можно и с Data.Function.on

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.