diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-02-21 21:46:45 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-21 21:46:45 +0000 |
| commit | 56dbad75bc66bb4adbd24f2b3c7bd141fffed25a (patch) | |
| tree | e53a8c077a337264f41003b9559c9de8274a6864 | |
| parent | 6fad749d5248417b46bdf5b05124855893a1d246 (diff) | |
| parent | 909a2be53b8c0d138795655b9d28ce38d0b5aa8b (diff) | |
| download | perlweeklychallenge-club-56dbad75bc66bb4adbd24f2b3c7bd141fffed25a.tar.gz perlweeklychallenge-club-56dbad75bc66bb4adbd24f2b3c7bd141fffed25a.tar.bz2 perlweeklychallenge-club-56dbad75bc66bb4adbd24f2b3c7bd141fffed25a.zip | |
Merge pull request #3596 from PerlBoy1967/branch-for-challenge-100
Task 1 & 2
| -rwxr-xr-x | challenge-100/perlboy1967/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-100/perlboy1967/perl/ch-2.pl | 92 |
2 files changed, 116 insertions, 0 deletions
diff --git a/challenge-100/perlboy1967/perl/ch-1.pl b/challenge-100/perlboy1967/perl/ch-1.pl new file mode 100755 index 0000000000..7b9b85611f --- /dev/null +++ b/challenge-100/perlboy1967/perl/ch-1.pl @@ -0,0 +1,24 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 100 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-100/ +# +# Task 1 - Fun Time +# +# Author: Niels 'PerlBoy' van Dijke + +use v5.16; +use strict; +use warnings; + +@ARGV = ('05:15 pm', '19:15', '12:01', '0:05', '2:03AM') + unless scalar(@ARGV); + +foreach my $time (@ARGV) { + printf "Input: '%s'\n", $time; + + # 'One liner' ;-) + $time =~ s#\A(\d+)(:\d+)\s*(AM|PM)?\Z#sprintf('%02d%s%s',$1%12+(!$3?($1%12?0:12):uc($3)eq'PM'?12:0),$2,$3?'':$1<12?' AM':' PM')#ie; + + printf "Output: '%s'\n\n", $time; +} diff --git a/challenge-100/perlboy1967/perl/ch-2.pl b/challenge-100/perlboy1967/perl/ch-2.pl new file mode 100755 index 0000000000..a747a58bb0 --- /dev/null +++ b/challenge-100/perlboy1967/perl/ch-2.pl @@ -0,0 +1,92 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 100 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-100/ +# +# Task 1 - Triangle Sum +# +# Author: Niels 'PerlBoy' van Dijke + +use v5.16; +use strict; +use warnings; + +use List::Util qw(sum min); + +# Prototypes +sub getTriangleSumPaths(\@$$\@\%); +sub printTriangleFlat(\@); +sub printTriangle2D(\@;\@); +sub printTrianglePath(\@\@); + + +my @T = ([1], [4,2], [2,4,9], [5,5,7,5], [9,2,2,4,8]); +my @P; +my %PP; + +getTriangleSumPaths(@T, 0, 0, @P, %PP); +my $min = min(keys %PP); +my @solutions = @{$PP{$min}}; + +printf "Input: Triangle = \n"; +printf "\n"; +printf "%s\n", printTriangle2D(@T); +printf "\n"; +printf "Output: %d\n", $min; +printf "\n"; +printf "Number of solutions: %d\n", scalar(@solutions); +printf "\n"; + +my $nSol = 1; +foreach my $arP (@solutions) { + printf "Solution %d:\n", $nSol++; + printf "================\n"; + printf "The minimum path sum from top to bottom: %s = %d\n", printTrianglePath(@T,@$arP), $min; + printf "\n"; + printf "Explanation:\n"; + printf "\n"; + printf "%s\n", printTriangle2D(@T,@$arP); + printf "\n"; +} + + +sub getTriangleSumPaths(\@$$\@\%) { + my ($arT, $l, $i, $arP, $hrSP) = @_; + + push(@$arP, $i); + foreach my $arL ($arT->[$l]) { + if (defined $arT->[$l+1]) { + getTriangleSumPaths(@$arT, $l + 1, $i, @$arP, %$hrSP); + getTriangleSumPaths(@$arT, $l + 1, $i + 1, @$arP, %$hrSP); + } else { + my @i = (0 .. scalar(@$arP) - 1); + my $sum = sum(map { $arT->[$_][$arP->[$_]] } @i); + push(@{$hrSP->{$sum}}, [@$arP]); + } + } + pop(@$arP); +} + +sub printTriangle2D(\@;\@) { + my ($arT, $arI) = @_; + + my @out; + my $maxLen = 0; + for (my $l = 0; $l < scalar(@$arT); $l++) { + my $i = 0; + + push(@out, join(' ', + map { (defined $arI and $arI->[$l] == $i++) ? "[$_]" : $_ + } @{$arT->[$l]})); + $maxLen = length($out[-1]) + if (length($out[-1]) > $maxLen); + } + + return join("\n", map { "\t" . ' ' x (($maxLen - length($_))/2) . $_} @out); +} + + +sub printTrianglePath(\@\@) { + my $lIdx = 0; + join(' + ', map { $_->[$_[1]->[$lIdx++]] } @{$_[0]}); +} |
