Curso de Raku / Apéndice 🆕 / Trabajar con datos / Texto y cadenas / Exercises / Codificación por longitud de series
Solución: Codificación por longitud de series
Aquí tienes una posible solución para la tarea.
Código
my $text = 'aaabbbbcc';
my $encoded = '';
for $text ~~ m:g/ (.) $0* / -> $match {
$encoded ~= $match[0] ~ $match.chars;
}
say $encoded;🦋 Puedes encontrar el código fuente en el archivo run-length.raku.
Salida
a3b4c2Comentarios
El patrón
(.) $0*captura un carácter y después empareja tantas copias más de él como sigan: una serie entera por coincidencia.m:grecoge todas las series.Para cada serie,
$match[0]es la letra repetida y$match.charses su longitud, así que las dos juntas dan entradas comoa3.Nombrar la coincidencia con
-> $matches opcional. Sin ello, cada coincidencia pasa a ser el tema$_, y puedes prescindir de la variable y llamar a los métodos sobre él directamente:my $text = 'aaabbbbcc'; my $encoded = ''; for $text ~~ m:g/ (.) $0* / { $encoded ~= .[0] ~ .chars; } say $encoded;
Navegación del curso
← Codificación por longitud de series | Listas, arrays y hashes →