aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-02-16 07:00:01 +0000
committerGitHub <noreply@github.com>2021-02-16 07:00:01 +0000
commit7fdf80eed0545f6b6df3c815d33d32b915026d59 (patch)
treeb99fe3c609703f3a7148afced3b6e56fb779d007
parent316a0b6696ceadba176047467d028f85024eb88d (diff)
parentd01fda7f4dbd80462485dc204b2865c9d0377079 (diff)
downloadperlweeklychallenge-club-7fdf80eed0545f6b6df3c815d33d32b915026d59.tar.gz
perlweeklychallenge-club-7fdf80eed0545f6b6df3c815d33d32b915026d59.tar.bz2
perlweeklychallenge-club-7fdf80eed0545f6b6df3c815d33d32b915026d59.zip
Merge pull request #3540 from gnustavo/100
Add Gustavo Chaves's solutions to challenge 100
-rwxr-xr-xchallenge-100/gustavo-chaves/perl/ch-1.pl44
-rwxr-xr-xchallenge-100/gustavo-chaves/perl/ch-2.pl41
2 files changed, 85 insertions, 0 deletions
diff --git a/challenge-100/gustavo-chaves/perl/ch-1.pl b/challenge-100/gustavo-chaves/perl/ch-1.pl
new file mode 100755
index 0000000000..0e9a618526
--- /dev/null
+++ b/challenge-100/gustavo-chaves/perl/ch-1.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+
+# https://perlweeklychallenge.org/blog/perl-weekly-challenge-100/
+# TASK #1 › Fun Time
+
+use 5.030;
+use warnings;
+
+my $input = shift;
+
+if ($input =~ /^(?<hour>\d{2}):(?<minute>\d{2})$/) {
+ if ($+{hour} eq '00') {
+ print '12';
+ } elsif ($+{hour} le '12') {
+ print $+{hour};
+ } else {
+ printf '%02d', $+{hour} - 12;
+ }
+ print ":$+{minute}";
+ if ($+{hour} lt '12') {
+ print 'am';
+ } else {
+ print 'pm';
+ }
+} elsif ($input =~ /^(?<hour>\d{2}):(?<minute>\d{2}) ?(?<period>am|pm)$/) {
+ if ($+{period} eq 'am') {
+ if ($+{hour} eq '12') {
+ print '00';
+ } else {
+ print $+{hour};
+ }
+ } else {
+ if ($+{hour} eq '12') {
+ print $+{hour};
+ } else {
+ printf '%02d', $+{hour} + 12;
+ }
+ }
+ print ":$+{minute}";
+} else {
+ die "Invalid time '$input'\n";
+}
+
+print "\n";
diff --git a/challenge-100/gustavo-chaves/perl/ch-2.pl b/challenge-100/gustavo-chaves/perl/ch-2.pl
new file mode 100755
index 0000000000..e3231e4f5b
--- /dev/null
+++ b/challenge-100/gustavo-chaves/perl/ch-2.pl
@@ -0,0 +1,41 @@
+#!/usr/bin/env perl
+
+# https://perlweeklychallenge.org/blog/perl-weekly-challenge-100/
+# TASK #2 › Triangle Sum
+
+use 5.030;
+use warnings;
+
+my @triangles = (
+ [ [1], [2,4], [6,4,9], [5,1,7,2] ],
+ [ [3], [3,1], [5,2,3], [4,3,1,3] ],
+);
+
+for my $i (0 .. $#triangles) {
+ say "$i: ", triangle_sum($triangles[$i]);
+}
+
+sub triangle_sum {
+ my ($triangle) = @_;
+
+ my $min = 2 ** 30;
+
+ my $find_minimum_sum = sub {
+ my ($row, $col, $acc) = @_;
+
+ $acc += $triangle->[$row][$col];
+
+ if ($row == $#$triangle) {
+ $min = $acc if $acc < $min;
+ } elsif ($min > $acc) {
+ __SUB__->($row+1, $col, $acc);
+ __SUB__->($row+1, $col+1, $acc);
+ }
+ return;
+ };
+
+ $find_minimum_sum->(0, 0, 0);
+
+ return $min;
+}
+