UP / HOME

Challenge 078

Table of Contents

Task 1 - Leader Element

You are given an array @A containing distinct integers.

Write a script to find all leader elements in the array @A. Print (0) if none found.

  • An element is leader if it is greater than all the elements to its right side.

Perl

We take input from @ARGV, loop over it. And then we loop over the elements at right, goto next if $arg is less than $elm. This will push all the leader elements to @leader.

my @leader;
MAIN: while (my $arg = shift @ARGV) {
    foreach my $elm (@ARGV) {
        next MAIN if $arg < $elm;
    }
    push @leader, $arg;
}

Task 2 - Left Rotation

You are given array @A containing positive numbers and @B containing one or more indices from the array @A.

Write a script to left rotate @A so that the number at the first index of @B becomes the first element in the array. Similary, left rotate @A again so that the number at the second index of @B becomes the first element in the array.

Perl

Loop over @B & then rotate the elements. Same could've been done with Left Rotation, I find this easier to understand.

my @A = qw(10 20 30 40 50);
my @B = qw(3 4);

foreach (@B) {
    my @tmp = @A;
    foreach (1 ... scalar @tmp - $_) {
        unshift @tmp, pop @tmp;
    }
    print join(', ', @tmp), "\n";
}

Andinus / / Modified: 2022-10-04 Tue 21:34 Emacs 27.2 (Org mode 9.4.4)