diff options
| -rwxr-xr-x | challenge-084/perlboy1967/perl/ch-1.pl | 27 | ||||
| -rwxr-xr-x | challenge-084/perlboy1967/perl/ch-2.pl | 78 |
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); +} |
