РНК , як і ДНК - це молекула, що знаходиться в клітинах, що кодують генетичну інформацію. Він складається з нуклеотидів , які представлені основами аденіну (A), цитозину (C), гуаніну (G) та урацилу (U). * Кодон - це послідовність трьох нуклеотидів.
Білки - це великі молекули, які виконують широкий спектр функцій, наприклад кератин, який міститься у волоссі та нігтях, і гемоглобін, який несе кисень у клітинах крові. Вони складаються з амінокислот , які кодуються як кодони в молекулах РНК. Іноді різні кодони можуть кодувати одну і ту ж амінокислоту. Кожна амінокислота зазвичай представлена однією буквою, наприклад H означає гістидин.
Враховуючи послідовність ACGU
, чи можете ви перекласти її у відповідну білкову рядок?
* ДНК складається з АКТГТ, де Т - тимін. Під час транскрипції ДНК до РНК тимін замінюється урацилом.
Вхідні дані
Введенням буде одна рядок, що складається лише з символів 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
і закінчується *
.