aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels van Dijke <perlboy@cpan.org>2021-05-17 20:53:43 +0000
committerNiels van Dijke <perlboy@cpan.org>2021-05-17 20:53:43 +0000
commit995eb11206a4496d484aa7b3aabab9ef1918aa1b (patch)
treee7c6987e4869fc010430e4db0bc6dd78524fafec
parentc3cd45087006d3f63b05219b8280a25dc1ea7ba9 (diff)
downloadperlweeklychallenge-club-995eb11206a4496d484aa7b3aabab9ef1918aa1b.tar.gz
perlweeklychallenge-club-995eb11206a4496d484aa7b3aabab9ef1918aa1b.tar.bz2
perlweeklychallenge-club-995eb11206a4496d484aa7b3aabab9ef1918aa1b.zip
Task 1 & 2
-rwxr-xr-xchallenge-113/perlboy1967/perl/ch-1.pl57
-rwxr-xr-xchallenge-113/perlboy1967/perl/ch-2.pl61
2 files changed, 118 insertions, 0 deletions
diff --git a/challenge-113/perlboy1967/perl/ch-1.pl b/challenge-113/perlboy1967/perl/ch-1.pl
new file mode 100755
index 0000000000..a63eb55d9d
--- /dev/null
+++ b/challenge-113/perlboy1967/perl/ch-1.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 113
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-113/#TASK1
+#
+# Task 1 - Represent Integer
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use v5.16;
+use strict;
+use warnings;
+
+use List::Util qw(sum0 sum);
+
+use Test::More;
+
+# Prototype(s)
+sub isRepresentInteger($$);
+
+my @tests = (
+ [13,1,0], [ 1,1,1],
+ [15,2,0], [14,2,1],
+ [17,3,0], [16,3,1],
+ [19,4,0], [18,4,1],
+ [21,5,0], [20,5,1],
+ [23,6,0], [22,6,1],
+ [25,7,0], [24,7,1],
+ [27,8,0], [26,8,1],
+ [29,9,0], [28,9,1],
+);
+
+foreach my $test (@tests) {
+ my ($N,$D,$result) = @$test;
+ is(isRepresentInteger($N,$D), $result);
+}
+
+done_testing;
+
+for my $d (1 .. 9) {
+ print STDERR "d:$d\n";
+ for my $i (1 .. 100000) {
+ printf "($i,$d)\n" if (x($i,$d) == $i);
+ print STDERR '.' if ($i % 1000 == 0);
+ }
+ print STDERR "\n";
+}
+
+sub isRepresentInteger($$) {
+ my ($n,$d) = @_;
+
+ return ($n == sum0(grep /$d/, ($d .. $n)) ? 1 : 0);
+}
+
+sub x {
+ return sum0(grep /$_[1]/, ($_[1] .. $_[0]));
+}
diff --git a/challenge-113/perlboy1967/perl/ch-2.pl b/challenge-113/perlboy1967/perl/ch-2.pl
new file mode 100755
index 0000000000..bc8b38eefc
--- /dev/null
+++ b/challenge-113/perlboy1967/perl/ch-2.pl
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 113
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-113/#TASK2
+#
+# Task 2 - Recreate Binary Tree
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use v5.16;
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Deep;
+
+my %tests = (
+ 'Test 1' => [
+ [ 1,[ 2,[ 4,[undef, 7]]],[ 3,[ 5, 6]]],
+ [27,[26,[24,[undef,21]]],[25,[23,22]]]
+ ],
+ 'Test 2' => [
+ [2,[3,[undef,2]],[undef,4]],
+ [9,[8,[undef,9]],[undef,7]]
+ ],
+);
+
+foreach my $test (keys %tests) {
+ my ($t,$res) = @{$tests{$test}};
+ updateTree($t,sumOfTree($t));
+ cmp_deeply($t,$res);
+}
+
+done_testing;
+
+sub sumOfTree {
+ my ($arT) = @_;
+
+ my $sum;
+ foreach my $n (@$arT) {
+ if (ref($n) eq 'ARRAY') {
+ $sum += sumOfTree($n);
+ } elsif (defined $n) {
+ $sum += $n;
+ }
+ }
+
+ return $sum;
+}
+
+sub updateTree {
+ my ($arT, $sum) = @_;
+
+ foreach my $n (@$arT) {
+ if (ref($n) eq 'ARRAY') {
+ updateTree($n,$sum);
+ } elsif (defined $n) {
+ $n = $sum - $n;
+ }
+ }
+}