diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-02-21 22:59:51 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-02-21 22:59:51 +0000 |
| commit | 2d908134cd9dc2b6631492c8daefa505b84e625b (patch) | |
| tree | 448ae197c2fb7fd5152da6b822d6fd8d749ef727 /challenge-100 | |
| parent | 337dc2e6a8fc36c41d7534b1936f88258bb36b61 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-100/laurent-rosenfeld/perl/ch-1.pl | 19 | ||||
| -rw-r--r-- | challenge-100/laurent-rosenfeld/perl/ch-2.pl | 36 | ||||
| -rw-r--r-- | challenge-100/laurent-rosenfeld/raku/ch-1.raku | 15 | ||||
| -rw-r--r-- | challenge-100/laurent-rosenfeld/raku/ch-2.raku | 26 |
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 + } + } +} |
