summaryrefslogtreecommitdiffstats
path: root/rosalind/dna.rs
blob: 7279c36926a43c6d309f1b3b24a6c1965ce234ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use str = core::str;

pure fn gc_content(dna: &str) -> float {
    let mut content = 0;
    for str::each_char(dna) |ch| {
        match ch {
            'C' | 'G' => content += 1,
            _         => (),
        }
    }
    (content as float) / (str::len(dna) as float)
}

pure fn complement(base: char) -> char {
    match base {
        'A' => 'T',
        'C' => 'G',
        'G' => 'C',
        'T' => 'A',
        _   => fail ~"Unknown character found",
    }
}

pure fn transcribe(base: char) -> char {
    match base {
        'T'             => 'U',
        'A' | 'C' | 'G' => base,
        _               => fail ~"Unknown character found",
    }
}