aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-10-02 21:10:42 +0100
committerGitHub <noreply@github.com>2024-10-02 21:10:42 +0100
commit3a9163a43fc5af9720938446aa7d586f863d857b (patch)
treeed8fc55da32120a524200a73a517689a02eb6ba9
parent18fc202c4a8a00a116f516795b660dcc0616f8b8 (diff)
parent38ab0c8ff7c569bd128afbd99b68d507e7f6956f (diff)
downloadperlweeklychallenge-club-3a9163a43fc5af9720938446aa7d586f863d857b.tar.gz
perlweeklychallenge-club-3a9163a43fc5af9720938446aa7d586f863d857b.tar.bz2
perlweeklychallenge-club-3a9163a43fc5af9720938446aa7d586f863d857b.zip
Merge pull request #10944 from jaldhar/challenge-288
Challenge 288 by Jaldhar H. Vyas.
-rw-r--r--challenge-288/jaldhar-h-vyas/blog.txt1
-rw-r--r--challenge-288/jaldhar-h-vyas/matrix1.txt4
-rw-r--r--challenge-288/jaldhar-h-vyas/matrix2.txt4
-rw-r--r--challenge-288/jaldhar-h-vyas/matrix3.txt4
-rwxr-xr-xchallenge-288/jaldhar-h-vyas/perl/ch-1.pl23
-rwxr-xr-xchallenge-288/jaldhar-h-vyas/perl/ch-2.pl59
-rwxr-xr-xchallenge-288/jaldhar-h-vyas/raku/ch-1.raku25
-rwxr-xr-xchallenge-288/jaldhar-h-vyas/raku/ch-2.raku59
8 files changed, 179 insertions, 0 deletions
diff --git a/challenge-288/jaldhar-h-vyas/blog.txt b/challenge-288/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..b67b08ba01
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2024/10/perl_weekly_challenge_week_288.html
diff --git a/challenge-288/jaldhar-h-vyas/matrix1.txt b/challenge-288/jaldhar-h-vyas/matrix1.txt
new file mode 100644
index 0000000000..2cd31408b4
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/matrix1.txt
@@ -0,0 +1,4 @@
+xxxxo
+xoooo
+xoooo
+xxxoo
diff --git a/challenge-288/jaldhar-h-vyas/matrix2.txt b/challenge-288/jaldhar-h-vyas/matrix2.txt
new file mode 100644
index 0000000000..7318438ccb
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/matrix2.txt
@@ -0,0 +1,4 @@
+xxxxx
+xoooo
+xxxxo
+xoooo
diff --git a/challenge-288/jaldhar-h-vyas/matrix3.txt b/challenge-288/jaldhar-h-vyas/matrix3.txt
new file mode 100644
index 0000000000..2d8015de75
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/matrix3.txt
@@ -0,0 +1,4 @@
+xxxoo
+oooxx
+oxxoo
+oooxx
diff --git a/challenge-288/jaldhar-h-vyas/perl/ch-1.pl b/challenge-288/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..0dee55bcf7
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+use v5.38;
+
+sub isPalindrome($str) {
+ return $str eq reverse $str;
+}
+
+my $str = shift;
+my $lower = $str - 1;
+my $upper = $str + 1;
+
+while (1) {
+ if (isPalindrome($lower)) {
+ say $lower;
+ last;
+ }
+ if (isPalindrome($upper)) {
+ say $upper;
+ last;
+ }
+ $lower--;
+ $upper++;
+}
diff --git a/challenge-288/jaldhar-h-vyas/perl/ch-2.pl b/challenge-288/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..2cea87e81f
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+use v5.38;
+
+sub load($filename) {
+ my @matrix;
+
+ open my $file, '<', $filename or die "$!\n";
+ while (my $line = <$file>) {
+ push @matrix, [ split //, $line];
+ }
+ close $file;
+
+ return \@matrix;
+}
+
+sub inBounds($rows, $cols, $x, $y) {
+ return $x >= 0 && $x < $rows && $y >= 0 && $y < $cols;
+}
+
+sub search($matrix, $rows, $cols, $visited, $x, $y, $symbol) {
+ if (!inBounds($rows, $cols, $x, $y) || $visited->[$x][$y] || $matrix->[$x][$y] ne $symbol) {
+ return 0;
+ }
+
+ $visited->[$x][$y] = 1;
+ my $size = 1;
+ state @directions = ([0, 1], [1, 0], [0, -1], [-1, 0]);
+
+
+ for my $dir (@directions) {
+ my ($dx, $dy) = @$dir;
+ $size += search($matrix, $rows, $cols, $visited, $x + $dx, $y + $dy, $symbol);
+ }
+
+ return $size;
+}
+
+sub largestContiguousBlock($matrix) {
+ my $rows = scalar @{$matrix};
+ my $cols = scalar @{$matrix->[0]};
+ my @visited = map { [(0) x $cols] } (0 .. $rows - 1);
+ my $maxSize = 0;
+
+ for my $i (0 .. $rows - 1) {
+ for my $j (0 .. $cols - 1) {
+ if (!$visited[$i][$j]) {
+ my $currentSize = search($matrix, $rows, $cols, \@visited, $i, $j, $matrix->[$i][$j]);
+ if ($currentSize > $maxSize) {
+ $maxSize = $currentSize;
+ }
+ }
+ }
+ }
+
+ return $maxSize;
+}
+
+my $filename = shift // die "Need filename\n";
+say largestContiguousBlock(load($filename));
diff --git a/challenge-288/jaldhar-h-vyas/raku/ch-1.raku b/challenge-288/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..925f6cacd5
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,25 @@
+#!/usr/bin/raku
+
+sub isPalindrome(Str $str) {
+ return $str eq $str.flip;
+}
+
+sub MAIN(
+ Str $str
+) {
+ my $lower = $str - 1;
+ my $upper = $str + 1;
+
+ loop {
+ if (isPalindrome($lower)) {
+ say $lower;
+ last;
+ }
+ if (isPalindrome($upper)) {
+ say $upper;
+ last;
+ }
+ $lower--;
+ $upper++;
+ }
+} \ No newline at end of file
diff --git a/challenge-288/jaldhar-h-vyas/raku/ch-2.raku b/challenge-288/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..ff79358a34
--- /dev/null
+++ b/challenge-288/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,59 @@
+#!/usr/bin/raku
+
+sub load($filename) {
+ my @matrix;
+
+ for $filename.IO.lines -> $line {
+ @matrix.push($line.comb);
+ }
+
+ return @matrix;
+}
+
+sub inBounds($rows, $cols, $x, $y) {
+ return $x >= 0 && $x < $rows && $y >= 0 && $y < $cols;
+}
+
+sub search(@matrix, $rows, $cols, @visited, $x, $y, $symbol) {
+ if (!inBounds($rows, $cols, $x, $y) || @visited[$x][$y] || @matrix[$x][$y] ne $symbol) {
+ return 0;
+ }
+
+ @visited[$x][$y] = True;
+ my $size = 1;
+ state @directions = ([0, 1], [1, 0], [0, -1], [-1, 0]);
+
+ for @directions -> $dir {
+ my ($dx, $dy) = @$dir;
+ $size += search(@matrix, $rows, $cols, @visited, $x + $dx, $y + $dy, $symbol);
+ }
+
+ return $size;
+}
+
+sub largestContiguousBlock(@matrix) {
+ my $rows = @matrix.elems;
+ my $cols = @matrix[0].elems;
+ my @visited = (0 ..^ $rows).map({ [False xx $cols] });
+ my $maxSize = 0;
+
+ for 0 ..^ $rows -> $i {
+ for 0 ..^ $cols -> $j {
+ if !@visited[$i][$j] {
+ my $currentSize = search(@matrix, $rows, $cols, @visited, $i, $j, @matrix[$i][$j]);
+
+ if $currentSize > $maxSize {
+ $maxSize = $currentSize;
+ }
+ }
+ }
+ }
+
+ return $maxSize;
+}
+
+sub MAIN(
+ Str $filename #= path to file containing matrix
+) {
+ say largestContiguousBlock(load($filename));
+} \ No newline at end of file