blob: ae85560ed6b84799c85e02dc8858dd885d1fbfc8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#+SETUPFILE: ~/.emacs.d/org-templates/level-2.org
#+HTML_LINK_UP: ../index.html
#+OPTIONS: toc:2
#+EXPORT_FILE_NAME: index
#+TITLE: Challenge 078
* 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
- Program: [[file:perl/ch-1.pl]]
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=.
#+BEGIN_SRC perl
my @leader;
MAIN: while (my $arg = shift @ARGV) {
foreach my $elm (@ARGV) {
next MAIN if $arg < $elm;
}
push @leader, $arg;
}
#+END_SRC
* 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
- Program: [[file:perl/ch-2.pl]]
Loop over =@B= & then rotate the elements. Same could've been done with
Left Rotation, I find this easier to understand.
#+BEGIN_SRC perl
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";
}
#+END_SRC
|