diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2021-05-24 01:41:49 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2021-05-24 01:41:49 -0400 |
| commit | 0b2e0e29b1fe317d482ccb82f54a2a050b6d5c5a (patch) | |
| tree | 40b81caab44b3f6bd007a3828dbe1068861c6757 /challenge-113 | |
| parent | 03eb3fa7435d497e68348362885148da5298156e (diff) | |
| download | perlweeklychallenge-club-0b2e0e29b1fe317d482ccb82f54a2a050b6d5c5a.tar.gz perlweeklychallenge-club-0b2e0e29b1fe317d482ccb82f54a2a050b6d5c5a.tar.bz2 perlweeklychallenge-club-0b2e0e29b1fe317d482ccb82f54a2a050b6d5c5a.zip | |
Challenge 113 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-113')
| -rw-r--r-- | challenge-113/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-113/jaldhar-h-vyas/perl/ch-1.pl | 12 | ||||
| -rwxr-xr-x | challenge-113/jaldhar-h-vyas/perl/ch-2.pl | 92 | ||||
| -rwxr-xr-x | challenge-113/jaldhar-h-vyas/raku/ch-1.sh | 3 | ||||
| -rwxr-xr-x | challenge-113/jaldhar-h-vyas/raku/ch-2.raku | 74 |
5 files changed, 182 insertions, 0 deletions
diff --git a/challenge-113/jaldhar-h-vyas/blog.txt b/challenge-113/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..a93c9775b3 --- /dev/null +++ b/challenge-113/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2021/05/perl_weekly_challenge_week_113.html diff --git a/challenge-113/jaldhar-h-vyas/perl/ch-1.pl b/challenge-113/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..6fec2eae94 --- /dev/null +++ b/challenge-113/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,12 @@ +#!/usr/bin/perl +use 5.020; +use warnings; + +my ($N, $D) = @ARGV; + +my $total = 0; +for my $i (grep { /$D/ } (1 .. $N)) { + $total += $i; +} + +say 0 + ($total == $N) ? '1' : '0';
\ No newline at end of file diff --git a/challenge-113/jaldhar-h-vyas/perl/ch-2.pl b/challenge-113/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..e85dffc21f --- /dev/null +++ b/challenge-113/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,92 @@ +#!/usr/bin/perl + +package Node { + use Moo; + use namespace::autoclean; + + has parent => ( + is => 'ro', + isa => sub { return ref eq 'Node' || undef; }, + ); + + has left => ( + is => 'rw', + isa => sub { return ref eq 'Node'; }, + ); + + has right => ( + is => 'rw', + isa => sub { return ref eq 'Node'; }, + ); + + has value => ( + is => 'rw', + isa => sub { return ref eq 'Node'; }, + ); +} + +package main; +use 5.020; +use warnings; + +sub totalFrom { + my ($node) = @_; + my $sum = $node->value; + + if (defined $node->left) { + $sum += totalFrom($node->left); + } + + if (defined $node->right) { + $sum += totalFrom($node->right); + } + + return $sum; +} + +sub replaceFrom { + my ($node, $total) = @_; + + $node->value($total - $node->value); + + if (defined $node->left) { + replaceFrom($node->left, $total); + } + + if (defined $node->right) { + replaceFrom($node->right, $total); + } +} + +sub output { + my ($node, $left) = @_; + + if (defined $node->parent) { + say q{}, ((defined $left) ? 'left' : 'right'), ' child of ', $node->parent->value, ' = ', $node->value; + } else { + say 'root = ', $node->value; + } + + if (defined $node->left) { + output($node->left, 1); + } + + if (defined $node->right) { + output($node->right); + } +} + +my $root = Node->new(parent => undef, value => 1); +$root->left(Node->new(parent => $root, value => 2)); +$root->right(Node->new(parent => $root, value => 3)); +$root->left->left(Node->new(parent => $root->left, value => 4)); +$root->right->left(Node->new(parent => $root->right, value => 5)); +$root->right->right(Node->new(parent => $root->right, value => 6)); +$root->left->left->right(Node->new(parent => $root->left->left, value => 7)); + + +my $total = totalFrom($root); + +replaceFrom($root, $total); + +output($root); diff --git a/challenge-113/jaldhar-h-vyas/raku/ch-1.sh b/challenge-113/jaldhar-h-vyas/raku/ch-1.sh new file mode 100755 index 0000000000..b00bcf5297 --- /dev/null +++ b/challenge-113/jaldhar-h-vyas/raku/ch-1.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +raku -e 'my ($N, $D) = @*ARGS; say ([+] (1 .. $N ).grep({ /$D/ })) == $N ?? 1 !! 0;' $@ diff --git a/challenge-113/jaldhar-h-vyas/raku/ch-2.raku b/challenge-113/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..99c96c2396 --- /dev/null +++ b/challenge-113/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,74 @@ +#!/usr/bin/raku + +class Node { + has Node $.parent; + has Node $.left is rw; + has Node $.right is rw; + has Int $.value is rw; +} + +sub totalFrom( + Node $node +) { + my $sum = $node.value; + + if $node.left { + $sum += totalFrom($node.left); + } + + if $node.right { + $sum += totalFrom($node.right); + } + + return $sum; +} + +sub replaceFrom( + Node $node, + Int $total +) { + $node.value = $total - $node.value; + + if $node.left { + replaceFrom($node.left, $total); + } + + if $node.right { + replaceFrom($node.right, $total); + } +} + +sub output( + Node $node, + Bool $left = False +) { + if $node.parent { + say (($left) ?? 'left' !! 'right'), " child of {$node.parent.value} = {$node.value}"; + } else { + say "root = {$node.value}" + } + + if $node.left { + output($node.left, True); + } + + if $node.right { + output($node.right); + } +} + +sub MAIN() { + my Node $root = Node.new(parent => Nil, value => 1); + $root.left = Node.new(parent => $root, value => 2); + $root.right = Node.new(parent => $root, value => 3); + $root.left.left = Node.new(parent => $root.left, value => 4); + $root.right.left = Node.new(parent => $root.right, value => 5); + $root.right.right = Node.new(parent => $root.right, value => 6); + $root.left.left.right = Node.new(parent => $root.left.left, value => 7); + + my $total = totalFrom($root); + + replaceFrom($root, $total); + + output($root); +}
\ No newline at end of file |
