Пунктирная рамка JavaScript для замены <пунктирная рамка> тегов

Возможно, вы слишком усложняете проблему. По сути, это вариант кодирования длин серий .

Идея состоит в том, чтобы пройтись по списку и увеличить счетчик для каждого символа, чтобы вычислить, какова длина «бега» или сколько последующих символов равно текущему символу. Найдя длину, добавьте ее к результату в соответствующем формате и пропустите все элементы, которые вы только что свели вместе.

use strict;
use warnings;
use Data::Dumper;

my @a = split //, "aaabccdcx";
my @rle;

for (my $i = 0; $i < @a;) {
    my $j = 1;

    while ($i + $j < @a && $a[$i+$j] eq $a[$i]) {
        $j++;
    }

    push @rle, $a[$i] . ($j > 1 ? " (x$j)" : "");
    $i += $j;
}

print Dumper \@rle;

Вывод:

$VAR1 = [
          'a (x3)',
          'b',
          'c (x2)',
          'd',
          'c',
          'x'
        ];

12
задан blork 4 July 2011 в 11:33
поделиться