From 2323c1492e963ad594656dbddbe0547926157e0b Mon Sep 17 00:00:00 2001 From: Sangeet Kar Date: Sat, 9 May 2020 15:42:59 +0200 Subject: Don't have to convert to binary for xor --- challenge-059/sangeet-kar/perl/ch-2.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'challenge-059') diff --git a/challenge-059/sangeet-kar/perl/ch-2.pl b/challenge-059/sangeet-kar/perl/ch-2.pl index 44af4aa8aa..9c91581d41 100644 --- a/challenge-059/sangeet-kar/perl/ch-2.pl +++ b/challenge-059/sangeet-kar/perl/ch-2.pl @@ -6,7 +6,7 @@ use Algorithm::Combinatorics qw(combinations); sub helper { my ( $a, $b ) = @_; - sum( split //, sprintf( "%b", $a ) ^ sprintf( "%b", $b ) ); + sum( split //, sprintf ("%b", $a ^ $b )); } sub bitsum { -- cgit From 30488068c99b7dfffd98eb9f57419a8a73d6ac15 Mon Sep 17 00:00:00 2001 From: Sangeet Kar Date: Sat, 9 May 2020 16:33:08 +0200 Subject: merging Listy module and ch-1.pl --- challenge-059/sangeet-kar/perl/ch-1.pl | 76 ++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 18 deletions(-) (limited to 'challenge-059') diff --git a/challenge-059/sangeet-kar/perl/ch-1.pl b/challenge-059/sangeet-kar/perl/ch-1.pl index 31586ff9ec..f6154d9d92 100644 --- a/challenge-059/sangeet-kar/perl/ch-1.pl +++ b/challenge-059/sangeet-kar/perl/ch-1.pl @@ -1,47 +1,87 @@ use strict; use warnings; -use File::Basename; -use lib dirname (__FILE__); use experimental qw(signatures); -use Listy; +#List node class +package Node; -sub find_parent ($lst, $node, $start_node=undef) { - $start_node //= $lst->{head}; +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}; + } + } +} + +sub parent_of_node ($self, $node, $start_node=undef) { + $start_node //= $self->{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; +sub rotate_right_to_left ($self, $i, $j) { + my $parent_i = $self->parent_of_node($i); + my $parent_j = $self->parent_of_node($j, $i); $parent_j->{next_node} = $j->{next_node}; - $lst->{last1} = $parent_j if $j == $lst->{last1}; + $self->{last1} = $parent_j if $j == $self->{last1}; $j->{next_node} = $i; if ($parent_i == $i) { - $lst->{head} = $j; + $self->{head} = $j; } else { $parent_i->{next_node} = $j; } } -sub partition_list { - my ($lst, $k) = @_; - my $i = $lst->{head}; +sub partition ($self, $k) { + my $i = $self->{head}; $i = $i->{next_node} if defined $i && $i->{val} < $k; - return $lst unless defined $i; + return 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); + return unless defined $j; + $self->rotate_right_to_left($i, $j); } } -my $lst = Listy->new ([1, 4, 3, 2, 5, 2]); -partition_list ($lst, 3) -> print_list; +__END__ + +my $list = Listy->new ([1, 4, 3, 2, 5, 2]); +$list->partition(3); +$list->print_list; \ No newline at end of file -- cgit From 6ad44625ea85dd6518009363db2b79aa78fe8bea Mon Sep 17 00:00:00 2001 From: Sangeet Kar Date: Sun, 10 May 2020 00:41:48 +0200 Subject: merging Listy & ch-1.pl --- challenge-059/sangeet-kar/perl/ch-1.pl | 2 -- 1 file changed, 2 deletions(-) (limited to 'challenge-059') diff --git a/challenge-059/sangeet-kar/perl/ch-1.pl b/challenge-059/sangeet-kar/perl/ch-1.pl index f6154d9d92..953b6c3ac0 100644 --- a/challenge-059/sangeet-kar/perl/ch-1.pl +++ b/challenge-059/sangeet-kar/perl/ch-1.pl @@ -80,8 +80,6 @@ sub partition ($self, $k) { } } -__END__ - my $list = Listy->new ([1, 4, 3, 2, 5, 2]); $list->partition(3); $list->print_list; \ No newline at end of file -- cgit From d74274cbf19cb4552b7d42f88baa0e7183fa6f52 Mon Sep 17 00:00:00 2001 From: Sangeet Kar Date: Sun, 10 May 2020 00:44:47 +0200 Subject: deleting Listy after merging Listy and ch-1.pl --- challenge-059/sangeet-kar/perl/Listy.pm | 47 --------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 challenge-059/sangeet-kar/perl/Listy.pm (limited to 'challenge-059') diff --git a/challenge-059/sangeet-kar/perl/Listy.pm b/challenge-059/sangeet-kar/perl/Listy.pm deleted file mode 100644 index eeb08c4d61..0000000000 --- a/challenge-059/sangeet-kar/perl/Listy.pm +++ /dev/null @@ -1,47 +0,0 @@ -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 -- cgit From 9bf01355ebb5004e741147b3917ab271aaf7a9bf Mon Sep 17 00:00:00 2001 From: Sangeet Kar Date: Sun, 10 May 2020 00:48:49 +0200 Subject: changed function name to shift_right_rotate --- challenge-059/sangeet-kar/perl/ch-1.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'challenge-059') diff --git a/challenge-059/sangeet-kar/perl/ch-1.pl b/challenge-059/sangeet-kar/perl/ch-1.pl index 953b6c3ac0..2083625860 100644 --- a/challenge-059/sangeet-kar/perl/ch-1.pl +++ b/challenge-059/sangeet-kar/perl/ch-1.pl @@ -52,7 +52,7 @@ sub parent_of_node ($self, $node, $start_node=undef) { return $start_node; } -sub rotate_right_to_left ($self, $i, $j) { +sub shift_right_rotate ($self, $i, $j) { my $parent_i = $self->parent_of_node($i); my $parent_j = $self->parent_of_node($j, $i); @@ -76,7 +76,7 @@ sub partition ($self, $k) { my $j = $i->{next_node}; $j = $j->{next_node} while defined $j && $j->{val} >= $k; return unless defined $j; - $self->rotate_right_to_left($i, $j); + $self->shift_right_rotate($i, $j); } } -- cgit