Cursus Raku / Addendum 🆕 / Alles samenbrengen / Gemengde miniprojecten / Exercises / Groepeer de anagrammen
Oplossing: Groepeer de anagrammen
Hier is een mogelijke oplossing voor de taak.
Code
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(' ');
}🦋 Je kunt de broncode vinden in het bestand anagram-groups.raku.
Uitvoer
act cat
dog
enlist listen silentOpmerkingen
De letters van een woord sorteren geeft een canonieke sleutel: alle anagrammen delen dezelfde gesorteerde letters, dus verzamelt op
%groups{ ... }duwen ze onder één sleutel. Na de eerste lus toontsay %groupsde hele structuur — elke canonieke sleutel gekoppeld aan zijn lijst woorden:say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
Elke hashwaarde is de lijst woorden in die groep, alfabetisch afgedrukt met
.sort.join.