diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-18 14:13:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-18 14:13:48 +0100 |
| commit | 263d9b9a082772c04d0f2f1d64c37805a4bf3e23 (patch) | |
| tree | 5b2e8d75f7570d15c5e5bd8a016a10a9cca983b2 | |
| parent | de2829b8d15b234ebba9027f0076a2d6d119ad92 (diff) | |
| parent | ca093f49fb9366d3e7a046a41f61674668fed0a9 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-113/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-113/polettix/perl/ch-1.pl | 21 | ||||
| -rw-r--r-- | challenge-113/polettix/perl/ch-2.pl | 48 |
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)); |
