diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-23 16:52:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-23 16:52:53 +0100 |
| commit | bc39d8a1516079ad1492e16b3be7e0763dae85f5 (patch) | |
| tree | a7b353d39c953b346dc578ac565ab097c2de7c21 /challenge-113 | |
| parent | 41df7d51c6f6e10d0c0f8071c6148c8aed783a1f (diff) | |
| parent | 1bb09b70ffaeff89f4eac1c140c51c3e62a3a12b (diff) | |
| download | perlweeklychallenge-club-bc39d8a1516079ad1492e16b3be7e0763dae85f5.tar.gz perlweeklychallenge-club-bc39d8a1516079ad1492e16b3be7e0763dae85f5.tar.bz2 perlweeklychallenge-club-bc39d8a1516079ad1492e16b3be7e0763dae85f5.zip | |
Merge pull request #4121 from E7-87-83/newt
improvements on my code
Diffstat (limited to 'challenge-113')
| -rw-r--r-- | challenge-113/cheok-yin-fung/perl/ch-1.pl | 14 | ||||
| -rw-r--r-- | challenge-113/cheok-yin-fung/perl/ch-2.pl | 99 |
2 files changed, 89 insertions, 24 deletions
diff --git a/challenge-113/cheok-yin-fung/perl/ch-1.pl b/challenge-113/cheok-yin-fung/perl/ch-1.pl index 6197890686..b037a62544 100644 --- a/challenge-113/cheok-yin-fung/perl/ch-1.pl +++ b/challenge-113/cheok-yin-fung/perl/ch-1.pl @@ -34,21 +34,11 @@ sub representable { return 0 if $D == 2 || $D == 5; if ($D == 4 && $N > 10) { - if ($N % 2 == 0) { - return 1; - } - else { - return 0; - } + return $N % 2 == 0 ? 1 : 0; } if ($D == 8 && $N >= 40) { - if ($N % 2 == 0) { - return 1; - } - else { - return 0; - } + return $N % 2 == 0 ? 1 : 0; } if ($D == 6) { diff --git a/challenge-113/cheok-yin-fung/perl/ch-2.pl b/challenge-113/cheok-yin-fung/perl/ch-2.pl index d371237f53..584c9db0ab 100644 --- a/challenge-113/cheok-yin-fung/perl/ch-2.pl +++ b/challenge-113/cheok-yin-fung/perl/ch-2.pl @@ -20,18 +20,23 @@ FOO my @tree = map { $_ eq 'x' ? undef : $_ } @ARGV; -my $sum = 0; -for (@tree) { - $sum += $_ if defined($_); -} +sub recreate { + my $sum = 0; + my @t = @_; + for (@t) { + $sum += $_ if defined($_); + } -for (@tree) { - $_ = $sum - $_ if defined($_); + for (@t) { + $_ = $sum - $_ if defined($_); + } + return \@t; } -print_tree(@tree); -print_pretty_tree(@tree); +print " ---- Output(s) ---- \n"; +print_tree(recreate @tree); +print_pretty_tree(recreate @tree); sub consistency { @@ -51,8 +56,8 @@ sub consistency { } sub print_tree { - print "Output in Array Format:\n"; - for my $v (@_) { + print "in Array Format:\n"; + for my $v (@{$_[0]}) { if (defined($v)) { print $v, " "; } @@ -65,14 +70,14 @@ sub print_tree { sub print_pretty_tree { - my @tr = @_; + my @tr = @{$_[0]}; my $hash_tree = tree_build( \@tr, 0); $Data::Dumper::Terse = 1; $Data::Dumper::Indent = 2; $Data::Dumper::Sortkeys = 1; print "\n"; - print "Output in Hash Format:\n"; + print "in Hash Format:\n"; print Dumper $hash_tree; } @@ -84,3 +89,73 @@ sub tree_build { # use for print_pretty_tree $leaf{"r"} = tree_build(\@t, $ind*2+2) if defined($t[$ind*2+2]); return \%leaf; } + + +# ================== examples of hash trees ========================= + +my $testtree = { + "v" => 1, + "l" => { + "v" => 2, + "l" => { + "v" => "4", + "r" => { "v" => 7} + }, + }, + "r" => { + "v" => 3, + "l" => {"v" => 5}, + "r" => {"v" => 6}, + } + }; + +my $smalltree = { "v" => 1, "l" => {"v" =>2, "l"=> {"v"=> 17}}, "r" => { + "v"=>3, + "l"=>{"v"=>4}, + "r"=>{"v"=>5} + } }; + +my $chain = {"v"=>1, "l"=>{"v"=>3, "l"=>{"v"=>5, "l"=>{"v"=>7}}}}; + +# ===================================================== + +sub hash_tree_to_flat_array { + my $h_tree = $_[0]; # a hash + my @t = ($$h_tree{"v"}); + + my $tree_walker_id = 0; + my $tree_walker; + my $p; + my @vector_p = ($h_tree); + + # Breath-First Build of the array format from hash format + while (scalar @vector_p != 0) { + $tree_walker = shift @vector_p; + + if (defined($$tree_walker{"l"})) { + push @vector_p, $$tree_walker{"l"} ; + push @t, $$tree_walker{"l"}->{"v"}; + } + else { + push @t, undef; + } + + if (defined($$tree_walker{"r"})) { + push @vector_p, $$tree_walker{"r"}; + push @t, $$tree_walker{"r"}->{"v"}; + } + else { + push @t, undef; + } + } + return \@t; +} + +print "\n" x 5; +print "hash tree demo\n"; +print "---- Input ----\n"; +print_tree(hash_tree_to_flat_array $smalltree); +print_pretty_tree(hash_tree_to_flat_array $smalltree); +print "---- Output ----\n"; +print_tree(recreate @{ hash_tree_to_flat_array $smalltree }); +print_pretty_tree(recreate @{ hash_tree_to_flat_array $smalltree } ); |
