P13 - 列表的行程长度编码(直接解法)。
作者:Johan Viklund
规范
P13 (**) Run-length encoding of a list (direct solution). Implement the so-called run-length encoding data compression method directly. I.e. don't explicitly create the sublists containing the duplicates, as in problem P09, but only count them. As in problem P11, simplify the result list by replacing the singletons [1,X] by X.
示例
> encode_direct(<a a a a b c c a a d e e e e>).perl.say ([4, "a"], "b", [2, "c"], [2, "a"], "d", [4, "e"])
源代码: P13-viklund.pl
use v6; multi infix:<compress> ( $a, $b ) { $a ~~ $b ?? [$[2, $a]] !! [ $[1, $a], $[1, $b] ] } multi infix:<compress> ( @a, $b ) { if @a[*-1][1] ~~ $b { @a[*-1][0]++; return @a; } else { return [ |@a, [1, $b] ]; } } say ([compress] <a a a a b c c a a d e e e e>).perl;