aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-084/perlboy1967/perl/ch-1.pl27
-rwxr-xr-xchallenge-084/perlboy1967/perl/ch-2.pl78
2 files changed, 105 insertions, 0 deletions
diff --git a/challenge-084/perlboy1967/perl/ch-1.pl b/challenge-084/perlboy1967/perl/ch-1.pl
new file mode 100755
index 0000000000..5c0bf44370
--- /dev/null
+++ b/challenge-084/perlboy1967/perl/ch-1.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 084
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-084/
+#
+# Task 1 - Reverse Integer
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use 5.16.3; # Matching the CentOS 7 distro I'm using
+
+use strict;
+use warnings;
+
+my ($N) = @ARGV;
+
+die "Please give signed 32 bits integer (- 2^31 <= X <= 2^31 - 1)"
+ unless ($N =~ m#^(([-]*)(\d{1,10}))$# and
+ $1 >= -2**31 and
+ $1 <= 2**31-1
+ );
+
+my $O = sprintf('%s%s', $2, scalar reverse $3);
+
+printf "Input: %d\n", $N;
+printf "Output: %d\n", $O;
+
diff --git a/challenge-084/perlboy1967/perl/ch-2.pl b/challenge-084/perlboy1967/perl/ch-2.pl
new file mode 100755
index 0000000000..7a1390a867
--- /dev/null
+++ b/challenge-084/perlboy1967/perl/ch-2.pl
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 084
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-084/
+#
+# Task 2 - Find Square
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use 5.16.3; # Matching the CentOS 7 distro I'm using
+
+use strict;
+use warnings;
+
+use List::Util qw(min first sum);
+use Data::Printer;
+
+sub checkMatrix($);
+sub findNumberOfSquares($);
+sub printMatrix($);
+
+my $M = [
+ [qw(1 1 0 1)],
+ [qw(1 1 0 0)],
+ [qw(0 1 1 1)],
+ [qw(1 0 1 1)],
+];
+
+printf "Input:\n%s\n", printMatrix($M);
+printf "\n";
+printf "Output: %d\n", findNumberOfSquares($M);
+
+sub checkMatrix($) {
+ my ($ar) = @_;
+
+ my ($dx, $dy) = (scalar @{$ar->[0]}, scalar @$ar);
+
+ foreach my $row (@$ar) {
+ die "Matrix size issue"
+ unless (scalar @$row == $dx);
+ die "Only '0' or '1' allowed"
+ unless (scalar(grep { /^[01]$/ } @$row) == $dx);
+ }
+
+ return ($dx, $dy);
+}
+
+
+sub findNumberOfSquares($) {
+ my ($ar) = @_;
+
+ my ($dX, $dY) = checkMatrix($M);
+
+ my $nOs = 0;
+
+ for my $dim (2 .. min($dX, $dY)) {
+ for my $row (0 .. $dY - $dim) {
+ for my $col (0 .. $dX - $dim) {
+ my @cells = (
+ $ar->[$row][$col], #TL
+ $ar->[$row + $dim - 1][$col], #TR
+ $ar->[$row][$col + $dim - 1], #BL
+ $ar->[$row + $dim - 1][$col + $dim - 1], #BR
+ );
+ $nOs++ if (sum(@cells) == 4);
+ }
+ }
+ }
+
+ return $nOs;
+}
+
+
+sub printMatrix($) {
+ my ($ar) = @_;
+
+ return join("\n", map { '[ '.join(' ', @{$_}).' ]' } @$ar);
+}