Curso de Raku / Apéndice 🆕 / Poniéndolo todo junto / Miniproyectos variados / Exercises / Agrupe los anagramas

Solución: Agrupe los anagramas

Aquí tienes una posible solución para la tarea.

Código

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

🦋 Puedes encontrar el código fuente en el archivo anagram-groups.raku.

Salida

act cat
dog
enlist listen silent

Comentarios

  1. Ordenar las letras de una palabra da una clave canónica: todos los anagramas comparten las mismas letras ordenadas, así que añadir a %groups{ ... } los reúne bajo una sola clave. Tras el primer bucle, say %groups muestra la estructura entera: cada clave canónica asociada a su lista de palabras:

    say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
  2. Cada valor del hash es la lista de palabras de ese grupo, impresa alfabéticamente con .sort.join.

Agrupe los anagramas   |   Criba de Eratóstenes