Bioinformatics/Subsequence: Difference between revisions

Add Factor
m (elided "elements" from the preamble.)
(Add Factor)
Line 5:
Write a routine to find all the positions of a randomly generated subsequence   (four letters).
<br><br>
 
=={{header|Factor}}==
{{works with|Factor|0.99 2021-02-05}}
<lang factor>USING: accessors formatting grouping io kernel math
math.functions.integer-logs math.parser random regexp sequences ;
 
: new-dna ( n -- str ) [ "ACGT" random ] "" replicate-as ;
 
: pad ( n d -- str ) [ number>string ] dip 32 pad-head ;
 
:: .dna ( seq n -- )
seq length integer-log10 1 + :> d seq n group
[ n * d pad write ": " write write nl ] each-index ;
 
: .match ( slice -- ) [ from>> ] [ to>> ] bi "%d..%d\n" printf ;
 
: .matches ( slices -- )
"Matches found at the following indices:" print
[ .match ] each ;
 
: .locate ( slices -- )
[ "No matches found." print ] [ .matches ] if-empty ;
 
: .biosub ( dna-size row-size -- )
[ new-dna dup ] [ .dna nl ] bi*
4 new-dna dup "Subsequence to locate: %s\n" printf
<regexp> all-matching-slices .locate ;
 
80 10 .biosub nl
600 39 .biosub nl</lang>
{{out}}
<pre>
0: ATTCAAGGAC
10: CACTATTAAC
20: CTGCATTGTG
30: AGAACTTGCA
40: GTGTACCGAG
50: AGCGAGTTTA
60: AAGCAACACA
70: TCTTTACCGA
 
Subsequence to locate: GTAG
No matches found.
 
0: GATCTCGTCATGGTCCATCCTAACATTTCGGTTGTGGGC
39: GCATCCCGATAGGCGAAGTTAAATCTACGTAGTCCTACG
78: TCACGACGGAACATGATTGCCCACCGAAGTCGTAGGCGA
117: GCTAAAGTCGGTACATACACGATCTGCTATATTCGTTCT
156: CCGACACACGACATGCAATCCGAGAAGCTCTCGAAGTGC
195: GGTCAGATCCTCAGACTCGAACAGAGGAGACCTTAACTG
234: ATACCCACAGTACTTCTCGCATAACCTAAGCACCTATGC
273: TTACACCATCGTCCTGATATTGAGTGAGTCTGGTCGGAG
312: ATATTATCTAGCACCCTCAAGCTCTGTGTGCCACACCAG
351: GATTCCACTTCGCGCTTGCCTAGAGAAAGTAGAGTAGGT
390: GGTGTCATTAGTACACTGTTTGCGATGCACCAACCAAAC
429: CCGACCGCCATGATGACTGCTTTTCGGCCAACGTCAGAT
468: TAAGAGTACTTTTAGTAGCACCGCAAGCCAGCCGGTTTA
507: GCAAGATCCTGCAGCCTCCACGTTATTTCAGGTCTCTAA
546: GCGTTCTTTCCATGGAAGTAGTCACCGCTCCCGTTGCCA
585: ATGGACACAGACGTT
 
Subsequence to locate: ATAT
Matches found at the following indices:
145..149
289..293
312..316
</pre>
 
=={{header|Raku}}==
1,827

edits