diff options
| author | Shawn <shawnw.mobile@gmail.com> | 2020-09-19 23:06:36 -0700 |
|---|---|---|
| committer | Shawn <shawnw.mobile@gmail.com> | 2020-09-19 23:07:25 -0700 |
| commit | c4069fb527bc449b4ad7d067170036bc444b2ee9 (patch) | |
| tree | e3d2a5ac162460a314b676e14edd755831c01235 | |
| parent | 15970b39e177415b2ead601c5491c89bf7ffcc77 (diff) | |
| download | perlweeklychallenge-club-c4069fb527bc449b4ad7d067170036bc444b2ee9.tar.gz perlweeklychallenge-club-c4069fb527bc449b4ad7d067170036bc444b2ee9.tar.bz2 perlweeklychallenge-club-c4069fb527bc449b4ad7d067170036bc444b2ee9.zip | |
Challenge 078,both parts in perl
| -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; |
