diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2025-07-21 23:52:33 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2025-07-22 00:56:49 -0400 |
| commit | 004aa5ea762e82aaa348da77dcd1d3ea42da1834 (patch) | |
| tree | cf1e50ad6e357c00915fe1433989d3ac75793c00 | |
| parent | bc7cd7f201b47ceaf810b95bcdd9f881185152e2 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-093/jaldhar-h-vyas/perl/ch-1.pl | 54 | ||||
| -rwxr-xr-x | challenge-093/jaldhar-h-vyas/perl/ch-2.pl | 74 | ||||
| -rwxr-xr-x | challenge-093/jaldhar-h-vyas/raku/ch-1.raku | 37 | ||||
| -rwxr-xr-x | challenge-093/jaldhar-h-vyas/raku/ch-2.raku | 60 |
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 |
