aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn <shawnw.mobile@gmail.com>2020-09-19 23:06:36 -0700
committerShawn <shawnw.mobile@gmail.com>2020-09-19 23:07:25 -0700
commitc4069fb527bc449b4ad7d067170036bc444b2ee9 (patch)
treee3d2a5ac162460a314b676e14edd755831c01235
parent15970b39e177415b2ead601c5491c89bf7ffcc77 (diff)
downloadperlweeklychallenge-club-c4069fb527bc449b4ad7d067170036bc444b2ee9.tar.gz
perlweeklychallenge-club-c4069fb527bc449b4ad7d067170036bc444b2ee9.tar.bz2
perlweeklychallenge-club-c4069fb527bc449b4ad7d067170036bc444b2ee9.zip
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;