Kurso de Raku / Aldono 🆕 / Labori kun datumoj / Teksto kaj ĉenoj / Exercises / Kodado laŭ serilongo
Solvo: Kodado laŭ serilongo
Jen ebla solvo de la tasko.
Kodo
my $text = 'aaabbbbcc';
my $encoded = '';
for $text ~~ m:g/ (.) $0* / -> $match {
$encoded ~= $match[0] ~ $match.chars;
}
say $encoded;🦋 Vi povas trovi la fontkodon en la dosiero run-length.raku.
Eligo
a3b4c2Komentoj
La ŝablono
(.) $0*kaptas unu signon kaj poste kongruas kun tiom da pliaj kopioj de ĝi, kiom sekvas — unu tuta serio por ĉiu kongruo.m:gkolektas ĉiun serion.Por ĉiu serio,
$match[0]estas la ripetita litero kaj$match.charsestas, kiom longa la serio estas, do la du kune donas erojn kiela3.Nomi la kongruon per
-> $matchestas laŭvola. Sen tio, ĉiu kongruo fariĝas la temo$_, kaj vi povas forlasi la variablon kaj voki la metodojn sur ĝi rekte:my $text = 'aaabbbbcc'; my $encoded = ''; for $text ~~ m:g/ (.) $0* / { $encoded ~= .[0] ~ .chars; } say $encoded;