Курс Raku / Додаток 🆕 / Робота з даними / Текст і рядки / Вправи / Кодування довжин серій
Розв’язання: Кодування довжин серій
Ось одне з можливих розв’язань задачі.
Код
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;