diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-04-10 01:00:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-10 01:00:43 +0100 |
| commit | 6f72b6a74cff52c8cca4543e76c3fb3b34d25cd2 (patch) | |
| tree | 910952dfc2a4f308f6c4c83b4ac173807ba13b27 | |
| parent | 5100bdd8254a088ee3e28ced4bbe388be4abea2a (diff) | |
| parent | 9f0321dab2d822022fd65a8e71c186ff3c00eefc (diff) | |
| download | perlweeklychallenge-club-6f72b6a74cff52c8cca4543e76c3fb3b34d25cd2.tar.gz perlweeklychallenge-club-6f72b6a74cff52c8cca4543e76c3fb3b34d25cd2.tar.bz2 perlweeklychallenge-club-6f72b6a74cff52c8cca4543e76c3fb3b34d25cd2.zip | |
Merge pull request #7880 from jaldhar/challenge-211
Challenge 211 by Jaldhar H. Vyas.
| -rw-r--r-- | challenge-211/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-211/jaldhar-h-vyas/perl/ch-1.pl | 64 | ||||
| -rwxr-xr-x | challenge-211/jaldhar-h-vyas/perl/ch-2.pl | 52 | ||||
| -rwxr-xr-x | challenge-211/jaldhar-h-vyas/raku/ch-1.raku | 42 | ||||
| -rwxr-xr-x | challenge-211/jaldhar-h-vyas/raku/ch-2.raku | 23 |
5 files changed, 182 insertions, 0 deletions
diff --git a/challenge-211/jaldhar-h-vyas/blog.txt b/challenge-211/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..34b7a6cc0a --- /dev/null +++ b/challenge-211/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2023/04/perl_weekly_challenge_week_211.html
\ No newline at end of file diff --git a/challenge-211/jaldhar-h-vyas/perl/ch-1.pl b/challenge-211/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..336bcb5b6c --- /dev/null +++ b/challenge-211/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,64 @@ +#!/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 diagonal { + my ($matrix, $r, $c, $row, $col) = @_; + my $i = $row; + my $j = $col; + my $same = $matrix->[$i]->[$j]; + + while ($i < $r && $j < $c) { + if ($matrix->[$i]->[$j] != $same) { + return undef; + } + $i++; + $j++; + } + return 1; +} + +my $r = shift; +my $c = shift; +my @matrix = batch(\@ARGV, $c); + +for my $col (0 .. $c - 1) { + unless (diagonal(\@matrix, $r, $c, 0, $col)) { + say 'false'; + exit; + } +} + +for my $row (1 .. $r - 1) { + unless (diagonal(\@matrix, $r, $c, $row, 0)) { + say 'false'; + exit; + } +} + +say "true";
\ No newline at end of file diff --git a/challenge-211/jaldhar-h-vyas/perl/ch-2.pl b/challenge-211/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..d19afcf080 --- /dev/null +++ b/challenge-211/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,52 @@ +#!/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]; + } +} + +sub sum { + my ($arr) = @_; + my $total = 0; + + for my $elem (@{$arr}) { + $total += $elem; + } + + return $total; +} + +sub average { + my ($nums) = @_; + + return sum($nums) / scalar @{$nums}; +} + +my @permutations; +permute { push @permutations, \@_; } @ARGV; + +my @nums; +for my $i (@permutations) { + + for my $j (1 .. scalar @{$i} - 1) { + my @array = @{$i}; + my @part1 = splice(@array, 0, $j); + my @part2 = @array; + + if (average([@part1]) == average([@part2])) { + say "true"; + exit; + } + } +} +say 'false'; diff --git a/challenge-211/jaldhar-h-vyas/raku/ch-1.raku b/challenge-211/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..02e03c3f13 --- /dev/null +++ b/challenge-211/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,42 @@ +#!/usr/bin/raku + +sub diagonal(@matrix, $r, $c, $row, $col) { + my $i = $row; + my $j = $col; + my $same = @matrix[$i;$j]; + + while $i < $r && $j < $c { + if @matrix[$i;$j] != $same { + return False; + } + $i++; + $j++; + } + return True; +} + +sub MAIN( + $r, + $c, + *@args +) { + + my @matrix = @args.batch($c); + + + for 0 ..^ $c -> $col { + unless diagonal(@matrix, $r, $c, 0, $col) { + say 'false'; + exit; + } + } + + for 1 ..^ $r -> $row { + unless diagonal(@matrix, $r, $c, $row, 0) { + say 'false'; + exit; + } + } + + say 'true'; +}
\ No newline at end of file diff --git a/challenge-211/jaldhar-h-vyas/raku/ch-2.raku b/challenge-211/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..948a064315 --- /dev/null +++ b/challenge-211/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,23 @@ +#!/usr/bin/raku + +sub average(@nums) { + return @nums.sum / @nums.elems; +} + +sub MAIN( + *@nums +) { + for @nums.permutations -> $i { + for 1 ..^ @$i.elems -> $j { + my @array = $i.Array; + my @part1 = @array.splice(0, $j); + my @part2 = @array; + + if average(@part1) == average(@part2) { + say "true"; + exit; + } + } + } + say 'false'; +}
\ No newline at end of file |
