aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlancew <lw@judocoach.com>2020-08-22 15:13:35 +0100
committerlancew <lw@judocoach.com>2020-08-22 15:13:35 +0100
commit5faf464232a61c231e06fbb066eff5efd23fce7e (patch)
treeaee8f7d4ac1fe1d5046c668eb28161b08c24b40b
parentf1edf6f0ae2c124e49db2d97cd9d7294cffab3a7 (diff)
downloadperlweeklychallenge-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.pl15
-rw-r--r--challenge-074/lance-wicks/perl/lib/Majority.pm27
-rw-r--r--challenge-074/lance-wicks/perl/t/Majority-basic.t22
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;