Курс по 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

Коментари

  1. Сортирането на буквите на думата дава каноничен ключ: всички анаграми споделят едни и същи сортирани букви, така че добавянето към %groups{ ... } ги събира под един ключ. След първия цикъл say %groups показва цялата структура — всеки каноничен ключ, съпоставен със своя списък от думи:

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

Навигация в курса

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