diff options
| author | lancew <lw@judocoach.com> | 2020-08-22 15:13:35 +0100 |
|---|---|---|
| committer | lancew <lw@judocoach.com> | 2020-08-22 15:13:35 +0100 |
| commit | 5faf464232a61c231e06fbb066eff5efd23fce7e (patch) | |
| tree | aee8f7d4ac1fe1d5046c668eb28161b08c24b40b | |
| parent | f1edf6f0ae2c124e49db2d97cd9d7294cffab3a7 (diff) | |
| download | perlweeklychallenge-club-5faf464232a61c231e06fbb066eff5efd23fce7e.tar.gz perlweeklychallenge-club-5faf464232a61c231e06fbb066eff5efd23fce7e.tar.bz2 perlweeklychallenge-club-5faf464232a61c231e06fbb066eff5efd23fce7e.zip | |
Challange-074, Task 1
| -rw-r--r-- | challenge-074/lance-wicks/perl/ch-1.pl | 15 | ||||
| -rw-r--r-- | challenge-074/lance-wicks/perl/lib/Majority.pm | 27 | ||||
| -rw-r--r-- | challenge-074/lance-wicks/perl/t/Majority-basic.t | 22 |
3 files changed, 64 insertions, 0 deletions
diff --git a/challenge-074/lance-wicks/perl/ch-1.pl b/challenge-074/lance-wicks/perl/ch-1.pl new file mode 100644 index 0000000000..989912da5e --- /dev/null +++ b/challenge-074/lance-wicks/perl/ch-1.pl @@ -0,0 +1,15 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use lib './lib'; +use Majority; + +my @A = @ARGV; + +my $maj = Majority::element(@A); + +print $maj; + + diff --git a/challenge-074/lance-wicks/perl/lib/Majority.pm b/challenge-074/lance-wicks/perl/lib/Majority.pm new file mode 100644 index 0000000000..a2cca93bda --- /dev/null +++ b/challenge-074/lance-wicks/perl/lib/Majority.pm @@ -0,0 +1,27 @@ +package Majority; + +use strict; +use warnings; + +use List::MoreUtils 'frequency'; + +sub element { +# Majority element in the list is the one that appears more than floor(size_of_list/2). + my ( $self, @A ) = @_; + my $majority_element = -1; + + my $floor = @A / 2; + + my %frequencies = frequency @A; + + for my $element ( @A ) { + if ( $frequencies{$element} > $floor ) { + $majority_element = $element; + last; + } + } + + return $majority_element; +} + +1; diff --git a/challenge-074/lance-wicks/perl/t/Majority-basic.t b/challenge-074/lance-wicks/perl/t/Majority-basic.t new file mode 100644 index 0000000000..966ea37a7f --- /dev/null +++ b/challenge-074/lance-wicks/perl/t/Majority-basic.t @@ -0,0 +1,22 @@ +use Test2::V0 -target => 'Majority'; + +ok 1; +#Example 1 +#Input: @A = (1, 2, 2, 3, 2, 4, 2) +#Output: 2, as 2 appears 4 times in the list which is more than floor(7/2). +subtest 'Example 1' => sub { + my @A = ( 1, 2, 2, 3, 2, 4, 2 ); + is $CLASS->element(@A), 2; + +}; + +#Example 2 +#Input: @A = (1, 3, 1, 2, 4, 5) +#Output: -1 as none of the elements appears more than floor(6/2). +subtest 'Example 2' => sub { + my @A = ( 1, 3, 1, 2, 4, 5 ); + is $CLASS->element(@A), -1; + +}; + +done_testing; |
