diff options
| author | Niels van Dijke <perlboy@cpan.org> | 2021-05-17 20:53:43 +0000 |
|---|---|---|
| committer | Niels van Dijke <perlboy@cpan.org> | 2021-05-17 20:53:43 +0000 |
| commit | 995eb11206a4496d484aa7b3aabab9ef1918aa1b (patch) | |
| tree | e7c6987e4869fc010430e4db0bc6dd78524fafec | |
| parent | c3cd45087006d3f63b05219b8280a25dc1ea7ba9 (diff) | |
| download | perlweeklychallenge-club-995eb11206a4496d484aa7b3aabab9ef1918aa1b.tar.gz perlweeklychallenge-club-995eb11206a4496d484aa7b3aabab9ef1918aa1b.tar.bz2 perlweeklychallenge-club-995eb11206a4496d484aa7b3aabab9ef1918aa1b.zip | |
Task 1 & 2
| -rwxr-xr-x | challenge-113/perlboy1967/perl/ch-1.pl | 57 | ||||
| -rwxr-xr-x | challenge-113/perlboy1967/perl/ch-2.pl | 61 |
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; + } + } +} |
