Corso di Raku / Appendice 🆕 / Mettere tutto insieme / Mini-progetti misti / Exercises / Raggruppate gli anagrammi

Soluzione: Raggruppate gli anagrammi

Ecco una possibile soluzione del compito.

Codice

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(' ');
}

🦋 Trova il programma nel file anagram-groups.raku.

Output

act cat
dog
enlist listen silent

Commenti

  1. Ordinare le lettere di una parola dà una chiave canonica: tutti gli anagrammi condividono le stesse lettere ordinate, quindi spingerli in %groups{ ... } li raccoglie sotto un’unica chiave. Dopo il primo ciclo, say %groups mostra l’intera struttura — ogni chiave canonica con la propria lista di parole:

    say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
  2. Ogni valore dell’hash è la lista delle parole di quel gruppo, stampata in ordine alfabetico con .sort.join.

Raggruppate gli anagrammi   |   Crivello di Eratostene