diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-10-24 13:38:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-24 13:38:37 +0100 |
| commit | b5d5467c60d16ad8b52cf38abc3f707b4ff4f372 (patch) | |
| tree | bc8729ca5e48ab4f78718c72f44fd8e28bb4da1a | |
| parent | 7ad2bf155849f96a46039642ed5775aa031b15a7 (diff) | |
| parent | 33cbd580d565faabcf664a94e74ad48fc0168c4c (diff) | |
| download | perlweeklychallenge-club-b5d5467c60d16ad8b52cf38abc3f707b4ff4f372.tar.gz perlweeklychallenge-club-b5d5467c60d16ad8b52cf38abc3f707b4ff4f372.tar.bz2 perlweeklychallenge-club-b5d5467c60d16ad8b52cf38abc3f707b4ff4f372.zip | |
Merge pull request #6954 from jaldhar/challenge-187
Challenge 187 by Jaldhar H. Vyas.
| -rw-r--r-- | challenge-187/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-187/jaldhar-h-vyas/perl/ch-1.pl | 31 | ||||
| -rwxr-xr-x | challenge-187/jaldhar-h-vyas/perl/ch-2.pl | 45 | ||||
| -rwxr-xr-x | challenge-187/jaldhar-h-vyas/raku/ch-1.raku | 26 | ||||
| -rwxr-xr-x | challenge-187/jaldhar-h-vyas/raku/ch-2.raku | 30 |
5 files changed, 133 insertions, 0 deletions
diff --git a/challenge-187/jaldhar-h-vyas/blog.txt b/challenge-187/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..173316deb6 --- /dev/null +++ b/challenge-187/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2022/10/perl_weekly_challenge_week_187.html
\ No newline at end of file diff --git a/challenge-187/jaldhar-h-vyas/perl/ch-1.pl b/challenge-187/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..ccc1cfeb20 --- /dev/null +++ b/challenge-187/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,31 @@ +#!/usr/bin/perl +use 5.030; +use warnings; + +sub dateToDays { + my ($date) = @_; + my @monthFirst = (-1, 30, 58, 89, 120, 150, 181, 212, 242, 273, 303, 333); + my ($day, $month) = split '-', $date; + + return $monthFirst[$month - 1] + $day; +} + +if (scalar @ARGV != 4) { + die "Need 4 dates in the format DD-MM\n"; +} + +my ($fooStartDate, $fooEndDate, $barStartDate, $barEndDate) = @ARGV; + +my ($fooStartDay, $fooEndDay, $barStartDay, $barEndDay) = + map { dateToDays($_); } + ($fooStartDate, $fooEndDate, $barStartDate, $barEndDate); + +if ($fooEndDay < $barStartDay || $fooStartDay > $barEndDay) { + say "0 days"; +} else { + my $commonStart = $fooStartDay < $barStartDay ? $barStartDay : $fooStartDay; + my $commonEnd = $fooEndDay < $barEndDay ? $fooEndDay : $barEndDay; + my $common = $commonEnd - $commonStart + 1; + + say "$common day", ($common == 1 ? q{} : 's'); +}
\ No newline at end of file diff --git a/challenge-187/jaldhar-h-vyas/perl/ch-2.pl b/challenge-187/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..db5237c494 --- /dev/null +++ b/challenge-187/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl +use 5.030; +use warnings; + +sub permute (&@) { + my $code = shift; + my @idx = 0..$#_; + while ( $code->(@_[@idx]) ) { + my $p = $#idx; + --$p while $idx[$p-1] > $idx[$p]; + my $q = $p or return; + push @idx, reverse splice @idx, $p; + ++$q while $idx[$p-1] > $idx[$q]; + @idx[$p-1,$q]=@idx[$q,$p-1]; + } +} +my @n = @ARGV; + +my $maximum = -Inf; +my @maxima; +my @perms; + +permute { push @perms, \@_; } @n; + +for my $combo (map { [@$_[0..2] ]; } @perms) { + my ($a, $b, $c) = @{$combo}; + if (($a + $b > $c) && ($b + $c > $a) && ($a + $c > $b)) { + if (($a + $b + $c) > $maximum) { + @maxima = (); + } + if (($a + $b + $c) >= $maximum) { + $maximum = $a + $b + $c; + push @maxima, [$a, $b, $c]; + } + } +} + +if (scalar @maxima == 0) { + say '()'; +} else { + if (scalar @maxima > 1) { + @maxima = grep{ $_->[0] >= $_->[1] && $_->[1] >= $_->[2]; } @maxima; + } + say q{(}, (join q{, }, @{$maxima[0]}), q{)}; +} diff --git a/challenge-187/jaldhar-h-vyas/raku/ch-1.raku b/challenge-187/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..3953d55119 --- /dev/null +++ b/challenge-187/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,26 @@ +#!/usr/bin/raku +sub dateToDays($date) { + constant @monthFirst = (-1, 30, 58, 89, 120, 150, 181, 212, 242, 273, 303, 333); + my ($day, $month) = split '-', $date; + + return @monthFirst[$month - 1] + $day; +} + +sub MAIN( + $fooStartDate, $fooEndDate, $barStartDate, $barEndDate #= 4 dates in the format DD-MM +) { + my ($fooStartDay, $fooEndDay, $barStartDay, $barEndDay) = + map { dateToDays($_); }, + ($fooStartDate, $fooEndDate, $barStartDate, $barEndDate); + + if ($fooEndDay < $barStartDay || $fooStartDay > $barEndDay) { + say "0 days"; + } else { + my $commonStart = + $fooStartDay < $barStartDay ?? $barStartDay !! $fooStartDay; + my $commonEnd = $fooEndDay < $barEndDay ?? $fooEndDay !! $barEndDay; + my $common = $commonEnd - $commonStart + 1; + + say "$common day", ($common == 1 ?? q{} !! 's'); + } +}
\ No newline at end of file diff --git a/challenge-187/jaldhar-h-vyas/raku/ch-2.raku b/challenge-187/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..4887c4234b --- /dev/null +++ b/challenge-187/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,30 @@ +#!/usr/bin/raku + +sub MAIN( + *@n +) { + my $maximum = -Inf; + my @maxima; + + for @n.permutations.map({ @$_[0 .. 2]; }).unique -> $combo { + my ($a, $b, $c) = @$combo; + if ($a + $b > $c) && ($b + $c > $a) && ($a + $c > $b) { + if ($a + $b + $c) > $maximum { + @maxima = (); + } + if ($a + $b + $c) >= $maximum { + $maximum = $a + $b + $c; + @maxima.push(($a, $b, $c)); + } + } + } + + if @maxima.elems == 0 { + say '()'; + } else { + if @maxima.elems > 1 { + @maxima = @maxima.grep({ @$_[0] >= @$_[1] && @$_[1] >= @$_[2]; }); + } + say @maxima[0]; + } +}
\ No newline at end of file |
