From 5faf464232a61c231e06fbb066eff5efd23fce7e Mon Sep 17 00:00:00 2001 From: lancew Date: Sat, 22 Aug 2020 15:13:35 +0100 Subject: Challange-074, Task 1 --- challenge-074/lance-wicks/perl/ch-1.pl | 15 +++++++++++++ challenge-074/lance-wicks/perl/lib/Majority.pm | 27 +++++++++++++++++++++++ challenge-074/lance-wicks/perl/t/Majority-basic.t | 22 ++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 challenge-074/lance-wicks/perl/ch-1.pl create mode 100644 challenge-074/lance-wicks/perl/lib/Majority.pm create mode 100644 challenge-074/lance-wicks/perl/t/Majority-basic.t 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; -- cgit