aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-12-18 07:49:50 +0000
committerGitHub <noreply@github.com>2022-12-18 07:49:50 +0000
commit30650e954b59aed9882fa49834638ea94e434658 (patch)
tree81f1e348a7a89eb41edf5b9944097f894c74fac2
parent354f57ebd708492f1c50b05c6df41b894b795492 (diff)
parenta7074839aee059ccd0f19cc09483a211c123aad0 (diff)
downloadperlweeklychallenge-club-30650e954b59aed9882fa49834638ea94e434658.tar.gz
perlweeklychallenge-club-30650e954b59aed9882fa49834638ea94e434658.tar.bz2
perlweeklychallenge-club-30650e954b59aed9882fa49834638ea94e434658.zip
Merge pull request #7263 from adamcrussell/challenge-194
initial commit
-rw-r--r--challenge-194/adam-russell/perl/ch-1.pl27
-rw-r--r--challenge-194/adam-russell/perl/ch-2.pl51
2 files changed, 78 insertions, 0 deletions
diff --git a/challenge-194/adam-russell/perl/ch-1.pl b/challenge-194/adam-russell/perl/ch-1.pl
new file mode 100644
index 0000000000..492c721c3f
--- /dev/null
+++ b/challenge-194/adam-russell/perl/ch-1.pl
@@ -0,0 +1,27 @@
+use v5.34;
+##
+# You are given a time in the format hh:mm with one missing digit.
+# Write a script to find the highest digit 0-9 that a valid time.
+##
+use Time::Piece;
+sub digital_clock{
+ my($s) = @_;
+ map{
+ my $d = $_;
+ my $t = $s;
+ $t =~ s/\?/$d/;
+ eval{
+ Time::Piece->strptime($t, q/%H:%M/);
+ };
+ return $d unless $@;
+ } 9, 8, 7, 6, 5, 4, 3, 2, 1, 0;
+}
+
+MAIN:{
+ say digital_clock(q/?5:00/);
+ say digital_clock(q/?3:00/);
+ say digital_clock(q/1?:00/);
+ say digital_clock(q/2?:00/);
+ say digital_clock(q/12:?5/);
+ say digital_clock(q/12:5?/);
+}
diff --git a/challenge-194/adam-russell/perl/ch-2.pl b/challenge-194/adam-russell/perl/ch-2.pl
new file mode 100644
index 0000000000..fcb064d2b3
--- /dev/null
+++ b/challenge-194/adam-russell/perl/ch-2.pl
@@ -0,0 +1,51 @@
+use v5.34;
+##
+# Given a string made of letters a-z write a script to determine
+# whether removing only one character can make the frequency of the
+# remaining characters the same.
+##
+use boolean;
+use Data::Dump q/pp/;
+sub frequency_equalizer{
+ my($s) = @_;
+ my %h;
+ my %frequency_start;
+ my %frequency_end;
+ my @letters = split(//, $s);
+ map {$h{$_} = undef} @letters;
+ my @unique_letters = sort keys %h;
+ {
+ my $c = pop @unique_letters;
+ my $count;
+ my @letters_one_removed = grep {$_ ne $c || $_ eq $c && $count++ >= 1} @letters;
+ map {$frequency_start{$_}++} @letters;
+ map {$frequency_end{$_}++} @letters_one_removed;
+ my @start;
+ my @end;
+ map { if(exists($frequency_start{$_})){
+ push @start, $frequency_start{$_};
+ }
+ else{
+ push @start, -1;
+ }
+ } sort keys %h;
+ map { if(exists($frequency_end{$_})){
+ push @end, $frequency_end{$_};
+ }
+ else{
+ push @end, -1;
+ }
+ } sort keys %h;
+ return true if 0 == grep {$end[$_] != $end[$_ + 1]} 0 .. @end - 2;
+ %frequency_start = ();
+ %frequency_end = ();
+ redo unless !@unique_letters;
+ }
+ return false;
+}
+
+MAIN:{
+ say frequency_equalizer(q/abbc/);
+ say frequency_equalizer(q/xyzyyxz/);
+ say frequency_equalizer(q/xzxz/);
+}