aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2023-05-13 18:06:12 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2023-05-13 18:06:12 -0400
commitd3d465cee4696cd10e0363d96c728337818492ac (patch)
tree78f2720e9d91c39fc8e5507ac111d4284de2d889
parentc802056581d745658579f53122baa0fbd121f306 (diff)
downloadperlweeklychallenge-club-d3d465cee4696cd10e0363d96c728337818492ac.tar.gz
perlweeklychallenge-club-d3d465cee4696cd10e0363d96c728337818492ac.tar.bz2
perlweeklychallenge-club-d3d465cee4696cd10e0363d96c728337818492ac.zip
Challenge 056 by Jaldhar H. Vyas.
-rw-r--r--challenge-056/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-056/jaldhar-h-vyas/perl/ch-1.pl14
-rwxr-xr-xchallenge-056/jaldhar-h-vyas/perl/ch-2.pl98
-rwxr-xr-xchallenge-056/jaldhar-h-vyas/raku/ch-1.p611
-rwxr-xr-xchallenge-056/jaldhar-h-vyas/raku/ch-2.p668
5 files changed, 192 insertions, 0 deletions
diff --git a/challenge-056/jaldhar-h-vyas/blog.txt b/challenge-056/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..a9b18013cf
--- /dev/null
+++ b/challenge-056/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2023/05/perl_weekly_challenge_week_56.html
diff --git a/challenge-056/jaldhar-h-vyas/perl/ch-1.pl b/challenge-056/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..779738f558
--- /dev/null
+++ b/challenge-056/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+use 5.010;
+use warnings;
+use strict;
+
+my ($k, @N) = @ARGV;
+
+for my $i (0 .. scalar @N - 1) {
+ for my $j (0 .. scalar @N - 1) {
+ if ($N[$i] - $N[$j] == $k && $i != $j) {
+ say "$i,$j";
+ }
+ }
+}
diff --git a/challenge-056/jaldhar-h-vyas/perl/ch-2.pl b/challenge-056/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..395ac92844
--- /dev/null
+++ b/challenge-056/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+
+package Node;
+use Moo;
+use namespace::clean;
+
+has left => (
+ is => 'ro',
+ isa => sub { (defined $_ && $_->isa('Node')) || undef },
+);
+
+has right => (
+ is => 'ro',
+ isa => sub { (defined $_ && $_->isa('Node')) || undef },
+);
+
+has amount => (
+ is => 'ro',
+);
+
+1;
+
+package main;
+use 5.010;
+use warnings;
+use strict;
+
+sub sum {
+ my $total = 0;
+
+ for my $elem (@{ $_[0] }) {
+ $total += $elem;
+ }
+
+ return $total;
+}
+
+sub traverse {
+ my ($node, $path, $target) = @_;
+ my $path_copy = [ @{$path} ];
+
+ push @{$path_copy}, $node->amount;
+
+ unless ($node->left || $node->right) {
+ if (sum($path_copy) == $target) {
+ say join ' -> ', @{$path_copy};
+ }
+ return;
+ }
+
+ if ($node->left) {
+ traverse($node->left, $path_copy, $target);
+ }
+
+ if ($node->right) {
+ traverse($node->right, $path_copy, $target);
+ }
+}
+
+my $node = Node->new(
+ left => Node->new(
+ left => Node->new(
+ left => Node->new(
+ left => undef,
+ right => undef,
+ amount => 7
+ ),
+ right => Node->new(
+ left => undef,
+ right => undef,
+ amount => 2
+ ),
+ amount => 11
+ ),
+ right => undef,
+ amount => 4
+ ),
+ right => Node->new(
+ left => Node->new(
+ left => undef,
+ right => undef,
+ amount => 13
+ ),
+ right => Node->new(
+ left => undef,
+ right => Node->new(
+ left => undef,
+ right => undef,
+ amount => 1
+ ),
+ amount => 9
+ ),
+ amount => 8
+ ),
+ amount => 5
+);
+
+traverse($node, [], 22);
diff --git a/challenge-056/jaldhar-h-vyas/raku/ch-1.p6 b/challenge-056/jaldhar-h-vyas/raku/ch-1.p6
new file mode 100755
index 0000000000..bf30af4962
--- /dev/null
+++ b/challenge-056/jaldhar-h-vyas/raku/ch-1.p6
@@ -0,0 +1,11 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ $k, *@N
+) {
+ for 0 .. @N.end X 0 .. @N.end -> $combo {
+ if @N[@$combo[0]] - @N[@$combo[1]] == $k && @$combo[0] != @$combo[1] {
+ say @$combo.join(q{,});
+ }
+ }
+} \ No newline at end of file
diff --git a/challenge-056/jaldhar-h-vyas/raku/ch-2.p6 b/challenge-056/jaldhar-h-vyas/raku/ch-2.p6
new file mode 100755
index 0000000000..7cbe87cf1d
--- /dev/null
+++ b/challenge-056/jaldhar-h-vyas/raku/ch-2.p6
@@ -0,0 +1,68 @@
+#!/usr/bin/perl6
+
+class Node {
+ has Node $.left;
+ has Node $.right;
+ has Int $.amount;
+}
+
+sub traverse(Node $node, @path is copy, $target) {
+ @path.push($node.amount);
+
+ unless $node.left || $node.right {
+ if @path.sum == $target {
+ say @path.join(' -> ');
+ }
+ return;
+ }
+
+ if $node.left {
+ traverse($node.left, @path, $target);
+ }
+
+ if $node.right {
+ traverse($node.right, @path, $target);
+ }
+}
+
+sub MAIN {
+ my Node $node = Node.new(
+ left => Node.new(
+ left => Node.new(
+ left => Node.new(
+ left => Nil,
+ right => Nil,
+ amount => 7
+ ),
+ right => Node.new(
+ left => Nil,
+ right => Nil,
+ amount => 2
+ ),
+ amount => 11
+ ),
+ right => Nil,
+ amount => 4
+ ),
+ right => Node.new(
+ left => Node.new(
+ left => Nil,
+ right => Nil,
+ amount => 13
+ ),
+ right => Node.new(
+ left => Nil,
+ right => Node.new(
+ left => Nil,
+ right => Nil,
+ amount => 1
+ ),
+ amount => 9
+ ),
+ amount => 8
+ ),
+ amount => 5
+ );
+
+ traverse($node, [], 22);
+} \ No newline at end of file