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 silentComentarios
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 %groupsmuestra la estructura entera: cada clave canónica asociada a su lista de palabras:say %groups; # {act => [cat act], dgo => [dog], eilnst => [listen silent enlist]}
Cada valor del hash es la lista de palabras de ese grupo, impresa alfabéticamente con
.sort.join.