O RNA , como o DNA, é uma molécula encontrada nas células que codificam informações genéticas. É constituído por nucleotídeos , que são representados pelas bases adenina (A), citosina (C), guanina (G) e uracil (U). * Um códon é uma sequência de três nucleotídeos.
As proteínas são moléculas grandes que desempenham uma vasta gama de funções, como a queratina, encontrada nos cabelos e unhas, e a hemoglobina, que transporta oxigênio nas células sanguíneas. Eles são compostos de aminoácidos , que são codificados como códons nas moléculas de RNA. Às vezes, códons diferentes podem codificar para o mesmo aminoácido. Cada aminoácido é comumente representado por uma única letra, por exemplo H significa histidina.
Dada uma sequência de ACGU
, você pode traduzi-la na sequência de proteínas correspondente?
* O DNA consiste em ACGT, onde o T é timina. Durante a transcrição do DNA para o RNA, a timina é substituída pelo uracil.
Entrada
A entrada será uma única sequência que consiste apenas nos caracteres ACGU
em maiúsculas. Você pode escrever uma função ou um programa completo para esse desafio.
Resultado
Você pode optar por imprimir ou imprimir uma string (a última opção está disponível apenas no caso de uma função).
A tradução deve começar no códon inicial ( AUG
, representado como M
) e terminar no códon final (um de UAA
, UAG
ou UGA
representado como *
). Há quatro casos em que a entrada pode ser inválida:
- A entrada não começa com um codão de início
- A entrada não termina com um códon de parada
- O comprimento da entrada não é múltiplo de 3
- A entrada contém um códon de parada em outro lugar que não no final
Em todos esses casos, Error
deve ser gerado. Observe que, diferentemente dos códons de parada, os códons de início podem aparecer após o início da string.
Caso contrário, você deve converter cada códon em seu respectivo aminoácido através da seguinte tabela de códons de 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 produz a string traduzida.
Exemplos
Casos inválidos:
<empty string> -> Error
AUG -> Error
UAA -> Error
AUGCUAG -> Error
AAAAAAA -> Error
GGGCACUAG -> Error
AUGAACGGA -> Error
AUGUAGUGA -> Error
AUGUUUGUUCCGUCGAAAUACCUAUGAACACGCUAA -> Error
Casos válidos:
AUGUGA -> M*
AUGAGGUGUAGCUGA -> MRCS*
AUGGGUGAGAAUGAAACGAUUUGCAGUUAA -> MGENETICS*
AUGCCAGUCGCACGAUUAGUUCACACGCUCUUGUAA -> MPVARLVHTLL*
AUGCUGCGGUCCUCGCAUCUAGCGUUGUGGUUAGGGUGUGUAACUUCGAGAACAGUGAGUCCCGUACCAGGUAGCAUAAUGCGAGCAAUGUCGUACGAUUCAUAG -> MLRSSHLALWLGCVTSRTVSPVPGSIMRAMSYDS*
AUGAAAAACAAGAAUACAACCACGACUAGAAGCAGGAGUAUAAUCAUGAUUCAACACCAGCAUCCACCCCCGCCUCGACGCCGGCGUCUACUCCUGCUUGAAGACGAGGAUGCAGCCGCGGCUGGAGGCGGGGGUGUAGUCGUGGUUUACUAUUCAUCCUCGUCUUGCUGGUGUUUAUUCUUGUUUUAA -> MKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF*
Edit: Adicionado mais casos de teste
Pontuação
Esse é o código golf, portanto o código com o menor número de bytes vence.
Nota: Eu não sou especialista em biologia molecular, portanto, sinta-se à vontade para me corrigir se eu tiver afirmado algo errado :)
M
e termina *
.