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;