diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-05-08 12:51:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-08 12:51:46 +0100 |
| commit | 46e991a1ea1054329eadf4d95eac9be04c4c7800 (patch) | |
| tree | 1497ec6907c9613179d948ecafde23e47fe34d4c /challenge-059 | |
| parent | 3c50fe703dd17a6f2d945fe2e51ac40ef9d2c507 (diff) | |
| parent | f08bd246f0e8653d4eeb9a085ee1c9381e688b89 (diff) | |
| download | perlweeklychallenge-club-46e991a1ea1054329eadf4d95eac9be04c4c7800.tar.gz perlweeklychallenge-club-46e991a1ea1054329eadf4d95eac9be04c4c7800.tar.bz2 perlweeklychallenge-club-46e991a1ea1054329eadf4d95eac9be04c4c7800.zip | |
Merge pull request #1684 from sangeetkar/ch59
Added solution to the weekly challenge 059
Diffstat (limited to 'challenge-059')
| -rw-r--r-- | challenge-059/sangeet-kar/perl/Listy.pm | 47 | ||||
| -rw-r--r-- | challenge-059/sangeet-kar/perl/ch-1.pl | 47 | ||||
| -rw-r--r-- | challenge-059/sangeet-kar/perl/ch-2.pl | 16 |
3 files changed, 110 insertions, 0 deletions
diff --git a/challenge-059/sangeet-kar/perl/Listy.pm b/challenge-059/sangeet-kar/perl/Listy.pm new file mode 100644 index 0000000000..eeb08c4d61 --- /dev/null +++ b/challenge-059/sangeet-kar/perl/Listy.pm @@ -0,0 +1,47 @@ +use strict; +use warnings; +use experimental qw(signatures); + +#List node class +package Node; + +sub new ($class, $val, $next_node=undef) { + bless {val => $val, next_node => $next_node}, $class; +} + +#LinkedList class +package Listy; + +sub new ($class, $list) { + my $head = my $last = undef; + + for (@$list) { + my $node = Node->new ($_); + if (defined $last) { + $last->{next_node} = $node; + $last = $node; + } + else { + $head = $last = $node; + } + } + bless {head => $head, last1 => $last}, $class +} + +sub is_empty ($self) { + not defined $self->{head}; +} + +sub print_list ($self) { + if ($self->is_empty) { + print "empty"; + } + else { + for (my $i = $self->{head}; defined $i; $i = $i->{next_node}) { + print $i->{val}; + print "->" unless $i == $self->{last1}; + } + } +} + +1;
\ No newline at end of file diff --git a/challenge-059/sangeet-kar/perl/ch-1.pl b/challenge-059/sangeet-kar/perl/ch-1.pl new file mode 100644 index 0000000000..31586ff9ec --- /dev/null +++ b/challenge-059/sangeet-kar/perl/ch-1.pl @@ -0,0 +1,47 @@ +use strict; +use warnings; +use File::Basename; +use lib dirname (__FILE__); +use experimental qw(signatures); + +use Listy; + +sub find_parent ($lst, $node, $start_node=undef) { + $start_node //= $lst->{head}; + return $start_node if $start_node == $node; + + $start_node = $start_node->{next_node} while $start_node->{next_node} != $node; + return $start_node; +} + +sub shift_list ($lst, $i, $j) { + my $parent_i = find_parent $lst, $i; + my $parent_j = find_parent $lst, $j, $i; + + $parent_j->{next_node} = $j->{next_node}; + $lst->{last1} = $parent_j if $j == $lst->{last1}; + $j->{next_node} = $i; + if ($parent_i == $i) { + $lst->{head} = $j; + } + else { + $parent_i->{next_node} = $j; + } +} + +sub partition_list { + my ($lst, $k) = @_; + my $i = $lst->{head}; + $i = $i->{next_node} if defined $i && $i->{val} < $k; + return $lst unless defined $i; + + while (1) { + my $j = $i->{next_node}; + $j = $j->{next_node} while defined $j && $j->{val} >= $k; + return $lst unless defined $j; + shift_list($lst, $i, $j); + } +} + +my $lst = Listy->new ([1, 4, 3, 2, 5, 2]); +partition_list ($lst, 3) -> print_list; diff --git a/challenge-059/sangeet-kar/perl/ch-2.pl b/challenge-059/sangeet-kar/perl/ch-2.pl new file mode 100644 index 0000000000..44af4aa8aa --- /dev/null +++ b/challenge-059/sangeet-kar/perl/ch-2.pl @@ -0,0 +1,16 @@ +use 5.30.0; +use warnings; + +use List::Util qw(sum); +use Algorithm::Combinatorics qw(combinations); + +sub helper { + my ( $a, $b ) = @_; + sum( split //, sprintf( "%b", $a ) ^ sprintf( "%b", $b ) ); +} + +sub bitsum { + sum map {helper @$_} combinations \@ARGV, 2 +} + +print bitsum; |
