From 6fabd7602c1a36a5d7bc5808e9a230741a9b7f21 Mon Sep 17 00:00:00 2001 From: Julio Date: Sun, 20 Sep 2020 22:31:23 +0200 Subject: Solution to week 78 by juliodcs --- challenge-078/juliodcs/README | 1 + challenge-078/juliodcs/perl/ch-1.pl | 24 ++++++++++++++++++++++++ challenge-078/juliodcs/perl/ch-2.pl | 16 ++++++++++++++++ challenge-078/juliodcs/raku/ch-1.raku | 14 ++++++++++++++ challenge-078/juliodcs/raku/ch-2.raku | 9 +++++++++ 5 files changed, 64 insertions(+) create mode 100644 challenge-078/juliodcs/README create mode 100644 challenge-078/juliodcs/perl/ch-1.pl create mode 100644 challenge-078/juliodcs/perl/ch-2.pl create mode 100644 challenge-078/juliodcs/raku/ch-1.raku create mode 100644 challenge-078/juliodcs/raku/ch-2.raku 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 -- cgit