in reply to Challenge: Perl 5: lazy sameFringe()?
This is my solution. As I said above, I think it is less elegant than others published above, but I follow Roboticus's recommendation to publish it nonetheless.
#!/usr/bin/perl use strict; use warnings; my $tree1 = [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]]; my $tree2 = [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]]; my $tree3 = [1, [2, [4, [7]], [5]], [3, [6, [9], [8]]]]; my $next_el1 = create_iterator($tree1); my $next_el2 = create_iterator($tree3); my $match = 1; while (1) { my $left = $next_el1->(); my $right = $next_el2->(); no warnings 'uninitialized'; print $left, " ", $right, "\n"; unless ($left eq $right) {$match = 0 ; last} ; last unless defined $left; } if ($match) { print "The trees match \n"; } else { print "The trees don't match \n"; } sub create_iterator { my $ref = shift; my @ref_list; return sub { while (ref $ref eq 'ARRAY') { push @ref_list, @$ref; $ref = shift @ref_list; } my $leaf = $ref; $ref = shift @ref_list; return $leaf; } }
Results comparing tree1 and tree3:
$ perl fringe.pl 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 9 the trees don't match
And comparing tree1 and tree2:
$ perl fringe.pl 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 The trees match
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Challenge: Perl 5: lazy sameFringe()?
by Laurent_R (Canon) on Jul 01, 2013 at 09:41 UTC | |
|
Re^2: Challenge: Perl 5: lazy sameFringe()?
by BrowserUk (Patriarch) on Jul 01, 2013 at 05:22 UTC |