2018 подписчиков
👣 Решаем задачи с codewars
Начнем с простой задачи
Что такое анаграмма?
Aнаграмма – перестановка букв в слове или словосочетании, вследствие чего возникает другое слово или словосочетание. Два слова являются анаграммами друг друга, если они оба содержат одни и те же буквы.
Нппример:
'abba' & 'baab' == true
'abba' & 'bbaa' == true
'abba' & 'abbba' == false
'abba' & 'abca' == false
Напишите функцию, которая найдет все анаграммы слова из списка. Вам будет дано слово и массив со словами. Вы должны вернуть массив всех анаграмм для этого слова или пустой массив, если их нет. Например:
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']
anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']
anagrams('laser', ['lazing', 'lazy', 'lacer']) => []
Решение:
package kata
import (
"sort"
)
type Word string
type Words []string
func Anagrams(word string, words []string) []string {
sorted := Word(word).Sorted()
areAnagrams := func(b Word) bool {
return sorted == b.Sorted()
}
return Words(words).Filter(areAnagrams)
}
func (ctx Word) Sorted() Word {
sorted := []rune(ctx)
sort.SliceStable(sorted, func(i, j int) bool {
a := sorted[i]
b := sorted[j]
return a < b
})
return Word(sorted)
}
func (ctx Words) Filter(predicate func(x Word) bool) Words {
var filtered Words
for _, x := range ctx {
if predicate(Word(x)) {
filtered = append(filtered, x)
}
}
return filtered
}
1 минута
28 декабря 2022