I’ve been doing the Perl Weekly
Challenges. The
latest
was about list manipulation.
To print entries in multiple lists in parallel:
my @a=(
    [qw(I L O V E Y O U)],
    [qw(2 4 0 3 2 0 1 9)],
    [qw(! ? £ $ % ^ & *)],
      );
my $ix=0;
my $r=1;
while ($r) {
  $r=0;
  my @out;
  foreach my $iy (0..$#a) {
This is pretty much the only clever bit; if a list entry is undefined,
substitute a space to keep the columns lined up, and if none of them
is defined then end the loop.
    if (defined $a[$iy][$ix]) {
      push @out,$a[$iy][$ix];
      $r=1;
    } else {
      push @out,' ';
    }
  }
  if ($r) {
    print join(' ',@out),"\n";
  }
  $ix++;
}
Perl6 is pretty similar except that you can use @a.end instead of $#a.
For part 2 the challenge is to extract elements of a list, sort them,
and return them to their places in the list.
my @list=(10, 4, 1, 8, 12, 3);
my @indices=(0,2,5);
my @s=sort {$a <=> $b} map {$list[$_]} @indices;
map {$list[$indices[$_]]=$s[$_]} (0..$#indices);
What can I say, I like map. Again, Perl6 has different syntax but
basically works the same way.
Comments on this post are now closed. If you have particular grounds for adding a late comment, comment on a more recent post quoting the URL of this one.