diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-11-23 00:40:30 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-23 00:40:30 +0000 |
| commit | 239af51177df0c747b3d5be7bd16a55803e894ed (patch) | |
| tree | 7156e9d33e6ed0eb8ec1cfaebffe155c6d4e8b7e /challenge-087 | |
| parent | a09c9b601f7e359d1a9b3f28f1efa6c7e4018f39 (diff) | |
| parent | f639ae0a1680d171555054585729e8d46eaf4eee (diff) | |
| download | perlweeklychallenge-club-239af51177df0c747b3d5be7bd16a55803e894ed.tar.gz perlweeklychallenge-club-239af51177df0c747b3d5be7bd16a55803e894ed.tar.bz2 perlweeklychallenge-club-239af51177df0c747b3d5be7bd16a55803e894ed.zip | |
Merge pull request #2823 from jaldhar/challenge-087
Challenge 87 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-087')
| -rw-r--r-- | challenge-087/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-087/jaldhar-h-vyas/perl/ch-1.pl | 23 | ||||
| -rwxr-xr-x | challenge-087/jaldhar-h-vyas/perl/ch-2.pl | 73 | ||||
| -rwxr-xr-x | challenge-087/jaldhar-h-vyas/raku/ch-1.p6 | 22 | ||||
| -rwxr-xr-x | challenge-087/jaldhar-h-vyas/raku/ch-2.p6 | 48 | ||||
| -rw-r--r-- | challenge-087/jaldhar-h-vyas/square1.txt | 5 | ||||
| -rw-r--r-- | challenge-087/jaldhar-h-vyas/square2.txt | 4 | ||||
| -rw-r--r-- | challenge-087/jaldhar-h-vyas/square3.txt | 5 |
8 files changed, 181 insertions, 0 deletions
diff --git a/challenge-087/jaldhar-h-vyas/blog.txt b/challenge-087/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..b70bd70761 --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2020/11/perl_weekly_challenge_week_87.html diff --git a/challenge-087/jaldhar-h-vyas/perl/ch-1.pl b/challenge-087/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..ec49f67a1e --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,23 @@ +#!/usr/bin/perl +use 5.020; +use warnings; + +my @N = sort { $a <=> $b } @ARGV; + +my @sequence = ( $N[0] ); +my @longest; + +for my $i (1 .. scalar @N - 1) { + if ($N[$i] == $N[$i - 1] + 1) { + push @sequence, $N[$i]; + + if (scalar @sequence > scalar @longest) { + @longest = @sequence; + } + + } else { + @sequence = ( $N[$i] ); + } +} + +say scalar @longest ? (q{(} . (join q{, }, @longest) . q{)}) : 0; diff --git a/challenge-087/jaldhar-h-vyas/perl/ch-2.pl b/challenge-087/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..d3f22e8dbb --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,73 @@ +#!/usr/bin/perl +use 5.020; +use warnings; +use English qw/ -no_match_vars /; + +sub usage { + print<<"-USAGE-"; +Usage: + $PROGRAM_NAME <file> + + <file> a file describing a matrix of 1's and 0's where every line is a row in the matrix. +-USAGE- + exit 0; +} + +sub all { + my @array = @_; + + for (@array) { + if ($_ != 1) { + return undef; + } + } + + return 1; +} + +my $file = shift // usage(); + +my @matrix; +open my $fn, '<', $file or die "$OS_ERROR\n"; +while (my $line = <$fn>) { + chomp $line; + push @matrix, [ $line =~ /(0|1)/g ]; +} +close $fn; + +my $maxheight = 0; +my $maxwidth = 0; + +for my $m (0 .. scalar @matrix - 1) { + for my $n (0 .. scalar @{$matrix[$m]} - 1) { + if (@{$matrix[$m]}[$n] == 1) { + my $row = $m; + my $col = $n; + my $left = $n; + my $height = 0; + my $width = 0; + while ($col < scalar @{$matrix[$row]} && @{$matrix[$row]}[$col] == 1) { + $width++; + $col++; + } + + while ($row < scalar @matrix && all(@{$matrix[$row]}[$left .. $left + $width - 1])) { + $height++; + $row++; + } + + if ($height * $width > $maxheight * $maxwidth) { + $maxheight = $height; + $maxwidth = $width; + } + } + } +} + +if ($maxheight * $maxwidth < 2) { + say '0'; +} else { + for (0 .. $maxheight - 1) { + say q{[ }, "1 " x $maxwidth, q{]}; + } +}
\ No newline at end of file diff --git a/challenge-087/jaldhar-h-vyas/raku/ch-1.p6 b/challenge-087/jaldhar-h-vyas/raku/ch-1.p6 new file mode 100755 index 0000000000..14b0c0245b --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#!/usr/bin/perl6 + +sub MAIN(*@N) { + my @n = @N.sort; + my @sequence = ( @n[0] ); + my @longest; + + for 1 ..^ @n.elems -> $i { + if @n[$i] == @n[$i - 1] + 1 { + @sequence.push(@n[$i]); + + if @sequence.elems > @longest.elems { + @longest = @sequence; + } + + } else { + @sequence = ( @n[$i] ); + } + } + + say @longest.elems ?? (q{(} ~ @longest.join(q{, }) ~ q{)}) !! 0; +}
\ No newline at end of file diff --git a/challenge-087/jaldhar-h-vyas/raku/ch-2.p6 b/challenge-087/jaldhar-h-vyas/raku/ch-2.p6 new file mode 100755 index 0000000000..37796b0485 --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/raku/ch-2.p6 @@ -0,0 +1,48 @@ +#!/usr/bin/perl6 + +sub MAIN( + Str $file #= a file describing a matrix of 1's and 0's where every line + #= is a row in the matrix. +) { + my @matrix; + for $file.IO.lines -> $line { + @matrix.push($line.match(/ (0|1) /, :g)); + } + + my $maxheight = 0; + my $maxwidth = 0; + + for 0 ..^ @matrix.elems -> $m { + for 0 ..^ @matrix[$m].elems -> $n { + if @matrix[$m][$n] == 1 { + my $row = $m; + my $col = $n; + my $left = $n; + my $height = 0; + my $width = 0; + while $col < @matrix[$row].elems && @matrix[$row][$col] == 1 { + $width++; + $col++; + } + + while $row < @matrix.elems && @matrix[$row][$left ..^ $left + $width].all == 1 { + $height++; + $row++; + } + + if $height * $width > $maxheight * $maxwidth { + $maxheight = $height; + $maxwidth = $width; + } + } + } + } + + if $maxheight * $maxwidth < 2 { + say '0'; + } else { + for 0 ..^ $maxheight { + say q{[ }, "1 " x $maxwidth, q{]}; + } + } +}
\ No newline at end of file diff --git a/challenge-087/jaldhar-h-vyas/square1.txt b/challenge-087/jaldhar-h-vyas/square1.txt new file mode 100644 index 0000000000..14c0fc6cf9 --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/square1.txt @@ -0,0 +1,5 @@ +[ 0 0 0 1 0 0 ] +[ 1 1 1 0 0 0 ] +[ 0 0 1 0 0 1 ] +[ 1 1 1 1 1 0 ] +[ 1 1 1 1 1 0 ] diff --git a/challenge-087/jaldhar-h-vyas/square2.txt b/challenge-087/jaldhar-h-vyas/square2.txt new file mode 100644 index 0000000000..c7014c10a0 --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/square2.txt @@ -0,0 +1,4 @@ +[ 1 0 1 0 1 0 ] +[ 0 1 0 1 0 1 ] +[ 1 0 1 0 1 0 ] +[ 0 1 0 1 0 1 ]
\ No newline at end of file diff --git a/challenge-087/jaldhar-h-vyas/square3.txt b/challenge-087/jaldhar-h-vyas/square3.txt new file mode 100644 index 0000000000..717ddaf3b4 --- /dev/null +++ b/challenge-087/jaldhar-h-vyas/square3.txt @@ -0,0 +1,5 @@ +[ 0 0 0 1 1 1 ] +[ 1 1 1 1 1 1 ] +[ 0 0 1 0 0 1 ] +[ 0 0 1 1 1 1 ] +[ 0 0 1 1 1 1 ]
\ No newline at end of file |
