From 7ce0131a118cb78636f283993b28214728eab9dc Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 07:46:56 +0000 Subject: w194 - Task 1 & 2 --- challenge-194/perlboy1967/perl/ch-1.pl | 38 +++++++++++++++++++++++++++++++ challenge-194/perlboy1967/perl/ch-2.pl | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100755 challenge-194/perlboy1967/perl/ch-1.pl create mode 100755 challenge-194/perlboy1967/perl/ch-2.pl diff --git a/challenge-194/perlboy1967/perl/ch-1.pl b/challenge-194/perlboy1967/perl/ch-1.pl new file mode 100755 index 0000000000..4b4638403d --- /dev/null +++ b/challenge-194/perlboy1967/perl/ch-1.pl @@ -0,0 +1,38 @@ +#!/bin/perl + +=pod + +The Weekly Challenge - 194 + - https://theweeklychallenge.org/blog/perl-weekly-challenge-194/#TASK1 + +Author: Niels 'PerlBoy' van Dijke + +Task 1: Digital Clock +Submitted by: Mohammad S Anwar + +You are given time in the format hh:mm with one missing digit. + +Write a script to find the highest digit between 0-9 that makes it valid time. + +=cut + +use v5.16; +use warnings; + +use Test::More; + + +sub highestDigit ($) { + state $c = { -1=>-1, 0=>2, 1=>9, 2=>-1, 3=>5, 4=>9 }; + + $c->{index($_[0],'?')} +} + + +my %t = qw(?0:00 2 1?:00 9 10:?2 5 12:1? 9); + +for (sort keys %t) { + is(highestDigit($_),$t{$_},"highestDigit('$_')"); +} + +done_testing; diff --git a/challenge-194/perlboy1967/perl/ch-2.pl b/challenge-194/perlboy1967/perl/ch-2.pl new file mode 100755 index 0000000000..41ae391e34 --- /dev/null +++ b/challenge-194/perlboy1967/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/bin/perl + +=pod + +The Weekly Challenge - 194 + - https://theweeklychallenge.org/blog/perl-weekly-challenge-194/#TASK2 + +Author: Niels 'PerlBoy' van Dijke + +Task 2: Frequency Equalizer +Submitted by: Mohammad S Anwar + +You are given a string made of alphabetic characters only, a-z. + +Write a script to determine whether removing only one character can make +the frequency of the remaining characters the same. + +=cut + +use v5.16; +use warnings; + +use List::MoreUtils qw(frequency minmax); + +use Test::More; + + +sub freqEqual ($) { + my %f = frequency(split//,$_[0]); + my ($min,$max) = minmax(keys {reverse %f}); + return $min == $max-1 ? 1 : 0; +} + + +my %t = qw(abbc 1 xyzyyxz 1 xzxz 0); + +for (sort keys %t) { + is(freqEqual($_),$t{$_},"freqEqual('$_')"); +} + +done_testing; -- cgit From e322903f5ac8dd899a5b157369ed79ff970e6784 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 09:12:03 +0000 Subject: Task 2 - drop the intermediate hash --- challenge-194/perlboy1967/perl/ch-2.pl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/challenge-194/perlboy1967/perl/ch-2.pl b/challenge-194/perlboy1967/perl/ch-2.pl index 41ae391e34..d15d3ceaf1 100755 --- a/challenge-194/perlboy1967/perl/ch-2.pl +++ b/challenge-194/perlboy1967/perl/ch-2.pl @@ -26,8 +26,7 @@ use Test::More; sub freqEqual ($) { - my %f = frequency(split//,$_[0]); - my ($min,$max) = minmax(keys {reverse %f}); + my ($min,$max) = minmax(keys{reverse frequency(split//,$_[0])}); return $min == $max-1 ? 1 : 0; } -- cgit From 4824fac55259f93f017fbe28fced25070cf8c71b Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 14:49:55 +0000 Subject: Task 1 - Trap invalid format --- challenge-194/perlboy1967/perl/ch-1.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/challenge-194/perlboy1967/perl/ch-1.pl b/challenge-194/perlboy1967/perl/ch-1.pl index 4b4638403d..8826c9ba6b 100755 --- a/challenge-194/perlboy1967/perl/ch-1.pl +++ b/challenge-194/perlboy1967/perl/ch-1.pl @@ -25,11 +25,11 @@ use Test::More; sub highestDigit ($) { state $c = { -1=>-1, 0=>2, 1=>9, 2=>-1, 3=>5, 4=>9 }; - $c->{index($_[0],'?')} + ($_[0] =~ y/?/?/) != 1 ? -1 : $c->{index($_[0],'?')} } -my %t = qw(?0:00 2 1?:00 9 10:?2 5 12:1? 9); +my %t = qw(?0:00 2 1?:00 9 10:?2 5 12:1? 9 ??:00 -1 00?00 -1); for (sort keys %t) { is(highestDigit($_),$t{$_},"highestDigit('$_')"); -- cgit From 6e5d2292148456a658b5c543f684bd2f97d69778 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 16:00:58 +0000 Subject: Task 1 - More robust, add length check --- challenge-194/perlboy1967/perl/ch-1.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/challenge-194/perlboy1967/perl/ch-1.pl b/challenge-194/perlboy1967/perl/ch-1.pl index 8826c9ba6b..3e36138700 100755 --- a/challenge-194/perlboy1967/perl/ch-1.pl +++ b/challenge-194/perlboy1967/perl/ch-1.pl @@ -23,13 +23,13 @@ use Test::More; sub highestDigit ($) { - state $c = { -1=>-1, 0=>2, 1=>9, 2=>-1, 3=>5, 4=>9 }; + state $c = { 0=>2, 1=>9, 2=>-1, 3=>5, 4=>9 }; - ($_[0] =~ y/?/?/) != 1 ? -1 : $c->{index($_[0],'?')} + (length($_[0]) == 5 && $_[0] =~ y/?/?/) == 1 ? $c->{index($_[0],'?')} // -1 : -1; } -my %t = qw(?0:00 2 1?:00 9 10:?2 5 12:1? 9 ??:00 -1 00?00 -1); +my %t = qw(?0:00 2 1?:00 9 10:?2 5 12:1? 9 ??:00 -1 00?00 -1 00:00? -1 ?00:00 -1); for (sort keys %t) { is(highestDigit($_),$t{$_},"highestDigit('$_')"); -- cgit From 2d7cc7e438cc1c178a2e79a7889180ce1956f5a2 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 16:03:28 +0000 Subject: Misplaced '(' --- challenge-194/perlboy1967/perl/ch-1.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-194/perlboy1967/perl/ch-1.pl b/challenge-194/perlboy1967/perl/ch-1.pl index 3e36138700..f39fc1a5c3 100755 --- a/challenge-194/perlboy1967/perl/ch-1.pl +++ b/challenge-194/perlboy1967/perl/ch-1.pl @@ -25,7 +25,7 @@ use Test::More; sub highestDigit ($) { state $c = { 0=>2, 1=>9, 2=>-1, 3=>5, 4=>9 }; - (length($_[0]) == 5 && $_[0] =~ y/?/?/) == 1 ? $c->{index($_[0],'?')} // -1 : -1; + length($_[0]) == 5 && ($_[0] =~ y/?/?/) == 1 ? $c->{index($_[0],'?')} // -1 : -1; } -- cgit From 66d548c7912ecd773dd410f710c04e0e66512648 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 20:31:02 +0000 Subject: Task 1 - Better read the challenge and use the examples given... --- challenge-194/perlboy1967/perl/ch-1.pl | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/challenge-194/perlboy1967/perl/ch-1.pl b/challenge-194/perlboy1967/perl/ch-1.pl index f39fc1a5c3..ba79036fb6 100755 --- a/challenge-194/perlboy1967/perl/ch-1.pl +++ b/challenge-194/perlboy1967/perl/ch-1.pl @@ -23,13 +23,25 @@ use Test::More; sub highestDigit ($) { - state $c = { 0=>2, 1=>9, 2=>-1, 3=>5, 4=>9 }; - - length($_[0]) == 5 && ($_[0] =~ y/?/?/) == 1 ? $c->{index($_[0],'?')} // -1 : -1; + if ($_[0] !~ m#^[\d\?][\d\?]:[\d\?][\d\?]$# or + ($_[0] =~ y/?/?/) != 1) { + return -1; + } else { + my $i = index($_[0],'?'); + if (0) { } # Do nothing, just look pretty in code + elsif ($i == 0) { return substr($_[0],1,1) < 4 ? 2 : 1 } + elsif ($i == 1) { return substr($_[0],0,1) == 2 ? 3 : 9 } + elsif ($i == 2) { return -1 } + elsif ($i == 3) { return 5 } + elsif ($i == 4) { return 9 } + } } - -my %t = qw(?0:00 2 1?:00 9 10:?2 5 12:1? 9 ??:00 -1 00?00 -1 00:00? -1 ?00:00 -1); +my %t = qw( + ?5:00 1 ?3:00 2 1?:00 9 2?:00 3 12:?5 5 12:5? 9 + 00?00 -1 ??:00 -1 00:?? -1 0?:?0 -1 ?0:0? -1 ????? -1 + ?00:00 -1 ???:00 -1 00??00 -1 00??00 -1 00:??0 -1 0?:00? -1 +); for (sort keys %t) { is(highestDigit($_),$t{$_},"highestDigit('$_')"); -- cgit From 904208035eb439c36ce091468fba932a934334f5 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 5 Dec 2022 20:35:16 +0000 Subject: Small cosmetic change --- challenge-194/perlboy1967/perl/ch-1.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/challenge-194/perlboy1967/perl/ch-1.pl b/challenge-194/perlboy1967/perl/ch-1.pl index ba79036fb6..14813849a8 100755 --- a/challenge-194/perlboy1967/perl/ch-1.pl +++ b/challenge-194/perlboy1967/perl/ch-1.pl @@ -29,8 +29,8 @@ sub highestDigit ($) { } else { my $i = index($_[0],'?'); if (0) { } # Do nothing, just look pretty in code - elsif ($i == 0) { return substr($_[0],1,1) < 4 ? 2 : 1 } - elsif ($i == 1) { return substr($_[0],0,1) == 2 ? 3 : 9 } + elsif ($i == 0) { return substr($_[0],1,1) < 4 ? 2 : 1 } + elsif ($i == 1) { return substr($_[0],0,1) < 2 ? 9 : 3 } elsif ($i == 2) { return -1 } elsif ($i == 3) { return 5 } elsif ($i == 4) { return 9 } -- cgit