Hi,
I'm trying to generate all the possible DNA sequences that fall between two defined lengths.
The code below works but is not very extensible. I could keep adding loops for
each additional base and as the maximum length that I'm interested in is around
10 bases its quite doable, but its not very efficient programing. It should
be possible to do this with dynamic references or something but I don't really
know where to start. Can anyone give me some clues?
Thanks
my @Bases = qw(A C G T); my $SequenceMinLenght = 1; my $SequenceMaxLength = 3; my @SequenceLenghts = ($SequenceMinLenght...$SequenceMaxLength); #print "@SequenceLenghts\n"; my $SequenceListLength = $#SequenceLenghts; $SequenceListLength ++; print "Number of Sequence lenghts to permute is $SequenceListLength\n" +; my @allSequence = (); my $sequence; my $currLenght; foreach $currLenght (@SequenceLenghts){ foreach my $base1 (@Bases) { if ($currLenght == 1){ $sequence = $base1; push (@allSequence, $sequence); } else{ foreach my $base2 (@Bases) { if ($currLenght == 2){ $sequence = $base1 . $base2; push (@allSequence, $sequence); } else{ foreach my $base3 (@Bases) { if ($currLenght == 3){ $sequence = $base1 . $base2. $base3; push (@allSequence, $sequence); } } } } } } } #Prints sequences to screen #- Too many entries after lenght of sequence is grater than 4. my $i=0; foreach my $finalsequence (@allSequence){ $i ++; if ($i == 4){ print "$finalsequence\n"; $i= 0; } else{ print "$finalsequence\t"; } }
In reply to Generate all possibilities by lostcause
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |