РНК , как и ДНК, представляет собой молекулу, обнаруженную в клетках, кодирующих генетическую информацию. Он состоит из нуклеотидов , которые представлены основаниями аденин (A), цитозин (C), гуанин (G) и урацил (U). * Кодон представляет собой последовательность из трех нуклеотидов.
Белки - это большие молекулы, которые выполняют широкий спектр функций, такие как кератин, который содержится в волосах и ногтях, и гемоглобин, который переносит кислород в клетках крови. Они состоят из аминокислот , которые кодируются в виде кодонов в молекулах РНК. Иногда разные кодоны могут кодировать одну и ту же аминокислоту. Каждая аминокислота обычно представлена одной буквой, например, H обозначает гистидин.
Учитывая последовательность ACGU, можете ли вы перевести ее в соответствующую строку белка?
* ДНК состоит из ACGT, где T - тимин. Во время транскрипции ДНК в РНК тимин заменяется урацилом.
вход
Ввод будет одной строкой, состоящей только из символов ACGUв верхнем регистре. Вы можете написать либо функцию, либо полную программу для этой задачи.
Выход
Вы можете выбрать вывод через печать или возврат строки (последний вариант доступен только в случае функции).
Перевод следует начинать на старте - кодоне ( AUG, представлена в виде M) и конце в стопе - кодоне (один из UAA, UAGили UGA, представлен в виде *). В четырех случаях ввод может быть недействительным:
- Ввод не начинается со стартового кодона
- Ввод не заканчивается стоп-кодоном
- Длина входа не кратна 3
- Вход содержит кодон остановки где-то кроме конца
Во всех этих случаях Errorдолжны быть выведены. Обратите внимание, что, в отличие от стоп-кодонов, стартовые кодоны могут появляться после начала строки.
В противном случае вы должны преобразовать каждый кодон в соответствующую ему аминокислоту через следующую таблицу кодирования РНК :
* 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
... и вывести переведенную строку.
Примеры
Неверные случаи:
<empty string> -> Error
AUG -> Error
UAA -> Error
AUGCUAG -> Error
AAAAAAA -> Error
GGGCACUAG -> Error
AUGAACGGA -> Error
AUGUAGUGA -> Error
AUGUUUGUUCCGUCGAAAUACCUAUGAACACGCUAA -> Error
Допустимые случаи:
AUGUGA -> M*
AUGAGGUGUAGCUGA -> MRCS*
AUGGGUGAGAAUGAAACGAUUUGCAGUUAA -> MGENETICS*
AUGCCAGUCGCACGAUUAGUUCACACGCUCUUGUAA -> MPVARLVHTLL*
AUGCUGCGGUCCUCGCAUCUAGCGUUGUGGUUAGGGUGUGUAACUUCGAGAACAGUGAGUCCCGUACCAGGUAGCAUAAUGCGAGCAAUGUCGUACGAUUCAUAG -> MLRSSHLALWLGCVTSRTVSPVPGSIMRAMSYDS*
AUGAAAAACAAGAAUACAACCACGACUAGAAGCAGGAGUAUAAUCAUGAUUCAACACCAGCAUCCACCCCCGCCUCGACGCCGGCGUCUACUCCUGCUUGAAGACGAGGAUGCAGCCGCGGCUGGAGGCGGGGGUGUAGUCGUGGUUUACUAUUCAUCCUCGUCUUGCUGGUGUUUAUUCUUGUUUUAA -> MKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF*
Изменить: Добавлено больше тестов
счет
Это код гольф, поэтому код в наименьшем количестве байтов выигрывает.
Примечание: я не специалист по молекулярной биологии, поэтому не стесняйтесь поправлять меня, если я что-то неверно уточнил :)
Mи заканчивается *.