aboutsummaryrefslogtreecommitdiff
path: root/challenge-100
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-02-21 22:59:51 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-02-21 22:59:51 +0000
commit2d908134cd9dc2b6631492c8daefa505b84e625b (patch)
tree448ae197c2fb7fd5152da6b822d6fd8d749ef727 /challenge-100
parent337dc2e6a8fc36c41d7534b1936f88258bb36b61 (diff)
downloadperlweeklychallenge-club-2d908134cd9dc2b6631492c8daefa505b84e625b.tar.gz
perlweeklychallenge-club-2d908134cd9dc2b6631492c8daefa505b84e625b.tar.bz2
perlweeklychallenge-club-2d908134cd9dc2b6631492c8daefa505b84e625b.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-100')
-rw-r--r--challenge-100/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-100/laurent-rosenfeld/perl/ch-1.pl19
-rw-r--r--challenge-100/laurent-rosenfeld/perl/ch-2.pl36
-rw-r--r--challenge-100/laurent-rosenfeld/raku/ch-1.raku15
-rw-r--r--challenge-100/laurent-rosenfeld/raku/ch-2.raku26
5 files changed, 97 insertions, 0 deletions
diff --git a/challenge-100/laurent-rosenfeld/blog.txt b/challenge-100/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..4c7a329834
--- /dev/null
+++ b/challenge-100/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2021/02/perl-weekly-challenge-100-fun-time-and-triangle-sum.html
diff --git a/challenge-100/laurent-rosenfeld/perl/ch-1.pl b/challenge-100/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..79c2446dec
--- /dev/null
+++ b/challenge-100/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,19 @@
+use strict;
+use warnings;
+use feature "say";
+
+my $time = shift;
+if ($time =~ /([ap])m/) {
+ if ($1 eq 'a') {
+ $time =~ s/(\d\d:\d\d).*/$1/;
+ } else {
+ $time =~ /(\d\d):(\d\d.).*/;
+ my $hour = $1 + 12;
+ $time = "$hour:$2";
+ }
+} else {
+ $time =~ /^(\d\d):(\d\d)/;
+ my ($suffix, $hour) = $1 > 12 ? ('pm', $1 - 12) : ('am', $1);
+ $time = "$hour:$2 $suffix";
+}
+say $time;
diff --git a/challenge-100/laurent-rosenfeld/perl/ch-2.pl b/challenge-100/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..1b40faf41d
--- /dev/null
+++ b/challenge-100/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,36 @@
+use strict;
+use warnings;
+use feature "say";
+
+my $triangle = [ [1], [2,4], [6,4,9], [5,1,7,2] ];
+# $triangle = [ [1], [2,4], [6,30,9], [30,30,30,2] ];
+my $min_path = [ map { $_->[0] } @$triangle];
+my $min_path_val = sum($min_path);
+my $index = 0;
+find_min_path($triangle, [], $index);
+say "@$min_path";
+
+sub sum {
+ my $aref = shift;
+ my $sum = 0;
+ $sum += $_ for @$aref;
+ return $sum;
+}
+
+sub find_min_path {
+ my ($tri_ref, $path, $index) = @_;
+ my @triangle = @$tri_ref;
+ my @first_row = @{$triangle[0]};
+ my @new_triangle = @triangle[1 .. $#triangle];
+ my $new_path = [ @$path, $first_row[$index] ];
+ if (@new_triangle) {
+ find_min_path([@new_triangle], $new_path , $index);
+ find_min_path([@new_triangle], $new_path, $index + 1);
+ } else {
+ my $new_path_val = sum($new_path);
+ if ($new_path_val < $min_path_val) {
+ $min_path = $new_path;
+ $min_path_val = $new_path_val;
+ }
+ }
+}
diff --git a/challenge-100/laurent-rosenfeld/raku/ch-1.raku b/challenge-100/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..726bc5bfe0
--- /dev/null
+++ b/challenge-100/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,15 @@
+use v6;
+
+my $time = @*ARGS[0];
+if $time ~~ /(<[ap]>)m/ {
+ if $0 eq 'a' {
+ $time ~~ s/(\d\d':'\d\d).*/$0/;
+ } else {
+ $time ~~ s/(\d\d)':'(\d\d).*/{$0 + 12}:$1/;
+ }
+} else {
+ $time ~~ /^(\d\d)':'(\d\d)/;
+ my ($suffix, $hour) = $0 > 12 ?? ('pm', $0 - 12) !! ('am', $0);
+ $time = "$hour:$1 $suffix";
+}
+say $time;
diff --git a/challenge-100/laurent-rosenfeld/raku/ch-2.raku b/challenge-100/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..e9f0169a04
--- /dev/null
+++ b/challenge-100/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,26 @@
+use v6;
+
+my @triangle = (1), (2,4), (6,4,9), (5,1,7,2);
+my @min-path = map { $_[0] }, @triangle; # pick any path
+my $min-path-val = @min-path.sum;
+my $index = 0;
+traverse @triangle, (), $index;
+say @min-path;
+
+sub traverse (@triangle, @path, $index) {
+ my @first-line = @triangle[0];
+ my @new-triangle = @triangle[1 .. @triangle.end];
+ say "First-line: ", @first-line;
+ my @new-path = | (@path, @first-line[$index]);
+ say @new-path, " ", "\n";
+ if @new-triangle.elems > 0 {
+ traverse(@new-triangle, @new-path, $index);
+ traverse(@new-triangle, @new-path, $index + 1);
+ } else {
+ my $new-path-val = @new-path.sum;
+ if $new-path-val < $min-path-val {
+ @min-path = @new-path;
+ $min-path-val = $new-path-val
+ }
+ }
+}