diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2023-05-13 18:06:12 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2023-05-13 18:06:12 -0400 |
| commit | d3d465cee4696cd10e0363d96c728337818492ac (patch) | |
| tree | 78f2720e9d91c39fc8e5507ac111d4284de2d889 | |
| parent | c802056581d745658579f53122baa0fbd121f306 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-056/jaldhar-h-vyas/perl/ch-1.pl | 14 | ||||
| -rwxr-xr-x | challenge-056/jaldhar-h-vyas/perl/ch-2.pl | 98 | ||||
| -rwxr-xr-x | challenge-056/jaldhar-h-vyas/raku/ch-1.p6 | 11 | ||||
| -rwxr-xr-x | challenge-056/jaldhar-h-vyas/raku/ch-2.p6 | 68 |
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 |
