aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-18 14:13:48 +0100
committerGitHub <noreply@github.com>2021-05-18 14:13:48 +0100
commit263d9b9a082772c04d0f2f1d64c37805a4bf3e23 (patch)
tree5b2e8d75f7570d15c5e5bd8a016a10a9cca983b2
parentde2829b8d15b234ebba9027f0076a2d6d119ad92 (diff)
parentca093f49fb9366d3e7a046a41f61674668fed0a9 (diff)
downloadperlweeklychallenge-club-263d9b9a082772c04d0f2f1d64c37805a4bf3e23.tar.gz
perlweeklychallenge-club-263d9b9a082772c04d0f2f1d64c37805a4bf3e23.tar.bz2
perlweeklychallenge-club-263d9b9a082772c04d0f2f1d64c37805a4bf3e23.zip
Merge pull request #4107 from polettix/polettix/pwc113
Add polettix's solution to challenge-113
-rw-r--r--challenge-113/polettix/blog.txt1
-rw-r--r--challenge-113/polettix/blog1.txt1
-rw-r--r--challenge-113/polettix/perl/ch-1.pl21
-rw-r--r--challenge-113/polettix/perl/ch-2.pl48
4 files changed, 71 insertions, 0 deletions
diff --git a/challenge-113/polettix/blog.txt b/challenge-113/polettix/blog.txt
new file mode 100644
index 0000000000..aa3dee7d91
--- /dev/null
+++ b/challenge-113/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2021/05/19/pwc113-represent-integer/
diff --git a/challenge-113/polettix/blog1.txt b/challenge-113/polettix/blog1.txt
new file mode 100644
index 0000000000..59ad48ecbd
--- /dev/null
+++ b/challenge-113/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2021/05/20/pwc113-recreate-binary-tree/
diff --git a/challenge-113/polettix/perl/ch-1.pl b/challenge-113/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..8e2c0058ed
--- /dev/null
+++ b/challenge-113/polettix/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#!/usr/bin/env perl
+use 5.024;
+use warnings;
+use experimental qw< postderef signatures >;
+no warnings qw< experimental::postderef experimental::signatures >;
+
+sub represent_integer ($n, $d) {
+ return 0 if $n < $d; # no point in checking this
+ return 1 if $n >= 10 * $d; # n * d + (10 * d + i) (i < 9)
+ return 1 if $n =~ m{$d}mxs; # match one digit
+ $n -= $d;
+ while ($n > 0) {
+ return 1 if represent_integer($n, $d);
+ $n -= 10;
+ }
+ return 0;
+}
+
+my $N = shift || 25;
+my $D = shift || 7;
+say represent_integer($N, $D) ? 1 : 0;
diff --git a/challenge-113/polettix/perl/ch-2.pl b/challenge-113/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..826c5083b8
--- /dev/null
+++ b/challenge-113/polettix/perl/ch-2.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+use 5.024;
+use warnings;
+use experimental qw< postderef signatures >;
+no warnings qw< experimental::postderef experimental::signatures >;
+
+sub recreate_binary_tree ($tree) {
+ my $sum = 0;
+ for my $cb ( # do the same loop with different actions inside
+ sub ($n) { $sum += $n->{value} },
+ sub ($n) { $n->{value} = $sum - $n->{value} },
+ )
+ {
+ my @queue = ($tree);
+ while (@queue) {
+ my $node = shift(@queue) // next;
+ $cb->($node);
+ next unless exists $node->{children};
+ push @queue, $node->{children}->@*;
+ } ## end while (@queue)
+ } ## end for my $cb (sub ($n) { ...})
+ return $tree;
+} ## end sub recreate_binary_tree ($tree)
+
+sub node ($value, $left = undef, $right = undef) {
+ my %retval = (value => $value);
+ $retval{children} = [$left, $right]
+ if defined($left) || defined($right);
+ return \%retval;
+} ## end sub node
+
+sub printout ($root, $indent = 0) {
+ my $value = defined($root) ? $root->{value} : '';
+ say ' ' x $indent, "<$value>";
+ printout($_, $indent + 1) for $root->{children}->@*;
+}
+
+# 1
+# / \
+# 2 3
+# / / \
+# 4 5 6
+# \
+# 7
+my $T =
+ node(1, node(2, node(4, undef, node(7))), node(3, node(5), node(6)));
+
+printout(recreate_binary_tree($T));