aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-03-08 19:33:06 +0000
committerGitHub <noreply@github.com>2023-03-08 19:33:06 +0000
commit25581bfdb9dc4955ee32b34de27fc0c2f486c9fa (patch)
tree5de55ce1bfce8960f31307873c9bcdd1269dea9d
parentd75c83429332efc88f29eee14f988b199f2fa10c (diff)
parentf817d0e37bc5dd80c7aabcca52f4c28d16316e66 (diff)
downloadperlweeklychallenge-club-25581bfdb9dc4955ee32b34de27fc0c2f486c9fa.tar.gz
perlweeklychallenge-club-25581bfdb9dc4955ee32b34de27fc0c2f486c9fa.tar.bz2
perlweeklychallenge-club-25581bfdb9dc4955ee32b34de27fc0c2f486c9fa.zip
Merge pull request #7676 from jaldhar/challenge-206
Challenge 206 by Jaldhar H. Vyas.
-rw-r--r--challenge-206/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-206/jaldhar-h-vyas/perl/ch-1.pl31
-rwxr-xr-xchallenge-206/jaldhar-h-vyas/perl/ch-2.pl81
-rwxr-xr-xchallenge-206/jaldhar-h-vyas/raku/ch-1.raku16
-rwxr-xr-xchallenge-206/jaldhar-h-vyas/raku/ch-2.raku18
5 files changed, 147 insertions, 0 deletions
diff --git a/challenge-206/jaldhar-h-vyas/blog.txt b/challenge-206/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..e032944f1c
--- /dev/null
+++ b/challenge-206/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2023/03/perl_weekly_challenge_week_206.html \ No newline at end of file
diff --git a/challenge-206/jaldhar-h-vyas/perl/ch-1.pl b/challenge-206/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..1cbf6a1ba4
--- /dev/null
+++ b/challenge-206/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+
+sub combinations {
+ my @list = @{$_[0]};
+ my $length = $_[1];
+
+ if ($length <= 1) {
+ return map [$_], @list;
+ }
+
+ my @combos;
+
+ for (my $i = 0; $i + $length <= scalar @list; $i++) {
+ my $val = $list[$i];
+ my @rest = @list[$i + 1 .. $#list];
+ for my $c (combinations(\@rest, $length - 1)) {
+ push @combos, [$val, @{$c}] ;
+ }
+ }
+
+ return @combos;
+}
+
+my @times = map {
+ my ($h, $m) = split /\:/, $_;
+ ($h == 0 && $m == 0 ? 1440 : $h * 60) + $m;
+ } @ARGV;
+
+say 0+(sort { $a <=> $b } map { abs (@$_[0] - @$_[1]) } combinations(\@times, 2))[0];
diff --git a/challenge-206/jaldhar-h-vyas/perl/ch-2.pl b/challenge-206/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..67045bbdf0
--- /dev/null
+++ b/challenge-206/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,81 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+
+sub batch {
+ my @range = @{$_[0]};
+ my $quantity = $_[1];
+
+ if ($quantity < 1 || $quantity > scalar @range) {
+ die "out of range\n";
+ }
+
+ my $length = scalar @range;
+ my $i = 0;
+ while ($i < $length) {
+ my @row;
+ for (1 .. $quantity) {
+ push @row, shift @range;
+ $i++;
+ if ($i == $length) {
+ last;
+ }
+ }
+ push @range, [@row];
+ }
+
+ return wantarray ? @range : $range[0];
+}
+
+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];
+ }
+}
+
+sub unique {
+ my %seen;
+ for my $elem (@_) {
+ $seen{$elem}++;
+ }
+ return keys %seen;
+}
+
+sub min {
+ return $_[0] < $_[1] ? $_[0] : $_[1];
+}
+
+sub sum {
+ my ($arr) = @_;
+ my $total = 0;
+
+ for my $elem (@{$arr}) {
+ $total += $elem;
+ }
+
+ return $total;
+}
+
+my @permutations;
+permute { push @permutations, \@_; } @ARGV;
+
+say [
+ sort { $b <=> $a }
+ map { sum([map { min(@{$_}) } @{$_}]) }
+ map { [batch($_, 2)] }
+ map { [ split // ] }
+ unique(
+ map { join q{}, @{$_} }
+ map { [map { sort { $a <=> $b } @{$_} } @{$_}] }
+ map { [batch($_, 2)] }
+ grep { $_->[0] == $ARGV[0] }
+ @permutations
+ )
+]->[0];
diff --git a/challenge-206/jaldhar-h-vyas/raku/ch-1.raku b/challenge-206/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..33f5495e26
--- /dev/null
+++ b/challenge-206/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ *@args
+) {
+ @args
+ .map({
+ my ($h, $m) = $_.split(/\:/);
+ ($h == 0 && $m == 0 ?? 1440 !! $h * 60) + $m;
+ })
+ .combinations(2)
+ .map({ (@$_[0] - @$_[1]).abs })
+ .sort({ $^a <=> $^b })
+ .first
+ .say;
+} \ No newline at end of file
diff --git a/challenge-206/jaldhar-h-vyas/raku/ch-2.raku b/challenge-206/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..89e96ada09
--- /dev/null
+++ b/challenge-206/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,18 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ *@args
+) {
+ @args
+ .permutations
+ .grep({ @$_[0] == @args[0]; })
+ .map({ $_.batch(2); })
+ .map({ $_.map({ $_.sort({ $^a <=> $^b }); }) })
+ .map({ join(q{}, | @$_); })
+ .unique
+ .map({ $_.comb; })
+ .map({ $_.batch(2); })
+ .map({ [+] $_.map({ $_.min; }) })
+ .max
+ .say;
+} \ No newline at end of file