Bioinformatics/Subsequence: Difference between revisions

Content added Content deleted
(→‎{{header|Raku}}: Add a Raku example)
(Added Wren)
Line 118: Line 118:
start position of subsequence = 103
start position of subsequence = 103
start position of subsequence = 116
start position of subsequence = 116
</pre>

=={{header|Wren}}==
{{libheader|Wren-pattern}}
{{libheader|Wren-str}}
{{libheader|Wren-fmt}}
<lang ecmascript>import "random" for Random
import "/pattern" for Pattern
import "/str" for Str
import "/fmt" for Fmt

var rand = Random.new()
var base = "ACGT"

var findDnaSubsequence = Fn.new { |dnaSize, chunkSize|
var dnaSeq = List.filled(dnaSize, null)
for (i in 0...dnaSize) dnaSeq[i] = base[rand.int(4)]
var dnaStr = dnaSeq.join()
var dnaSubseq = List.filled(4, null)
for (i in 0...4) dnaSubseq[i] = base[rand.int(4)]
var dnaSubstr = dnaSubseq.join()
System.print("DNA sequence:")
var i = chunkSize
for (chunk in Str.chunks(dnaStr, chunkSize)) {
Fmt.print("$3d..$3d: $s", i - chunkSize + 1, i, chunk)
i = i + chunkSize
}
System.print("\nSubsequence to locate: %(dnaSubstr)")
var p = Pattern.new(dnaSubstr)
var matches = p.findAll(dnaStr)
if (matches.count == 0) {
System.print("No matches found.")
} else {
System.print("Matches found at the following indices:")
for (m in matches) {
Fmt.print("$3d..$3d", m.index + 1, m.index + 4)
}
}
}

findDnaSubsequence.call(200, 20)
System.print()
findDnaSubsequence.call(600, 40)</lang>

{{out}}
<pre>
DNA sequence:
1.. 20: TATGGGCGCATTATGACAAC
21.. 40: GGCTACTGAAACGAAAATTC
41.. 60: ATGCCTTCGGAGGCTAGACC
61.. 80: ACTCATACATGATTTACAGC
81..100: TAGTCAGTTGCGTCCGCCAT
101..120: CCCGCATAACTATGTATTAC
121..140: GAGCATGTTCTGGCAACCTT
141..160: TCAGTGACAGTTCCTCAGGC
161..180: GCGTTCGCGTTGAAGGCCTC
181..200: CCCACACCGCACCCCTGCCG

Subsequence to locate: AATT
Matches found at the following indices:
36.. 39

DNA sequence:
1.. 40: GCGCTGAGCGCCCCAGTACAGCGGGTTAAACCGAGCCCGC
41.. 80: TCCGATGAACCAACTCCCATTCCTATAATGGTGCCCCGAC
81..120: ATATTGAATTCGGCGGGTCCGCTATCGGGCTGAGGATGCC
121..160: AATATCTAGGCGCTACCCTGAAGATCCTCAGTTGTGGTGT
161..200: CGCGGAGTGTCGATCCCAGAGCTCCCAATTGACTCAATTA
201..240: CTTTTTCCGTCCTCTTGCTTACGGATTTATGTTTGTGGCA
241..280: GAGGTTATGCTTCAGGCATCCCCATGTTTCCTGAGATACG
281..320: ACCACTGTCAGGTGGCTTGAATCTACCTTGTATTTCCTCT
321..360: AGTACCAGTCACTGTCATCTACTGGAAGCCATATCAGCGT
361..400: TGAAATGTCTATAATTTACTCTCCGGTTGTACCCAAGCGA
401..440: TAACAGCAACGTGTGGGTCTAAAGAGTTCCGCGTTTCGAC
441..480: ATAACGTGCTCCTATTTATCTACCGAAACACCCTATTTTC
481..520: CATCTAACCGGCACCCAATGCGCAGGTGTACGCGTCCTAC
521..560: TACGTTTGAAACGGTTCCATCTCGCCATGTACAATTGTGG
561..600: GGCTACGATTAAGTGTAGTCGGTAATTCAGGGTGAAGTTG

Subsequence to locate: TTCG
Matches found at the following indices:
89.. 92
435..438
</pre>
</pre>