diff options
| -rw-r--r-- | challenge-078/juliodcs/README | 1 | ||||
| -rw-r--r-- | challenge-078/juliodcs/perl/ch-1.pl | 24 | ||||
| -rw-r--r-- | challenge-078/juliodcs/perl/ch-2.pl | 16 | ||||
| -rw-r--r-- | challenge-078/juliodcs/raku/ch-1.raku | 14 | ||||
| -rw-r--r-- | challenge-078/juliodcs/raku/ch-2.raku | 9 |
5 files changed, 64 insertions, 0 deletions
diff --git a/challenge-078/juliodcs/README b/challenge-078/juliodcs/README new file mode 100644 index 0000000000..596a3da016 --- /dev/null +++ b/challenge-078/juliodcs/README @@ -0,0 +1 @@ +Solutions by Julio de Castro. diff --git a/challenge-078/juliodcs/perl/ch-1.pl b/challenge-078/juliodcs/perl/ch-1.pl new file mode 100644 index 0000000000..0d4c7e5caa --- /dev/null +++ b/challenge-078/juliodcs/perl/ch-1.pl @@ -0,0 +1,24 @@ +#!perl + +use strict; +use warnings; +use List::Util qw(reduce); +use experimental 'signatures'; + +sub get_leaders { + my @A = ( 9, 10, 7, 5, 6, 1 ); + my $a_indexes = sub { 0 .. @A - 1 }; + my $is_last = sub($i) { $i == @A - 1 }; + my $current = sub($i) { $A[$i] }; + my $following = sub($i) { $A[$i + 1] }; + my $is_leading = sub($i) { $current->($i) > $following->($i) }; + my $is_leader = sub($i) { $is_last->($i) || $is_leading->($i) }; + my $if_leader = sub($i) { $is_leader->($i) ? $current->($i) : () }; + my $push_leader = sub($lst, $i) { push @{$lst}, $if_leader->($i); $lst }; + + my $result = reduce { $push_leader->($a, $b) } [], $a_indexes->(); + + @A == 0 ? (0) : $result->@*; +} + +print join q(, ), get_leaders();
\ No newline at end of file diff --git a/challenge-078/juliodcs/perl/ch-2.pl b/challenge-078/juliodcs/perl/ch-2.pl new file mode 100644 index 0000000000..7dd29b2c82 --- /dev/null +++ b/challenge-078/juliodcs/perl/ch-2.pl @@ -0,0 +1,16 @@ +#!perl + +use strict; +use warnings; +use experimental 'signatures'; +use feature 'say'; + +sub rotate { + my @A = (7, 4, 2, 6, 3); + my @B = (1, 3, 4); + for my $rot (@B) { + say join q(, ), map { $A[($_ + $rot) % @A] } 0 .. @A - 1; + } +} + +rotate();
\ No newline at end of file diff --git a/challenge-078/juliodcs/raku/ch-1.raku b/challenge-078/juliodcs/raku/ch-1.raku new file mode 100644 index 0000000000..3687d224a0 --- /dev/null +++ b/challenge-078/juliodcs/raku/ch-1.raku @@ -0,0 +1,14 @@ +sub get-leaders {
+ my \A = ( 9, 10, 7, 5, 6, 1 );
+ sub is-last { $^i == A.elems - 1 }
+ sub current { A[$^i] }
+ sub following { A[$^i + 1] }
+ sub is-leading { current($^i) > following($^i) }
+ sub is-leader { is-last($^i) || is-leading($^i) }
+ sub if-leader { is-leader($^i) ?? current($^i) !! () }
+ sub add-leader { ($^list.flat, if-leader($^pos)).flat }
+
+ A.elems == 0 ?? (0) !! [[&add-leader]] ((), |^A)
+}
+
+say get-leaders;
diff --git a/challenge-078/juliodcs/raku/ch-2.raku b/challenge-078/juliodcs/raku/ch-2.raku new file mode 100644 index 0000000000..723246e305 --- /dev/null +++ b/challenge-078/juliodcs/raku/ch-2.raku @@ -0,0 +1,9 @@ +sub rotate {
+ my \A = (7, 4, 2, 6, 3);
+ my \B = (1, 3, 4);
+ for B -> \rotation {
+ say (|^A).map: { A[ ($^index + rotation) % A.elems ] }
+ }
+}
+
+rotate;
\ No newline at end of file |
