diff options
| author | Ysmael Ebreo <Ysmael.Ebreo@latticesemi.com> | 2020-05-09 17:14:25 +0800 |
|---|---|---|
| committer | Ysmael Ebreo <Ysmael.Ebreo@latticesemi.com> | 2020-05-09 17:14:25 +0800 |
| commit | 630651fe3212957d6d8680bdcbb2a886b8e91bc0 (patch) | |
| tree | d19b942181943d5b8c523dcbbfd48d85e04e26e2 /challenge-059 | |
| parent | c5b86b971ca7acc2de8996bae5f308107122cab7 (diff) | |
| download | perlweeklychallenge-club-630651fe3212957d6d8680bdcbb2a886b8e91bc0.tar.gz perlweeklychallenge-club-630651fe3212957d6d8680bdcbb2a886b8e91bc0.tar.bz2 perlweeklychallenge-club-630651fe3212957d6d8680bdcbb2a886b8e91bc0.zip | |
Add perl solution ch#59-1
Diffstat (limited to 'challenge-059')
| -rw-r--r-- | challenge-059/yet-ebreo/perl/ch-1.pl | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/challenge-059/yet-ebreo/perl/ch-1.pl b/challenge-059/yet-ebreo/perl/ch-1.pl new file mode 100644 index 0000000000..37a061d69f --- /dev/null +++ b/challenge-059/yet-ebreo/perl/ch-1.pl @@ -0,0 +1,100 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature 'say'; + +my @arr = ( 1, 4, 3, 2, 5, 2 ); +my $k = 3; +my $link = new LinkedList; + +#Add items in linked list +for my $i (@arr) { + $link->add($i); +} + +#Declare two linked list for partitions +my $uplink = new LinkedList; +my $dnlink = new LinkedList; + +#Print original list +say "Original List:"; +while ($link->iter) { + my $i = $link->value; + if ($i >= $k) { + $uplink->add($i) + } else { + $dnlink->add($i); + } + print $i; + print " -> " if $link->next +} + +#Join dnlink and uplink +$dnlink->join($uplink); + + +#Print final re-ordered list +say "\n\nPartitioned List:"; +while ($dnlink->iter) { + my $i = $dnlink->value; + print $i; + print " -> " if $dnlink->next +} + + +package LinkedList; +my $iter_item; +sub new { + my $class = shift; + my $self = { + value => shift, + next => undef, + + }; + + return bless $self, $class; +} +sub add { + my ($self,$val) = @_; + my $curr = $self->last; + + $curr->{value} = $val; + $curr->{next} = undef; +} +sub last { + my $self = shift; + my $curr = $self; + while (defined $curr->{value}) { + $curr = \%{$curr->{next}}; + } + return $curr; +} +sub value { + my $self = shift; + $iter_item = $self if (!$iter_item); + return $iter_item->{value}; +} +sub next { + return $iter_item->{next}; +} +sub iter { + my ($self, $join_mode) = @_; + + if (!$iter_item) { + $iter_item = $self; + } else { + if ($iter_item->{next}) { + $iter_item = \%{$iter_item->{next}}; + } else { + $iter_item = undef; + } + } +} +sub join { + my ($self,$val) = @_; + while ($val->iter) { + my $i = $val->value; + $self->add($i) + } +} +1;
\ No newline at end of file |
