aboutsummaryrefslogtreecommitdiff
path: root/challenge-113
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2021-05-24 01:41:49 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2021-05-24 01:41:49 -0400
commit0b2e0e29b1fe317d482ccb82f54a2a050b6d5c5a (patch)
tree40b81caab44b3f6bd007a3828dbe1068861c6757 /challenge-113
parent03eb3fa7435d497e68348362885148da5298156e (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-113/jaldhar-h-vyas/perl/ch-1.pl12
-rwxr-xr-xchallenge-113/jaldhar-h-vyas/perl/ch-2.pl92
-rwxr-xr-xchallenge-113/jaldhar-h-vyas/raku/ch-1.sh3
-rwxr-xr-xchallenge-113/jaldhar-h-vyas/raku/ch-2.raku74
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