P12 - 解码游程编码列表。

作者:Philip Potter

规范

P12 (**) Decode a run-length encoded list.
    Given a run-length code list generated as specified in problem P11.
    Construct its uncompressed version.

我们使用以下结构

  • .map

通过依次将块应用于每个元素来创建修改后的序列。在块内,元素由 $_ 表示

  • 当 expr { block }

大致相当于:如果 $_ ~~ expr { block; next }

  • xx

列表重复运算符。 (<1 2> xx 3) 与 <1 2 1 2 1 2> 相同

  • .flat

展平序列。map 构建了一个 Parcels 序列

(('a','a','a','a'),'b',('c','c'))

此序列可以根据上下文以平面或分层方式呈现。我们使用 .flat 来强制使用扁平化上下文。

示例

> say prob12(([4,'a'],'b',[2,'c'],[2,'a'],'d',[4,'e']))
a a a a b c c a a d e e e e

源代码:P12-rhebus.pl

use v6;

sub prob12 (@a) {
    my $l = @a.map: {
        when Array { $_[1] xx $_[0] }
        $_
    }
    return $l.flat;
}

my @l = ([4,'a'],'b',[2,'c'],[2,'a'],'d',[4,'e']);

say ~@l;
prob12(@l).list.perl.say;