РНК , как и ДНК, представляет собой молекулу, обнаруженную в клетках, кодирующих генетическую информацию. Он состоит из нуклеотидов , которые представлены основаниями аденин (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
и заканчивается *
.