diff options
| author | Avery Adams <oldtechaa@gmail.com> | 2023-04-10 10:57:27 +1200 |
|---|---|---|
| committer | Avery Adams <oldtechaa@gmail.com> | 2023-04-10 10:57:27 +1200 |
| commit | 04a3fd897deede571b788bb6323ddb23838e6800 (patch) | |
| tree | 8984de9b11a755f276a69fbd6d745b5a9796c797 | |
| parent | 4890cd1addbde634e231ba6eb4656f7eb59085e9 (diff) | |
| download | perlweeklychallenge-club-04a3fd897deede571b788bb6323ddb23838e6800.tar.gz perlweeklychallenge-club-04a3fd897deede571b788bb6323ddb23838e6800.tar.bz2 perlweeklychallenge-club-04a3fd897deede571b788bb6323ddb23838e6800.zip | |
211 solutions for Avery Adams
| -rw-r--r-- | challenge-211/avery-adams/perl/ch-1.pl | 29 | ||||
| -rw-r--r-- | challenge-211/avery-adams/perl/ch-2.pl | 50 |
2 files changed, 79 insertions, 0 deletions
diff --git a/challenge-211/avery-adams/perl/ch-1.pl b/challenge-211/avery-adams/perl/ch-1.pl new file mode 100644 index 0000000000..c937936243 --- /dev/null +++ b/challenge-211/avery-adams/perl/ch-1.pl @@ -0,0 +1,29 @@ +#!/bin/perl + +use strict; +use v5.28; + +my @matrix1 = ( + [4, 3, 2, 1], + [5, 4, 3, 2], + [6, 5, 4, 3], +); + +my @matrix2 = ([1, 2, 3], [3, 2, 1]); + +say 'Is Matrix1 a Toeplitz matrix? : ' . (is_toeplitz(@matrix1) ? 'TRUE' : 'FALSE'); +say 'Is Matrix2 a Toeplitz matrix? : ' . (is_toeplitz(@matrix2) ? 'TRUE' : 'FALSE'); + +sub is_toeplitz { + my @matrix = @_; + + my $rows = scalar @matrix; + my $cols = scalar @{$matrix[0]}; + + for (my $r = 1; $r < $rows; $r++) { + for (my $c = 1; $c < $cols; $c++) { + if ($matrix[$r][$c] != $matrix[$r - 1][$c - 1]) {return 0;} + } + } + return 1; +} diff --git a/challenge-211/avery-adams/perl/ch-2.pl b/challenge-211/avery-adams/perl/ch-2.pl new file mode 100644 index 0000000000..bd2dfb85a9 --- /dev/null +++ b/challenge-211/avery-adams/perl/ch-2.pl @@ -0,0 +1,50 @@ +#!/bin/perl + +use strict; +use v5.28; + +use List::Util 'sum'; + +if ($#ARGV > 0) {can_split(@ARGV) ? say 'true' : say 'false'}; + +sub can_split { + my @nums = sort {$b <=> $a} (@_); + my $maxindex = scalar @nums; + my $avg = sum(@nums) / scalar(@nums); + my (@list1, @list2, $sum1, $sum2); + + for (my $i = 0; $i < $maxindex; $i++) { + if (scalar @list1 == 0) { + push @list1, @nums[0]; + $sum1 += @nums[0]; + splice @nums, 0, 1; + } elsif (scalar @list2 == 0) { + push @list2, @nums[0]; + $sum2 += @nums[0]; + splice @nums, 0, 1; + } else { + if (abs(($sum1 / @list1) - $avg) >= abs(($sum2 / @list2) - $avg)) { + if ($sum1 / @list1 <= $avg) { + push @list1, @nums[0]; + $sum1 += @nums[0]; + splice @nums, 0, 1; + } else { + push @list1, @nums[$#nums]; + $sum1 += @nums[$#nums]; + splice @nums, $#nums, 1; + } + } else { + if ($sum2 / @list2 <= $avg) { + push @list2, @nums[0]; + $sum2 += @nums[0]; + splice @nums, 0, 1; + } else { + push @list2, @nums[$#nums]; + $sum2 += @nums[$#nums]; + splice @nums, $#nums, 1; + } + } + } + } + $sum1 / scalar @list1 == $sum2 / scalar @list2 ? return 1 : return 0; +} |
