P12 - Decode a run-length encoded list.

Author: 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.

We use the following constructs:

  • .map

creates a modified sequence by applying the block to each element in turn. Within the block the element is represented by $_

  • when expr { block }

roughly equivalent to: if $_ ~~ expr { block; next }

  • xx

list repetition operator. (<1 2> xx 3) is the same as <1 2 1 2 1 2>

  • .flat

flattens a sequence. The map has constructed a sequence of Parcels:


This sequence may be presented flat or hierarchical depending on context. We use .flat to force a flattened context.


> 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

Source code: 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;