Hello all,
I need a bit of help implementing a circular list or perhaps a circular iteration( whichever can get the job done)
What is required
For a given peptide string , find all the possible sub-peptides including single amino acids and print their masses.
For example's sake let's say A = 1, B = 2, C = 3, D = 4
eg
Input: A cyclic peptide :
ABCD
Output
A B C D AB BC CD DA ABC BCD CDA DABC
1 2 3 4 3 5 7 5 6 9 8 10
I initially tried implementing a simple substr
based approach. The pseudocode is as under. So it is untested:
my $i =0;
my $j = 1;
my %peptide;
my $len = length $_; # $_ being the input peptide string
while( $i <= $len-1 ) {
my $mass = 0;
while( $j <= $len-1 ){
my $substr = substr $_, $i, $j if ( $i != $len -1 && $j < $len-1 )
my $amino_acid_mass = subMass ($substr) ;
my $mass += $amino_acid_mass;
push @{$peptide{$mass}}, $substr ; # because multiple sub-peptides can have same mass
$j++;
#To perform a very poor version of circular iteration
#if at last element 'N' , take out that element + add it to first 'N-2' elements
if( $j == $len-1 && $i == $len ){
my $substr_L = substr $_, $i, 1;# last 1 element
my $substr_F = substr $_, 0, $j-2 #first 2 elements
my $string = $substr_L.$substr_F # append
#Extract mass and add to the %peptide hash
}
}
$i++;
}
Clearly this isn't the most elegant nor a fully working idea. It would break easily at peptide length > 3 ( 0,1,2,3). Furthermore, even the subroutine will break quickly as I realized later that a variable length $substr
would be its input.
So I thought perhaps I should implement an array. I searched on how to implement a circular array. This is what I came up with after finding a bit of hint in the Perl Cookbook online... :
my @arr = qw/A B C D/;
my $i = 0;
while($i <= $#arr ){
unshift(@arr, pop(@arr) );
say "@arr";
my $y = 0;
my $z = 1;
foreach (@arr){
say "Element : $_";
say "2 elements: $arr[$y]$arr[$z] " if exists $arr[$z];
$y++;
$z++;
}
$i++;
}
But really I am stuck now and just cannot figure out what to do next or how to proceed further. I would be really grateful for any help or guidance.
This looks like one of the assignments from Bioinformatics Algorithms on coursera
It does...I want to get better at programming. I am stuck in this...
Right now I am just thinking of working on the assignments ;)
Yes !! And we may get many questions here from Coursera Assignments !! ;)
Ah so long as one wants to improve!