Raku-Kurs / Anhang 🆕 / Alles zusammenbringen / Gemischte Mini-Projekte / Exercises / Gruppieren Sie die Anagramme
Lösung: Gruppieren Sie die Anagramme
Hier ist eine mögliche Lösung der Aufgabe.
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(' ');
}🦋 Du findest den Quellcode in der Datei anagram-groups.raku.
Ausgabe
act cat
dog
enlist listen silentKommentare
Die Buchstaben eines Wortes zu sortieren gibt einen kanonischen Schlüssel: Alle Anagramme teilen dieselben sortierten Buchstaben, sie auf
%groups{ ... }zu pushen sammelt sie also unter einem Schlüssel. Nach der ersten Schleife zeigtsay %groupsdie ganze Struktur — jeden kanonischen Schlüssel mit seiner Liste von Wörtern:say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
Jeder Hashwert ist die Liste der Wörter dieser Gruppe, mit
.sort.joinalphabetisch ausgegeben.