diff options
| author | E7-87-83 <fungcheokyin@gmail.com> | 2020-11-02 15:51:43 +0800 |
|---|---|---|
| committer | E7-87-83 <fungcheokyin@gmail.com> | 2020-11-02 15:51:43 +0800 |
| commit | 3cb26cb56ed1a6981e06ba31b35f8e566ca422d4 (patch) | |
| tree | 0238b8d60c8e4b6ab4970c3d00be72617db784f1 /challenge-084 | |
| parent | 6358c68fd8d05e51ee0c4d7777dbf5fef7c7cb18 (diff) | |
| download | perlweeklychallenge-club-3cb26cb56ed1a6981e06ba31b35f8e566ca422d4.tar.gz perlweeklychallenge-club-3cb26cb56ed1a6981e06ba31b35f8e566ca422d4.tar.bz2 perlweeklychallenge-club-3cb26cb56ed1a6981e06ba31b35f8e566ca422d4.zip | |
So sad, have forgetten to upload for #084; be an early bird for #085
Diffstat (limited to 'challenge-084')
| -rw-r--r-- | challenge-084/cheok-yin-fung/perl/ch-1.pl | 72 | ||||
| -rw-r--r-- | challenge-084/cheok-yin-fung/perl/ch-2.pl | 80 |
2 files changed, 152 insertions, 0 deletions
diff --git a/challenge-084/cheok-yin-fung/perl/ch-1.pl b/challenge-084/cheok-yin-fung/perl/ch-1.pl new file mode 100644 index 0000000000..0abed1ccf2 --- /dev/null +++ b/challenge-084/cheok-yin-fung/perl/ch-1.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl +# The Weekly challenge - Perl & Raku Week 084 +# Task 1 Reverse Integer +# +# Description: The number 2,147,483,647 is the +# maximum positive value for a 32-bit signed binary integer in computing. +# +# additional info from books: +# minimum value for a 32-bigt signed binary integer: -2147483648 + +use strict; +use warnings; +#use Test::More tests => 4; + +# 8463847412 +# 2147483648 +# 9876543210 + +my @r_MAXPOS = split "", "2147483647"; +my @r_MAXNEG_WO_SIGN = split "", "2147483648"; + +if ($ARGV[0] ne "") { + print(ri($ARGV[0]), "\n"); +} +else { + print -1_000_000, "\n"; + print(ri(-1_000_000) ,"\n") ; #should it be -000_000_1 or -1 ? +} + +sub compare_digits { + my @indvar = @{$_[0]}; + my @bigbro = @{$_[1]}; + return 0 if scalar @indvar > 10; + return 1 if scalar @indvar < 10; + for (0..9) { + return 0 if $indvar[$_] > $bigbro[$_]; + } + return 1; +} + + +sub ri { + my @arr = split "" , $_[0]; + my $sgn = "+"; + $sgn = shift @arr if $arr[0] eq '-' ; + my @r_arr = reverse @arr; + if ($sgn eq '+') { + if (compare_digits([@r_arr], [@r_MAXPOS])) { + return join "", @r_arr; + } + else { + return 0; + } + } + else { + if (compare_digits([@r_arr], [@r_MAXNEG_WO_SIGN])) { + return '-'.(join "", @r_arr); + } + else { + return 0; + } + } + +} + +=pod +ok ri(1234) == 4321, "example 1"; +ok ri(-1234) == -4321, "example 2"; +ok ri(1231230512) == 0, "example 3"; +ok ri(7_463_847_412) == 2_147_483_647, "max 32-bit integer"; +=cut + diff --git a/challenge-084/cheok-yin-fung/perl/ch-2.pl b/challenge-084/cheok-yin-fung/perl/ch-2.pl new file mode 100644 index 0000000000..c3b70696d6 --- /dev/null +++ b/challenge-084/cheok-yin-fung/perl/ch-2.pl @@ -0,0 +1,80 @@ +#!/usr/bin/perl +use strict; +use warnings; +#use Test::More tests => 4; +#use Data::Dumper; + +if ($ARGV[0]) { + my @f = @ARGV; + my $M = shift @f; + my $N = shift @f; + my @matrix = (); + die "Input Parameters Error" unless scalar @f == $M*$N; + for my $counter (0..$M-1) { + push @matrix , [ @f[$N*$counter..$N*$counter+$N-1] ]; + } + +# print Dumper(@matrix); + print_matrix([@matrix]); + print 'ans: ', find_sq([@matrix]), "\n"; +} +else { + for(1..3) { + print "[1,1,1,1]"; + print "\n"; + } + print 'ans: ', find_sq([[1,1,1,1],[1,1,1,1],[1,1,1,1]]), "\n"; + #all 1s, should be 8 +} + + +sub print_matrix { + my @mat = @{$_[0]}; + my $M = scalar @mat; + my $N = scalar @{$mat[0]}; + for my $i (0..$M-1) { + print "[", join(", ", @{$mat[$i]}), "]" ; + print "\n"; + } +} + +sub find_sq { + my @mat = @{$_[0]}; + my $nsq = 0; + my $M = scalar @mat; + my $N = scalar @{$mat[0]}; + + for my $i (0..$M-2) { + for my $j (0..$N-2) { + my $max_len_sq = $M-$i < $N-$j ? $M-$i : $N-$j; #sign of the ineq + for my $k (2..$max_len_sq) { + $nsq++ if bool_contain_sq([@mat], $i, $j, $k); + } + } + } + + return $nsq; + +} + +sub bool_contain_sq { + my @mat = @{$_[0]}; + my $r = $_[1]; + my $c = $_[2]; + my $len_side = $_[3]; + + return (${$mat[$r]}[$c] && ${$mat[$r+$len_side-1]}[$c] && + ${$mat[$r]}[$c+$len_side-1] && ${$mat[$r+$len_side-1]}[$c+$len_side-1] ); +} + + +=pod +ok(find_sq([[ 0,1,0,1 ], [ 0, 0, 1,0 ], [ 1, 1 ,0 ,1],[1, 0, 0, 1 ]] )== 1, + "Example 1"); +ok(find_sq([[ 1 ,1, 0, 1 ], [ 1, 1 ,0 ,0 ], [ 0, 1, 1 ,1 ], [ 1, 0, 1, 1 ]] + )== 4, "Example 2"); +ok(find_sq([[ 0 ,1 ,0 ,1 ], [ 1, 0 ,1 ,0 ], [ 0 ,1 ,0 ,0 ], [ 1, 0 ,0 ,1 ]] + ) == 0, "Example 3"); +ok(find_sq([[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]] + ) == 14, "a 4x4 matrix with every entry being 1"); +=cut |
