forked from manwar/perlweeklychallenge-club
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Challenge-059 solutions by saiftynet
- Loading branch information
Showing
2 changed files
with
57 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]}; | ||
|
||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |