-
Notifications
You must be signed in to change notification settings - Fork 0
/
mrna.hs
36 lines (32 loc) · 1.8 KB
/
mrna.hs
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
31
32
33
34
35
36
-- This program is free software. It comes without any warranty, to
-- the extent permitted by applicable law. You can redistribute it
-- and/or modify it under the terms of the Do What The Fuck You Want
-- To Public License, Version 2, as published by Sam Hocevar. See
-- http://sam.zoy.org/wtfpl/COPYING for more details.
import Control.Applicative ((<$>), (<*>))
import Data.List (sort, group)
import Data.Maybe (catMaybes)
codons = [ ("UUU", 'F'), ("UUC", 'F'), ("UUA", 'L'), ("UUG", 'L')
, ("UCU", 'S'), ("UCC", 'S'), ("UCA", 'S'), ("UCG", 'S')
, ("UAU", 'Y'), ("UAC", 'Y'), ("UAA", ' '), ("UAG", ' ')
, ("UGU", 'C'), ("UGC", 'C'), ("UGA", ' '), ("UGG", 'W')
, ("CUU", 'L'), ("CUC", 'L'), ("CUA", 'L'), ("CUG", 'L')
, ("CCU", 'P'), ("CCC", 'P'), ("CCA", 'P'), ("CCG", 'P')
, ("CAU", 'H'), ("CAC", 'H'), ("CAA", 'Q'), ("CAG", 'Q')
, ("CGU", 'R'), ("CGC", 'R'), ("CGA", 'R'), ("CGG", 'R')
, ("AUU", 'I'), ("AUC", 'I'), ("AUA", 'I'), ("AUG", 'M')
, ("ACU", 'T'), ("ACC", 'T'), ("ACA", 'T'), ("ACG", 'T')
, ("AAU", 'N'), ("AAC", 'N'), ("AAA", 'K'), ("AAG", 'K')
, ("AGU", 'S'), ("AGC", 'S'), ("AGA", 'R'), ("AGG", 'R')
, ("GUU", 'V'), ("GUC", 'V'), ("GUA", 'V'), ("GUG", 'V')
, ("GCU", 'A'), ("GCC", 'A'), ("GCA", 'A'), ("GCG", 'A')
, ("GAU", 'D'), ("GAC", 'D'), ("GAA", 'E'), ("GAG", 'E')
, ("GGU", 'G'), ("GGC", 'G'), ("GGA", 'G'), ("GGG", 'G')
]
count :: (Ord a) => [a] -> [(a, Int)]
count = (map $ \xs -> (head xs, length xs)) . group . sort
main = do
protein <- readFile "mrna.txt"
let counts = count . snd $ unzip codons
let xs = (lookup ' ' counts) : map (\p -> lookup p counts) protein
print . (foldl (\x y -> (x * y) `mod` 1000000)) 1 . catMaybes $ xs