aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-09-20 09:56:47 +0100
committerGitHub <noreply@github.com>2020-09-20 09:56:47 +0100
commit27dfd8aca8b802b4de1ee0527ab35c60421541bf (patch)
treed670529a5c0ccfe7e9718d3c5117bb6bcf317f50
parent37f5748be40603e1988a53fac9d23c41205a9cc8 (diff)
parentc4069fb527bc449b4ad7d067170036bc444b2ee9 (diff)
downloadperlweeklychallenge-club-27dfd8aca8b802b4de1ee0527ab35c60421541bf.tar.gz
perlweeklychallenge-club-27dfd8aca8b802b4de1ee0527ab35c60421541bf.tar.bz2
perlweeklychallenge-club-27dfd8aca8b802b4de1ee0527ab35c60421541bf.zip
Merge pull request #2327 from shawnw/challenge-078-solution
Challenge 078, both parts in perl
-rwxr-xr-xchallenge-078/shawn-wagner/perl/ch1.pl29
-rwxr-xr-xchallenge-078/shawn-wagner/perl/ch2.pl30
2 files changed, 59 insertions, 0 deletions
diff --git a/challenge-078/shawn-wagner/perl/ch1.pl b/challenge-078/shawn-wagner/perl/ch1.pl
new file mode 100755
index 0000000000..9fda9a2515
--- /dev/null
+++ b/challenge-078/shawn-wagner/perl/ch1.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use feature qw/say/;
+use List::Util qw/max/;
+use POSIX qw/INT_MIN/;
+
+sub leaders {
+ my @A = @_;
+ my $rmax = INT_MIN;
+ my @maxes = ($rmax);
+ for my $i (reverse 0..$#A) {
+ $rmax = max $rmax, $A[$i];
+ unshift @maxes, $rmax;
+ }
+ my @leaders;
+ for my $i (0 .. $#A) {
+ push @leaders, $A[$i] if $A[$i] > $maxes[$i+1];
+ }
+ if (@leaders) {
+ local $, = ", ";
+ say "(@leaders)";
+ } else {
+ say "(0)";
+ }
+}
+
+leaders 9, 10, 7, 5, 6, 1;
+leaders 3, 4, 5;
diff --git a/challenge-078/shawn-wagner/perl/ch2.pl b/challenge-078/shawn-wagner/perl/ch2.pl
new file mode 100755
index 0000000000..af19c53165
--- /dev/null
+++ b/challenge-078/shawn-wagner/perl/ch2.pl
@@ -0,0 +1,30 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use feature qw/say/;
+
+sub rotate_left :prototype(\@$) {
+ my ($A, $idx) = @_;
+ my @A = @$A;
+ my @left = splice @A, 0, $idx;
+ push @A, @left;
+ return \@A;
+}
+
+sub rotate_left_multi :prototype(\@\@) {
+ my ($A, $B) = @_;
+ for my $idx (@$B) {
+ my $rotated = rotate_left @$A, $idx;
+ say "[@$rotated]";
+ }
+ say "---";
+}
+
+
+my @A = (10, 20, 30, 40, 50);
+my @B = (3, 4);
+rotate_left_multi @A, @B;
+
+@A = (7, 4, 2, 6, 3);
+@B = (1, 3, 4);
+rotate_left_multi @A, @B;