diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-12-18 07:49:50 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-18 07:49:50 +0000 |
| commit | 30650e954b59aed9882fa49834638ea94e434658 (patch) | |
| tree | 81f1e348a7a89eb41edf5b9944097f894c74fac2 | |
| parent | 354f57ebd708492f1c50b05c6df41b894b795492 (diff) | |
| parent | a7074839aee059ccd0f19cc09483a211c123aad0 (diff) | |
| download | perlweeklychallenge-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.pl | 27 | ||||
| -rw-r--r-- | challenge-194/adam-russell/perl/ch-2.pl | 51 |
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/); +} |
