aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2025-07-21 23:52:33 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2025-07-22 00:56:49 -0400
commit004aa5ea762e82aaa348da77dcd1d3ea42da1834 (patch)
treecf1e50ad6e357c00915fe1433989d3ac75793c00
parentbc7cd7f201b47ceaf810b95bcdd9f881185152e2 (diff)
downloadperlweeklychallenge-club-004aa5ea762e82aaa348da77dcd1d3ea42da1834.tar.gz
perlweeklychallenge-club-004aa5ea762e82aaa348da77dcd1d3ea42da1834.tar.bz2
perlweeklychallenge-club-004aa5ea762e82aaa348da77dcd1d3ea42da1834.zip
Challenge 93 by Jaldhar H. Vyas.
-rw-r--r--challenge-093/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-093/jaldhar-h-vyas/perl/ch-1.pl54
-rwxr-xr-xchallenge-093/jaldhar-h-vyas/perl/ch-2.pl74
-rwxr-xr-xchallenge-093/jaldhar-h-vyas/raku/ch-1.raku37
-rwxr-xr-xchallenge-093/jaldhar-h-vyas/raku/ch-2.raku60
5 files changed, 226 insertions, 0 deletions
diff --git a/challenge-093/jaldhar-h-vyas/blog.txt b/challenge-093/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..497f403c78
--- /dev/null
+++ b/challenge-093/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2025/07/perl_weekly_challenge_week_93.html
diff --git a/challenge-093/jaldhar-h-vyas/perl/ch-1.pl b/challenge-093/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..174aafdb90
--- /dev/null
+++ b/challenge-093/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+use 5.038;
+use warnings;
+use English;
+
+sub max(@values) {
+ my $maximum = shift @values;
+
+ while (my $next = shift @values) {
+ if ($next > $maximum) {
+ $maximum = $next;
+ }
+ }
+
+ return $maximum;
+}
+
+my @N = @ARGV;
+
+if (scalar @N < 1) {
+ die "Usage: $PROGRAM_NAME x1,y1 x2,y2 ...\n";
+}
+
+my @points = (map { [split /,/] } @N);
+my $maxPoints = 1;
+
+for my $i (keys @points) {
+ my %lines;
+
+ for my $j (keys @points) {
+
+ if ($i == $j) {
+ next;
+ }
+
+ my ($x1, $y1) = @{$points[$i]};
+ my ($x2, $y2) = @{$points[$j]};
+ my ($dx, $dy) = ($x2 - $x1, $y2 - $y1);
+
+ if ($dx == 0) {
+ $lines{'inf'}++;
+ } else {
+ my $slope = $dy / $dx;
+ my $intercept = $y1 - $slope * $x1;
+ $lines{"$slope,$intercept"}++;
+ }
+ }
+
+ my $localMax = (max(values %lines) // 0) + 1;
+
+ $maxPoints = max($maxPoints, $localMax);
+}
+
+say $maxPoints;
diff --git a/challenge-093/jaldhar-h-vyas/perl/ch-2.pl b/challenge-093/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..c585aab33e
--- /dev/null
+++ b/challenge-093/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,74 @@
+#!/usr/bin/perl
+use 5.038;
+use warnings;
+use English;
+use feature qw/ class /;
+no warnings qw/ experimental::class /;
+
+class Node {
+ field $val :param;
+ field $left;
+ field $right;
+
+ method val { return $val; }
+ method left { return $left; }
+ method right { return $right; }
+
+ method setLeft($node) { $left = $node; }
+ method setRight($node) { $right = $node; }
+}
+
+sub makeTree(@values) {
+ my Node @tree;
+
+ for my $i (keys @values) {
+ if ($values[$i] eq q{-}) {
+ next;
+ }
+ $tree[$i] = Node->new(val => $values[$i]);
+ }
+
+ for my $i (keys @tree) {
+ if (!$tree[$i]) {
+ next;
+ }
+
+ my $l = 2 * $i + 1;
+ my $r = 2 * $i + 2;
+
+ if ($l <= scalar @tree - 1 && $tree[$l]) {
+ $tree[$i]->setLeft($tree[$l]);
+ }
+
+ if ($r <= scalar @tree - 1 && $tree[$r]) {
+ $tree[$i]->setRight($tree[$r]);
+ }
+ }
+
+ return $tree[0];
+}
+
+sub sumPaths($node, $num, $sum) {
+ if (!$node) {
+ return $sum;
+ }
+
+ $num += $node->val;
+
+ if (!$node->left && !$node->right) {
+ $sum += $num;
+ } else {
+ $sum = sumPaths($node->left, $num, $sum);
+ $sum = sumPaths($node->right, $num, $sum);
+ }
+
+ return $sum;
+}
+
+my @nodes = @ARGV;
+
+if (scalar @nodes < 1) {
+ die "Usage: $PROGRAM_NAME <level-order tree nodes>\n";
+}
+
+say sumPaths(makeTree(@nodes), 0, 0);
diff --git a/challenge-093/jaldhar-h-vyas/raku/ch-1.raku b/challenge-093/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..bce35f2bee
--- /dev/null
+++ b/challenge-093/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,37 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ *@N where { @N.elems } #= x1,y1 x2,y2 ...
+ ) {
+ my @points = @N.map({ [ $_.split(q{,}) ] });
+ my $maxPoints = 1;
+
+ for @points.keys -> $i {
+ my %lines;
+
+ for @points.keys -> $j {
+
+ if $i == $j {
+ next;
+ }
+
+ my ($x1, $y1) = @points[$i];
+ my ($x2, $y2) = @points[$j];
+ my ($dx, $dy) = ($x2 - $x1, $y2 - $y1);
+
+ if $dx == 0 {
+ %lines{∞}++;
+ } else {
+ my $slope = $dy / $dx;
+ my $intercept = $y1 - $slope * $x1;
+ %lines{"$slope,$intercept"}++;
+ }
+ }
+
+ my $localMax = (%lines.values.max // 0) + 1;
+
+ $maxPoints = ($maxPoints, $localMax).max;
+ }
+
+ say $maxPoints;
+} \ No newline at end of file
diff --git a/challenge-093/jaldhar-h-vyas/raku/ch-2.raku b/challenge-093/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..fa6db841db
--- /dev/null
+++ b/challenge-093/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,60 @@
+#!/usr/bin/raku
+
+class Node {
+ has $.val;
+ has Node $.left is rw;
+ has Node $.right is rw;
+}
+
+sub makeTree(@values) {
+ my Node @tree;
+
+ for @values.keys -> $i {
+ if @values[$i] eq q{-} {
+ next;
+ }
+ @tree[$i] = Node.new(val => @values[$i]);
+ }
+
+ for @tree.keys -> $i {
+ if (!@tree[$i]) {
+ next;
+ }
+
+ my $l = 2 * $i + 1;
+ my $r = 2 * $i + 2;
+
+ if $l <= @tree.elems - 1 && @tree[$l] {
+ @tree[$i].left = @tree[$l];
+ }
+
+ if $r <= @tree.elems - 1 && @tree[$r] {
+ @tree[$i].right = @tree[$r];
+ }
+ }
+
+ return @tree[0];
+}
+
+sub sumPaths(Node $node, $num is copy, $sum is copy) {
+ if !$node {
+ return $sum;
+ }
+
+ $num += $node.val;
+
+ if !$node.left && !$node.right {
+ $sum += $num;
+ } else {
+ $sum = sumPaths($node.left, $num, $sum);
+ $sum = sumPaths($node.right, $num, $sum);
+ }
+
+ return $sum;
+}
+
+sub MAIN(
+ *@nodes where { @nodes.elems } #= level-order tree nodes
+ ) {
+ say sumPaths(makeTree(@nodes), 0, 0);
+} \ No newline at end of file