diff options
| -rwxr-xr-x | challenge-078/shawn-wagner/perl/ch1.pl | 29 | ||||
| -rwxr-xr-x | challenge-078/shawn-wagner/perl/ch2.pl | 30 |
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; |
