Курс по Raku / Приложение 🆕 / Всичко наедно / Смесени мини проекти / Exercises / Групирайте анаграмите
Решение: Групирайте анаграмите
Ето едно възможно решение на задачата.
Код
my @words = <listen silent enlist cat act dog>;
my %groups;
for @words -> $word {
%groups{ $word.comb.sort.join }.push($word);
}
for %groups.sort(*.key) -> $pair {
say $pair.value.sort.join(' ');
}🦋 Намерете програмата във файла anagram-groups.raku.
Изход
act cat
dog
enlist listen silentКоментари
Сортирането на буквите на думата дава каноничен ключ: всички анаграми споделят едни и същи сортирани букви, така че добавянето към
%groups{ ... }ги събира под един ключ. След първия цикълsay %groupsпоказва цялата структура — всеки каноничен ключ, съпоставен със своя списък от думи:say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
Всяка стойност в хеша е списъкът с думите в тази група, отпечатан по азбучен ред с
.sort.join.