diff options
| -rw-r--r-- | challenge-206/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-206/jaldhar-h-vyas/perl/ch-1.pl | 31 | ||||
| -rwxr-xr-x | challenge-206/jaldhar-h-vyas/perl/ch-2.pl | 81 | ||||
| -rwxr-xr-x | challenge-206/jaldhar-h-vyas/raku/ch-1.raku | 16 | ||||
| -rwxr-xr-x | challenge-206/jaldhar-h-vyas/raku/ch-2.raku | 18 |
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 |
