Курс по Raku / Приложение 🆕 / Работа с данни / Текст и низове / Exercises / Кодиране по дължина на серии
Решение: Кодиране по дължина на серии
Ето едно възможно решение на задачата.
Код
my $text = 'aaabbbbcc';
my $encoded = '';
for $text ~~ m:g/ (.) $0* / -> $match {
$encoded ~= $match[0] ~ $match.chars;
}
say $encoded;🦋 Намерете програмата във файла run-length.raku.
Изход
a3b4c2Коментари
Шаблонът
(.) $0*прихваща един знак, а после съпоставя толкова негови следващи копия, колкото има — по цяла серия на съвпадение.m:gсъбира всяка серия.За всяка серия
$match[0]е повтарящата се буква, а$match.charsе дължината на серията, така че двете заедно дават записи катоa3.Именуването на съвпадението с
-> $matchе незадължително. Без него всяко съвпадение става темата$_и можете да махнете променливата, като извиквате методите направо върху нея:my $text = 'aaabbbbcc'; my $encoded = ''; for $text ~~ m:g/ (.) $0* / { $encoded ~= .[0] ~ .chars; } say $encoded;