From 260377fcc49eb06a981c22ad668cb717ea73d768 Mon Sep 17 00:00:00 2001 From: Lubos Kolouch Date: Sat, 22 Aug 2020 13:17:23 +0200 Subject: Solutions 074 LK --- challenge-074/lubos-kolouch/perl/ch-1.pl | 39 ++++++++++++++++++++++ challenge-074/lubos-kolouch/perl/ch-2.pl | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 challenge-074/lubos-kolouch/perl/ch-1.pl create mode 100644 challenge-074/lubos-kolouch/perl/ch-2.pl diff --git a/challenge-074/lubos-kolouch/perl/ch-1.pl b/challenge-074/lubos-kolouch/perl/ch-1.pl new file mode 100644 index 0000000000..4afb351e40 --- /dev/null +++ b/challenge-074/lubos-kolouch/perl/ch-1.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl +#=============================================================================== +# +# FILE: ch-1.pl +# +# USAGE: ./ch-1.pl +# +# DESCRIPTION: https://perlweeklychallenge.org/blog/perl-weekly-challenge-074/ +# +# TASK #1 › Majority Element +# +# AUTHOR: Lubos Kolouch +# VERSION: 1.0 +# CREATED: 08/22/2020 12:40:09 PM +#=============================================================================== + +use strict; +use warnings; + +sub get_majority_element { + my $arr = shift; + + my %counts; + my $arr_size_half = scalar @$arr / 2; + + for (@$arr) { + $counts{$_}++; + return $_ if $counts{$_} > $arr_size_half; + } + + return -1; +} + +use Test::More; + +is( get_majority_element( [ 1, 2, 2, 3, 2, 4, 2 ] ), 2 ); +is( get_majority_element( [ 1, 3, 1, 2, 4, 5 ] ), -1 ); + +done_testing; diff --git a/challenge-074/lubos-kolouch/perl/ch-2.pl b/challenge-074/lubos-kolouch/perl/ch-2.pl new file mode 100644 index 0000000000..7962e80703 --- /dev/null +++ b/challenge-074/lubos-kolouch/perl/ch-2.pl @@ -0,0 +1,56 @@ +# +#!/usr/bin/perl +#=============================================================================== +# +#҄ FILE: ch-2.pl +# +# USAGE: ./ch-2.pl +# +# DESCRIPTION: https://perlweeklychallenge.org/blog/perl-weekly-challenge-074/ +# +# TASK #2 › FNR Character +# +# AUTHOR: Lubos Kolouch +# VERSION: 1.0 +# CREATED: 08/22/2020 12:40:09 PM +#=============================================================================== + +use strict; +use warnings; +use List::MoreUtils qw/firstidx/; +use feature qw/say/; +use Data::Dumper; + +sub get_fnr { + my $input = shift; + + my %fnr_count; + my @fnr_queue; + + my $result; + + for (split //, $input) { + my $char = $_; + + $fnr_count{$_}++; + + if ($fnr_count{$_} == 1) { + push @fnr_queue, $_; + } else { + my $pos = firstidx { $_ eq $char } @fnr_queue; + splice @fnr_queue, $pos, 1 if defined $pos; + } + + $result .= scalar @fnr_queue? $fnr_queue[-1] : '#'; + } + + return $result; + +} + +use Test::More; + +is(get_fnr('ababc'),'abb#c'); +is(get_fnr('xyzzyx'),'xyzyx#'); + +done_testing; -- cgit