Skip to content

Commit

Permalink
Challenge-059 solutions by saiftynet
Browse files Browse the repository at this point in the history
  • Loading branch information
saiftynet committed May 7, 2020
1 parent 8aec513 commit 9859892
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
31 changes: 31 additions & 0 deletions challenge-059/saiftynet/perl/ch-1.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/env/perl
# Task 1 Challenge 059 Solution by saiftynet

# Linked List: PWC 059
# k = 3# Expected Output: 1 → 2 → 2 → 4 → 3 → 5.
# given a "linked list" partition about a number, but retain
# relative order of other numbers

my @l=qw/1 4 3 2 5 2/;

print join "->",partition(3);

sub partition{

# get the pivot and list
my ($k,@list)=@_;

# prepare anonymnous lists containing equal, after and before numbers
my @seq=([],[],[]);

# <=> return -1 if less (before), 0 if equal (pivot) and 1 of greater (after);
# use this result as an index to push the numbers into one of these lists
foreach my $t (@l){
push @{$seq[$t<=>$k]},$t
};

# return partitioned data
return @{$seq[-1]},@{$seq[0]},@{$seq[1]};

}

26 changes: 26 additions & 0 deletions challenge-059/saiftynet/perl/ch-2.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/env/perl
# Task 2 Challenge 059 Solution by saiftynet
# -1

# Bitsum- sum of bits that are different. This is effectively and xor
# operation, followed by count of the bits that are 1. One can convert
# the yiled of the xor operation into a binar string (e.g. using
# sprintf "%b"), and counting the ones. Getting the list context yield
# of a match operation, the reading that in scalar context gives us what
# we want. A for loop that gets all possible pairs gives us a bit sum
# of a list of numbers

print bitsum(2,3,4);
sub bitsum{
my @list=@_;
my $sum=0; # accumulator
foreach my $m (0..@list-2){ # usual 2 fors to get
foreach my $n ($m+1..$#list){ # all combinations
$sum += # get scalar
()= # cast intoa array
(sprintf "%b", $list[$m]^$list[$n])# covert to binary
=~m/1/g; # get matches
}
}
return $sum;
}

0 comments on commit 9859892

Please sign in to comment.