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.