aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-10-24 13:38:37 +0100
committerGitHub <noreply@github.com>2022-10-24 13:38:37 +0100
commitb5d5467c60d16ad8b52cf38abc3f707b4ff4f372 (patch)
treebc8729ca5e48ab4f78718c72f44fd8e28bb4da1a
parent7ad2bf155849f96a46039642ed5775aa031b15a7 (diff)
parent33cbd580d565faabcf664a94e74ad48fc0168c4c (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-187/jaldhar-h-vyas/perl/ch-1.pl31
-rwxr-xr-xchallenge-187/jaldhar-h-vyas/perl/ch-2.pl45
-rwxr-xr-xchallenge-187/jaldhar-h-vyas/raku/ch-1.raku26
-rwxr-xr-xchallenge-187/jaldhar-h-vyas/raku/ch-2.raku30
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