L'RNA , come il DNA, è una molecola presente nelle cellule che codificano le informazioni genetiche. È costituita da nucleotidi , che sono rappresentati dalle basi adenina (A), citosina (C), guanina (G) e uracile (U). * Un codone è una sequenza di tre nucleotidi.
Le proteine sono grandi molecole che svolgono una vasta gamma di funzioni, come la cheratina che si trova nei capelli e nelle unghie e nell'emoglobina che trasporta l'ossigeno nelle cellule del sangue. Sono costituiti da aminoacidi , codificati come codoni nelle molecole di RNA. A volte codoni diversi possono codificare per lo stesso aminoacido. Ogni amminoacido è comunemente rappresentato da una singola lettera, ad esempio H sta per istidina.
Data una sequenza di ACGU
, puoi tradurla nella corrispondente stringa proteica?
* Il DNA è costituito da ACGT, dove la T è timina. Durante la trascrizione da DNA a RNA, la timina viene sostituita dall'uracile.
Ingresso
L'input sarà una singola stringa composta solo da caratteri ACGU
maiuscoli. Puoi scrivere una funzione o un programma completo per questa sfida.
Produzione
È possibile scegliere di stampare tramite o stampando o restituendo una stringa (quest'ultima scelta è disponibile solo nel caso di una funzione).
La traduzione dovrebbe iniziare da un codone iniziale ( AUG
, rappresentato come M
) e terminare da un codone di arresto (uno di UAA
, UAG
o UGA
, rappresentato da *
). Esistono quattro casi in cui l'input potrebbe non essere valido:
- L'input non inizia con un codone iniziale
- L'ingresso non termina con un codone di arresto
- La lunghezza dell'input non è un multiplo di 3
- L'ingresso contiene un codone di arresto in un punto diverso da quello alla fine
In tutti questi casi, Error
dovrebbe essere emesso. Si noti che, a differenza dei codoni di arresto, i codoni di avvio potrebbero apparire dopo l'inizio della stringa.
Altrimenti, è necessario convertire ciascun codone nel rispettivo aminoacido tramite la seguente tabella di codoni RNA :
* UAA UAG UGA
A GCU GCC GCA GCG
C UGU UGC
D GAU GAC
E GAA GAG
F UUU UUC
G GGU GGC GGA GGG
H CAU CAC
I AUU AUC AUA
K AAA AAG
L UUA UUG CUU CUC CUA CUG
M AUG
N AAU AAC
P CCU CCC CCA CCG
Q CAA CAG
R CGU CGC CGA CGG AGA AGG
S UCU UCC UCA UCG AGU AGC
T ACU ACC ACA ACG
V GUU GUC GUA GUG
W UGG
Y UAU UAC
... e genera la stringa tradotta.
Esempi
Casi non validi:
<empty string> -> Error
AUG -> Error
UAA -> Error
AUGCUAG -> Error
AAAAAAA -> Error
GGGCACUAG -> Error
AUGAACGGA -> Error
AUGUAGUGA -> Error
AUGUUUGUUCCGUCGAAAUACCUAUGAACACGCUAA -> Error
Casi validi:
AUGUGA -> M*
AUGAGGUGUAGCUGA -> MRCS*
AUGGGUGAGAAUGAAACGAUUUGCAGUUAA -> MGENETICS*
AUGCCAGUCGCACGAUUAGUUCACACGCUCUUGUAA -> MPVARLVHTLL*
AUGCUGCGGUCCUCGCAUCUAGCGUUGUGGUUAGGGUGUGUAACUUCGAGAACAGUGAGUCCCGUACCAGGUAGCAUAAUGCGAGCAAUGUCGUACGAUUCAUAG -> MLRSSHLALWLGCVTSRTVSPVPGSIMRAMSYDS*
AUGAAAAACAAGAAUACAACCACGACUAGAAGCAGGAGUAUAAUCAUGAUUCAACACCAGCAUCCACCCCCGCCUCGACGCCGGCGUCUACUCCUGCUUGAAGACGAGGAUGCAGCCGCGGCUGGAGGCGGGGGUGUAGUCGUGGUUUACUAUUCAUCCUCGUCUUGCUGGUGUUUAUUCUUGUUUUAA -> MKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF*
Modifica: aggiunti altri casi di test
punteggio
Questo è il codice golf, quindi vince il codice nel minor numero di byte.
Nota: non sono un esperto di biologia molecolare, quindi sentiti libero di correggermi se ho sbagliato a capire qualcosa :)
M
e finisca con *
.