aboutsummaryrefslogtreecommitdiff
path: root/challenge-113
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-23 16:52:53 +0100
committerGitHub <noreply@github.com>2021-05-23 16:52:53 +0100
commitbc39d8a1516079ad1492e16b3be7e0763dae85f5 (patch)
treea7b353d39c953b346dc578ac565ab097c2de7c21 /challenge-113
parent41df7d51c6f6e10d0c0f8071c6148c8aed783a1f (diff)
parent1bb09b70ffaeff89f4eac1c140c51c3e62a3a12b (diff)
downloadperlweeklychallenge-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.pl14
-rw-r--r--challenge-113/cheok-yin-fung/perl/ch-2.pl99
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 } );