Bioinformatics/Subsequence: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: removed match_all(), couple of bugfixes) |
|||
Line 174: | Line 174: | ||
21:24 74:77 99:102 |
21:24 74:77 99:102 |
||
</pre> |
</pre> |
||
=={{header|Nim}}== |
|||
<lang Nim>import random, sequtils, strutils |
|||
proc dnaSequence(n: Positive): string = |
|||
## Create a random DNA sequence of length "n". |
|||
newSeqWith(n, sample("ACGT")).join() |
|||
proc positions(dnaSeq, subSeq: string): seq[int] = |
|||
## Return the list of starting positions of a subsequence |
|||
## "subSeq" in a sequence "dnaSeq". Positions start at 1. |
|||
var start = 0 |
|||
while true: |
|||
let pos = dnaSeq.find(subSeq, start) |
|||
if pos < 0: break |
|||
result.add pos + 1 |
|||
start = pos + 1 |
|||
when isMainModule: |
|||
const |
|||
N = 200 |
|||
Step = 20 |
|||
randomize() |
|||
let dnaSeq = dnaSequence(N) |
|||
echo "DNA sequence:" |
|||
for i in countup(0, N - 1, Step): |
|||
echo ($(i+1)).align(3), ' ', dnaSeq[i..i+(Step-1)] |
|||
let subSeq = dnaSequence(3) |
|||
echo "\nDNA subsequence: ", subSeq |
|||
echo() |
|||
let pos = dnaSeq.positions(subSeq) |
|||
if pos.len == 0: |
|||
echo "Subsequence not found." |
|||
else: |
|||
let tail = if pos.len == 1: ": " else: "s: " |
|||
echo "Subsequence found at position", tail, pos.join(", ")</lang> |
|||
{{out}} |
|||
<pre>DNA sequence: |
|||
1 CACATACGATGAGCTGGGCG |
|||
21 CCTAAGAGGCGGAAAGACAA |
|||
41 CCGTGTGTGTCTAACCCATG |
|||
61 GTTTAATTGCAGATAGTCTC |
|||
81 TAGACTACAAACATTAGAGC |
|||
101 AATGCACCGGGGTGCACGTG |
|||
121 TGTTTTGACTTCCCATGAAA |
|||
141 GCCCTTATCCTAGAGTACAG |
|||
161 TCGGCAAATGTTCGCTCCTT |
|||
181 GGCCCACTCCATTTGGACGG |
|||
DNA subsequence: GTT |
|||
Subsequence found at positions: 61, 122, 170</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |