aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-078/dave-cross/perl/ch-1.pl20
-rw-r--r--challenge-078/dave-cross/perl/ch-2.pl20
2 files changed, 40 insertions, 0 deletions
diff --git a/challenge-078/dave-cross/perl/ch-1.pl b/challenge-078/dave-cross/perl/ch-1.pl
new file mode 100644
index 0000000000..c61d1b6455
--- /dev/null
+++ b/challenge-078/dave-cross/perl/ch-1.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+use List::Util 'all';
+
+my @leaders = map { $ARGV[$_] }
+ grep { is_leader($_, @ARGV) } 0 .. $#ARGV;
+
+say '(', join(', ', @leaders), ')';
+
+sub is_leader {
+ my ($needle, @haystack) = @_;
+
+ return 1 if $needle == $#haystack;
+
+ return all { $haystack[$needle] > $_ } @haystack[$needle + 1 .. $#haystack];
+}
diff --git a/challenge-078/dave-cross/perl/ch-2.pl b/challenge-078/dave-cross/perl/ch-2.pl
new file mode 100644
index 0000000000..601ddd9520
--- /dev/null
+++ b/challenge-078/dave-cross/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+my ($array, $idx) = @ARGV;
+my @array = split /,/, $array;
+my @idx = split /,/, $idx;
+
+for (@idx) {
+ my @rotated = rotate($_, @array);
+ say '[', join(', ', @rotated), ']';
+}
+
+sub rotate {
+ my ($idx, @array) = @_;
+
+ return @array[$idx .. $#array], @array[0 .. $idx - 1];
+}