Raku-Kurs / Anhang 🆕 / Arbeiten mit Daten / Text und Zeichenketten / Exercises / Lauflängenkodierung
Lösung: Lauflängenkodierung
Hier ist eine mögliche Lösung der Aufgabe.
Code
my $text = 'aaabbbbcc';
my $encoded = '';
for $text ~~ m:g/ (.) $0* / -> $match {
$encoded ~= $match[0] ~ $match.chars;
}
say $encoded;🦋 Du findest den Quellcode in der Datei run-length.raku.
Ausgabe
a3b4c2Kommentare
Das Muster
(.) $0*capturt ein Zeichen und trifft dann so viele weitere Kopien davon, wie folgen — ein ganzer Lauf je Treffer.m:gsammelt jeden Lauf ein.Für jeden Lauf ist
$match[0]der wiederholte Buchstabe und$match.charsdie Länge des Laufs, beides zusammen ergibt also Einträge wiea3.Den Treffer mit
-> $matchzu benennen ist freiwillig. Ohne das wird jeder Treffer zum Thema$_, und Sie können die Variable weglassen und die Methoden unmittelbar darauf aufrufen:my $text = 'aaabbbbcc'; my $encoded = ''; for $text ~~ m:g/ (.) $0* / { $encoded ~= .[0] ~ .chars; } say $encoded;