aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvery Adams <oldtechaa@gmail.com>2023-04-10 10:57:27 +1200
committerAvery Adams <oldtechaa@gmail.com>2023-04-10 10:57:27 +1200
commit04a3fd897deede571b788bb6323ddb23838e6800 (patch)
tree8984de9b11a755f276a69fbd6d745b5a9796c797
parent4890cd1addbde634e231ba6eb4656f7eb59085e9 (diff)
downloadperlweeklychallenge-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.pl29
-rw-r--r--challenge-211/avery-adams/perl/ch-2.pl50
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;
+}