Cursus Raku / Addendum 🆕 / Werken met gegevens / Tekst en strings / Exercises / Runlengtecodering
Oplossing: Runlengtecodering
Hier is een mogelijke oplossing voor de taak.
Code
my $text = 'aaabbbbcc';
my $encoded = '';
for $text ~~ m:g/ (.) $0* / -> $match {
$encoded ~= $match[0] ~ $match.chars;
}
say $encoded;🦋 Je kunt de broncode vinden in het bestand run-length.raku.
Uitvoer
a3b4c2Opmerkingen
Het patroon
(.) $0*captureert één teken en matcht daarna zoveel verdere kopieën ervan als erop volgen — één hele reeks per match.m:gverzamelt elke reeks.Voor elke reeks is
$match[0]de herhaalde letter en$match.charshoe lang de reeks is, dus samen geven de twee items alsa3.De match met
-> $matcheen naam geven is optioneel. Zonder dat wordt elke match het onderwerp$_, en kun je de variabele weglaten en de methoden er rechtstreeks op aanroepen:my $text = 'aaabbbbcc'; my $encoded = ''; for $text ~~ m:g/ (.) $0* / { $encoded ~= .[0] ~ .chars; } say $encoded;