diff options
| -rw-r--r-- | challenge-094/james-smith/perl/LL.pm | 24 | ||||
| -rw-r--r-- | challenge-094/james-smith/perl/Tree.pm | 14 | ||||
| -rw-r--r-- | challenge-094/james-smith/perl/ch-2.pl | 1 |
3 files changed, 38 insertions, 1 deletions
diff --git a/challenge-094/james-smith/perl/LL.pm b/challenge-094/james-smith/perl/LL.pm new file mode 100644 index 0000000000..fa6e26fd62 --- /dev/null +++ b/challenge-094/james-smith/perl/LL.pm @@ -0,0 +1,24 @@ +package LL; + +sub new { + my $class = shift; + my $self = { 'val' => shift, 'next' => undef }; + $self->{'last'} = $self; + bless $self, $class; +} + +sub add { + my( $self, $val ) =@_; + my $new = LL->new( $val ); + $self->{'last'}{'next'} = $new; + $self->{'last'} = $new; + return $self; +} + +sub flatten { + my $self = shift; + return $self->{'val'} unless $self->{'next'}; + return ( $self->{'val'}, $self->{'next'}->flatten ); +} + +1; diff --git a/challenge-094/james-smith/perl/Tree.pm b/challenge-094/james-smith/perl/Tree.pm index 76a6e6a917..a84c759388 100644 --- a/challenge-094/james-smith/perl/Tree.pm +++ b/challenge-094/james-smith/perl/Tree.pm @@ -1,5 +1,5 @@ package Tree; - +use LL; sub new { my $class = shift; my $value = shift; @@ -13,6 +13,18 @@ sub add_child { return $self; } +sub to_ll { + my( $self, $ll ) = @_; + my ($v,@sub) = @{$self}; + unless( $ll ) { + $ll = LL->new( $v ); + } else { + $ll->add( $v ); + } + $_->to_ll($ll) foreach @sub; + return $ll; +} + sub flatten { my $self = shift; my ($v,@sub) = @{$self}; diff --git a/challenge-094/james-smith/perl/ch-2.pl b/challenge-094/james-smith/perl/ch-2.pl index 66f3b0e821..d5743f6ef5 100644 --- a/challenge-094/james-smith/perl/ch-2.pl +++ b/challenge-094/james-smith/perl/ch-2.pl @@ -22,6 +22,7 @@ my $x = Tree->new(1)->add_child( Tree->new(3) ); is( (join ' -> ', $x->flatten ), '1 -> 2 -> 4 -> 5 -> 6 -> 7 -> 3' ); +is( (join ' -> ', $x->to_ll->flatten ), '1 -> 2 -> 4 -> 5 -> 6 -> 7 -> 3' ); done_testing(); |
