aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels van Dijke <perlboy@cpan.org>2020-08-17 21:39:56 +0000
committerNiels van Dijke <perlboy@cpan.org>2020-08-17 21:39:56 +0000
commit8907192b48226d561d1b21aee60867c869e7358f (patch)
tree22e4808c0b0473664aa4a42270a7d0b7b411dd80
parentced4cd787c08a9b9ab4f2b02aed12b0b4f572b86 (diff)
downloadperlweeklychallenge-club-8907192b48226d561d1b21aee60867c869e7358f.tar.gz
perlweeklychallenge-club-8907192b48226d561d1b21aee60867c869e7358f.tar.bz2
perlweeklychallenge-club-8907192b48226d561d1b21aee60867c869e7358f.zip
Task 1 & 2
-rwxr-xr-xchallenge-074/perlboy1967/perl/ch-1.pl44
-rwxr-xr-xchallenge-074/perlboy1967/perl/ch-2.pl31
2 files changed, 75 insertions, 0 deletions
diff --git a/challenge-074/perlboy1967/perl/ch-1.pl b/challenge-074/perlboy1967/perl/ch-1.pl
new file mode 100755
index 0000000000..d6de26a7d7
--- /dev/null
+++ b/challenge-074/perlboy1967/perl/ch-1.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 074
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-074/
+#
+# Task 1 - Majority Element
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use strict;
+use warnings;
+
+use List::Util qw(max);
+use POSIX q(floor);
+
+my @A = @ARGV;
+
+# Create a list with some random numbers if none provided
+@A = map {int(rand(3))} (1 .. 3 + rand(5))
+ if (!scalar @A);
+
+my $N = scalar(@A);
+my %ME = ();
+my $reason;
+my $me;
+
+$ME{$_}++ foreach (@A);
+my $max = max(values %ME);
+my @max = grep { $_ if $ME{$_} == $max } keys %ME;
+
+if (scalar @max == 1 and
+ $max > floor($N/2)) {
+ ($me, $reason) = ($max[0],
+ sprintf('as %d appears %d times in list which is more than floor(%d/2).',
+ $max[0], $max, $N));
+} else {
+ ($me, $reason) = (-1,
+ sprintf('as none of the elements appears more than floor(%d/2).',
+ $N));
+}
+
+printf "Input: \@A = (%s)\n", join(', ', @A);
+printf "Output: %d %s\n", $me, $reason;
+
diff --git a/challenge-074/perlboy1967/perl/ch-2.pl b/challenge-074/perlboy1967/perl/ch-2.pl
new file mode 100755
index 0000000000..124fdaa412
--- /dev/null
+++ b/challenge-074/perlboy1967/perl/ch-2.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 074
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-074/
+#
+# Task 2 - FNR Character
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use strict;
+use warnings;
+
+use Data::Dumper;
+use Tie::IxHash;
+
+my @test = qw(ababc xyzzyx abcabdeabefaf);
+
+my ($S) = @ARGV;
+$S //= $test[rand(scalar @test)];
+
+my $O;
+tie my %cf, 'Tie::IxHash';
+
+foreach my $c (split(//, $S)) {
+ $cf{$c}++;
+ my @c = grep { $_ if $cf{$_} == 1 } keys %cf;
+ $O .= (scalar @c ? $c[-1] : '#');
+}
+
+printf "Input: \$S = '%s'\n", $S;
+printf "Output: '%s'\n", $O;