aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-08-17 12:21:16 +0100
committerGitHub <noreply@github.com>2020-08-17 12:21:16 +0100
commite622495a3812e73f143a679df820df8484103f34 (patch)
tree37436be62f9795472ce971b41f1a6b6907f999df
parent0d0bd69b7022165761acd21986ab296a282e7283 (diff)
parentcd44f407cd0d1d9b875ff816b937187e9a7aa4bd (diff)
downloadperlweeklychallenge-club-e622495a3812e73f143a679df820df8484103f34.tar.gz
perlweeklychallenge-club-e622495a3812e73f143a679df820df8484103f34.tar.bz2
perlweeklychallenge-club-e622495a3812e73f143a679df820df8484103f34.zip
Merge pull request #2091 from JavierLuque/javier/solutions-74
Solutions to challenge 74
-rw-r--r--challenge-074/javier-luque/blog.txt1
-rw-r--r--challenge-074/javier-luque/perl/ch-1.pl21
-rw-r--r--challenge-074/javier-luque/perl/ch-2.pl48
-rw-r--r--challenge-074/javier-luque/raku/ch-1.p622
-rw-r--r--challenge-074/javier-luque/raku/ch-2.p648
5 files changed, 140 insertions, 0 deletions
diff --git a/challenge-074/javier-luque/blog.txt b/challenge-074/javier-luque/blog.txt
new file mode 100644
index 0000000000..f80d0a983b
--- /dev/null
+++ b/challenge-074/javier-luque/blog.txt
@@ -0,0 +1 @@
+https://perlchallenges.wordpress.com/2020/08/17/perl-weekly-challenge-074/
diff --git a/challenge-074/javier-luque/perl/ch-1.pl b/challenge-074/javier-luque/perl/ch-1.pl
new file mode 100644
index 0000000000..9e064f50a9
--- /dev/null
+++ b/challenge-074/javier-luque/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+# Test: ./ch-1.pl
+use Modern::Perl;
+use POSIX qw/ floor /;
+use Test::More;
+
+is majority_element(1, 2, 2, 3, 2, 4, 2), 2, '(1, 2, 2, 3, 2, 4, 2)';
+is majority_element(1, 3, 1, 2, 4, 5), -1, '(1, 3, 1, 2, 4, 5)';
+done_testing;
+
+sub majority_element {
+ my %counts;
+ map { $counts{$_}++ } @_;
+
+ # Majority element
+ my ($m) = sort { $counts{$b} <=> $counts{$a} }
+ keys %counts;
+
+ return ($counts{$m} > floor(scalar(@_)/2)) ?
+ $m : -1;
+}
diff --git a/challenge-074/javier-luque/perl/ch-2.pl b/challenge-074/javier-luque/perl/ch-2.pl
new file mode 100644
index 0000000000..2b8d68763b
--- /dev/null
+++ b/challenge-074/javier-luque/perl/ch-2.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+# Test: ./ch-2.pl
+use Modern::Perl;
+use Test::More;
+
+is fnr('ababc'), 'abb#c', 'ababc';
+is fnr('xyzzyx'), 'xyzyx#', 'xyzzyx';
+done_testing;
+
+sub fnr {
+ my @S = split('', shift);
+ my %counts;
+ my $output;
+
+ for (my $i = 0; $i < scalar(@S); $i++) {
+ my $c = $S[$i]; #character
+ my $fnr;
+
+ # If this is the first time the
+ # letter exists use it
+ $fnr = $c
+ if (not defined($counts{$c}));
+
+ # Increment counts
+ $counts{$c}++;
+
+ # Use the first non repeating
+ # if there is no duplicate
+ unless ($fnr) {
+ for (my $j = $i - 1; $j >= 0; $j--) {
+ my $c2 = $S[$j];
+ if ( defined($counts{$c2}) &&
+ $counts{$c2} == 1 ) {
+ $fnr = $c2;
+ last;
+ }
+ }
+ }
+
+ # If we didn't find a possible
+ # frn use a #
+ $fnr = '#' unless($fnr);
+
+ $output .= $fnr;
+ }
+
+ return $output
+}
diff --git a/challenge-074/javier-luque/raku/ch-1.p6 b/challenge-074/javier-luque/raku/ch-1.p6
new file mode 100644
index 0000000000..41ed69d741
--- /dev/null
+++ b/challenge-074/javier-luque/raku/ch-1.p6
@@ -0,0 +1,22 @@
+# Test: perl6 ch-1.p6
+use Test;
+
+sub MAIN() {
+ is majority_element((1, 2, 2, 3, 2, 4, 2)), 2, '(1, 2, 2, 3, 2, 4, 2)';
+ is majority_element((1, 3, 1, 2, 4, 5)), -1, '(1, 3, 1, 2, 4, 5)';
+ done-testing();
+}
+
+sub majority_element(@A) {
+ my %counts;
+ @A.map({ %counts{$_}++ });
+
+ # Majority element
+ my $m = %counts.keys
+ .sort({ %counts{$^b} <=> %counts{$^a} })
+ .first;
+
+
+ return (%counts{$m} > floor(@A.elems/2)) ??
+ $m !! -1;
+}
diff --git a/challenge-074/javier-luque/raku/ch-2.p6 b/challenge-074/javier-luque/raku/ch-2.p6
new file mode 100644
index 0000000000..befb597903
--- /dev/null
+++ b/challenge-074/javier-luque/raku/ch-2.p6
@@ -0,0 +1,48 @@
+# Test: perl6 ch-2.p6
+use Test;
+
+sub MAIN() {
+ is fnr('ababc'), 'abb#c', 'ababc';
+ is fnr('xyzzyx'), 'xyzyx#', 'xyzzyx';
+ done-testing();
+}
+
+sub fnr(Str $S) {
+ my @S = $S.comb;
+ my %counts;
+ my $output;
+
+ loop (my $i = 0; $i < @S.elems; $i++) {
+ my $c = @S[$i]; #character
+ my $fnr;
+
+ # If this is the first time the
+ # letter exists use it
+ $fnr = $c
+ if (not defined(%counts{$c}));
+
+ # Increment counts
+ %counts{$c}++;
+
+ # Use the first non repeating
+ # if there is no duplicate
+ unless ($fnr) {
+ loop (my $j = $i - 1; $j >= 0; $j--) {
+ my $c2 = @S[$j];
+ if ( defined(%counts{$c2}) &&
+ %counts{$c2} == 1 ) {
+ $fnr = $c2;
+ last;
+ }
+ }
+ }
+
+ # If we didn't find a possible
+ # frn use a #
+ $fnr = '#' unless ($fnr);
+
+ $output ~= $fnr;
+ }
+
+ return $output
+}