Курс Raku / Додаток 🆕 / Збираємо все разом / Мішані міні-проєкти / Вправи / Згрупуйте анаграми

Розв’язання: Згрупуйте анаграми

Ось одне з можливих розв’язань задачі.

Код

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

Коментарі

  1. Сортування літер слова дає канонічний ключ: усі анаграми мають той самий набір відсортованих літер, тож додавання до %groups{ ... } збирає їх під одним ключем. Після першого циклу say %groups показує всю структуру — кожен канонічний ключ, що відображається на свій список слів:

    say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
  2. Кожне значення хеша є списком слів у цій групі, надрукованим за абеткою через .sort.join.

Навігація курсом

Згрупуйте анаграми   |   Решето Ератосфена