From 98dabbb62913c2ffcc268e7d5fe91077a01b6fba Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 13:52:56 -0500 Subject: initial commit --- challenge-195/adam-russell/perl/ch-1.pl | 18 ++++++++++++++++++ challenge-195/adam-russell/perl/ch-2.pl | 28 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 challenge-195/adam-russell/perl/ch-1.pl create mode 100644 challenge-195/adam-russell/perl/ch-2.pl diff --git a/challenge-195/adam-russell/perl/ch-1.pl b/challenge-195/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..5f1502dbb0 --- /dev/null +++ b/challenge-195/adam-russell/perl/ch-1.pl @@ -0,0 +1,18 @@ +use v5.34; +## +# You are given a positive integer, $n > 0. +# Write a script to print the count of all special +# integers between 1 and $n. +## +use boolean; +sub is_special{ + my($x) = @_; + my %h; + my @digits = split(//, $x); + map{ $h{$_} = undef } @digits; + return keys %h == @digits; +} + +MAIN:{ + say q// . grep{ is_special($_) } 1 .. $ARGV[0]; +} diff --git a/challenge-195/adam-russell/perl/ch-2.pl b/challenge-195/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..15a47ab5a5 --- /dev/null +++ b/challenge-195/adam-russell/perl/ch-2.pl @@ -0,0 +1,28 @@ +use v5.34; +## +# You are given a list of numbers, @list. +# Write a script to find most frequent even +# numbers in the list. In case you get more +# than one even numbers then return the smallest even integer. +# For all other case, return -1. +## +sub frequency{ + my @list = @_; + @list = grep { $_ % 2 == 0 } @list; + return -1 if @list == 0; + my %frequencies; + map { $frequencies{$_}++ } @list; + my @sorted = sort { $frequencies{$b} <=> $frequencies{$a} } @list; + return $sorted[0] if $frequencies{$sorted[0]} != $frequencies{$sorted[1]}; + return (sort { $a <=> $b } @sorted)[0]; +} + +MAIN:{ + my @list; + @list = (1, 1, 2, 6, 2); + say frequency(@list); + @list = (1, 3, 5, 7); + say frequency(@list); + @list = (6, 4, 4, 6, 1); + say frequency(@list); +} -- cgit