From 5c70a9c510b543b6d65e14df896a0d5487c708bf Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Mon, 14 Sep 2020 08:53:51 +0200 Subject: add solution for leader element task from c-078 --- challenge-078/alexander-pankoff/perl/ch-1.pl | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 challenge-078/alexander-pankoff/perl/ch-1.pl diff --git a/challenge-078/alexander-pankoff/perl/ch-1.pl b/challenge-078/alexander-pankoff/perl/ch-1.pl new file mode 100644 index 0000000000..9f4a8f1b5c --- /dev/null +++ b/challenge-078/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,39 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use autodie; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use List::Util qw(all reduce); + +# You are given an array @A containing distinct integers. +# +# Write a script to find all leader elements in the array @A. Print (0) if none +# found. +# +# >> An element is leader if it is greater than all the elements to its right +# >> side. + +my @A = @ARGV; + +my @leaders = find_leader_elements(@A); +@leaders = (0) unless @leaders; + +say '(' . join( ', ', @leaders ) . ')'; + +exit; + +sub find_leader_elements(@list) { + my $leaders = reduce { + my @leaders = @$a; + my $current = $b; + + ( all { $current > $_ } @leaders ) ? [ $current, @leaders ] : $a + } + [], reverse @list; + + return @{$leaders}; +} -- cgit From 6a6abb02362fcfbf45a834b59cf26369d77be6c8 Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Mon, 14 Sep 2020 09:07:57 +0200 Subject: add solution for left rotation task from c-078 --- challenge-078/alexander-pankoff/perl/ch-2.pl | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 challenge-078/alexander-pankoff/perl/ch-2.pl diff --git a/challenge-078/alexander-pankoff/perl/ch-2.pl b/challenge-078/alexander-pankoff/perl/ch-2.pl new file mode 100644 index 0000000000..f4dd950b48 --- /dev/null +++ b/challenge-078/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,32 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use autodie; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +# You are given array @A containing positive numbers and @B containing one or +# more indices from the array @A. +# +# Write a script to left rotate @A so that the number at the first index of @B +# becomes the first element in the array. Similary, left rotate @A again so +# that the number at the second index of @B becomes the first element in the +# array. + +my @A = ( 10, 20, 30, 40, 50 ); +my @B = ( 3, 4 ); + +for my $index (@B) { + say '[' . join( ', ', left_rotate( $index, @A ) ) . ']'; +} + +sub left_rotate ( $index, @array ) { + while ( $index-- ) { + my $top = shift @array; + push @array, $top; + } + + return @array; +} -- cgit