iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
AI & Data

Rosalind 生物資訊解題系統系列 第 29

Day29 | Rosalind 生資解題 - 017. MRNA(Inferring mRNA from Protein)

  • 分享至 

  • xImage
  •  

Day29 | Rosalind 生資解題 - 017. MRNA(Inferring mRNA from Protein)

題目連結:https://rosalind.info/problems/mrna/

https://ithelp.ithome.com.tw/upload/images/20251010/20125192zR8pP9Sds8.png

今天這題,也要繞個彎想一下才能看懂題目在問的內容

輸入:

MA

輸出:

12

前面在 008. PROT(Translating RNA into Protein) 時提過

蛋白質是胺基酸鏈(amino acid chain, aas)
胺基酸鏈是由密碼子(codon)序列組成,一個密碼子就是三個核甘酸(A、U、C、G)順帶一提,因為是mRNA,不會有T,T只會在DNA上出現

我們知道每個蛋白質會對應到一種字母縮寫
https://ithelp.ithome.com.tw/upload/images/20251010/20125192n5X6MUMwSV.png

也知道密碼子表長這樣,仔細看能發現
一種蛋白質可以對應到多個(1~6)密碼子序列

https://ithelp.ithome.com.tw/upload/images/20251010/20125192XiEjmYMNWg.png

這題題目問的是,
如果給一段蛋白質的縮寫序列,求這段序列可以有幾種排列組合?
也就是,有多少種 codons 能產生相同的胺基酸鏈?

哦,因為一種胺基酸對應到mRNA序列(AUCG)可能有2種寫法、或者4種寫法,將每一個 胺基酸 x 胺基酸 乘在一起,就會產生排列組合數目
但同時,當序列非常大的時候,可以想像組合會膨脹很快、數字大的非常誇張...

題目最多只會給最多1000個aa.
然後要我們取 modulo 1,000,000(取餘數,mod 一百萬)

所以,首先要做的事情
我們必須將每一種蛋白質有幾種排列組合先列一張表出來,
才可以做後面排列組合的乘法計算

一字母代碼 三字母代碼 英文名稱 (Amino Acid) 可用密碼子數 (# of Codons)
A Ala Alanine 4
C Cys Cysteine 2
D Asp Aspartic acid 2
E Glu Glutamic acid 2
F Phe Phenylalanine 2
G Gly Glycine 4
H His Histidine 2
I Ile Isoleucine 3
K Lys Lysine 2
L Leu Leucine 6
M Met Methionine 1
N Asn Asparagine 2
P Pro Proline 4
Q Gln Glutamine 2
R Arg Arginine 6
S Ser Serine 6
T Thr Threonine 4
V Val Valine 4
W Trp Tryptophan 1
Y Tyr Tyrosine 2

轉換成程式碼如下

codon_count = {
    'A': 4, 'C': 2, 'D': 2, 'E': 2, 'F': 2, 'G': 4,
    'H': 2, 'I': 3, 'K': 2, 'L': 6, 'M': 1, 'N': 2,
    'P': 4, 'Q': 2, 'R': 6, 'S': 6, 'T': 4, 'V': 4,
    'W': 1, 'Y': 2
}

其中,原文還提到一點:

Don't neglect the importance of the stop codon in protein translation.

不要忽視stop codon的重要性,雖然正常來說他不會轉譯出胺基酸
stop codon代表「蛋白質翻譯終點」的結束訊號,總是在一段mRNA的最尾端才會出現,所以也要考量進去
因為總共有三種stop codon(UAA、UAG、UGA)!所以要乘以3

程式碼

aas = "MA"
MOD = 1000000 # 或者也可寫成這樣 `1_000_000` 提高位數辨識度
codon_count = {
    'A': 4, 'C': 2, 'D': 2, 'E': 2, 'F': 2, 'G': 4,
    'H': 2, 'I': 3, 'K': 2, 'L': 6, 'M': 1, 'N': 2,
    'P': 4, 'Q': 2, 'R': 6, 'S': 6, 'T': 4, 'V': 4,
    'W': 1, 'Y': 2
}

ans = 1 # 排列組合初始為1

for aa in aas:
    ans = (ans * codon_count[aa]) % MOD # 每一次乘法乘完就取mod,能夠加速下次運算(讓運算量不會太大)

# 乘上stop codon的3種選項
ans = (ans * 3) % MOD

print(ans)

最後不要忘記將答案*3,再取mod(因為有可能超過100萬)

完工!


上一篇
Day28 | Rosalind 生資解題 - 016. MPRT(Finding a Protein Motif)
下一篇
Day30 | Rosalind 生資解題 - 018. ORF(Open Reading Frames)開放閱讀框
系列文
Rosalind 生物資訊解題系統30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言